diff --git a/docs/docs.go b/docs/docs.go deleted file mode 100644 index eb66110..0000000 --- a/docs/docs.go +++ /dev/null @@ -1,26 +0,0 @@ -// Code generated by swaggo/swag. DO NOT EDIT. - -package docs - -import "github.com/swaggo/swag/v2" - -const docTemplate = `{ - "schemes": {{ marshal .Schemes }},"swagger":"2.0","info":{"description":"{{escape .Description}}","title":"{{.Title}}","contact":{"name":"GlueOps"},"version":"{{.Version}}"},"host":"{{.Host}}","basePath":"{{.BasePath}}","paths":{"/.well-known/jwks.json":{"get":{"description":"Returns the JSON Web Key Set for token verification","produces":["application/json"],"tags":["Auth"],"summary":"Get JWKS","operationId":"getJWKS","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.JWKS"}}}}},"/admin/archer/jobs":{"get":{"security":[{"BearerAuth":[]}],"description":"Paginated background jobs with optional filters. Search ` + "`" + `q` + "`" + ` may match id, type, error, payload (implementation-dependent).","consumes":["application/json"],"produces":["application/json"],"tags":["ArcherAdmin"],"summary":"List Archer jobs (admin)","operationId":"AdminListArcherJobs","parameters":[{"enum":["queued","running","succeeded","failed","canceled","retrying","scheduled"],"type":"string","description":"Filter by status","name":"status","in":"query"},{"type":"string","description":"Filter by queue name / worker name","name":"queue","in":"query"},{"type":"string","description":"Free-text search","name":"q","in":"query"},{"type":"integer","default":1,"description":"Page number","name":"page","in":"query"},{"maximum":100,"minimum":1,"type":"integer","default":25,"description":"Items per page","name":"page_size","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.PageJob"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"forbidden","schema":{"type":"string"}},"500":{"description":"internal error","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]}],"description":"Create a job immediately or schedule it for the future via ` + "`" + `run_at` + "`" + `.","consumes":["application/json"],"produces":["application/json"],"tags":["ArcherAdmin"],"summary":"Enqueue a new Archer job (admin)","operationId":"AdminEnqueueArcherJob","parameters":[{"description":"Job parameters","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.EnqueueRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.Job"}},"400":{"description":"invalid json or missing fields","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"forbidden","schema":{"type":"string"}},"500":{"description":"internal error","schema":{"type":"string"}}}}},"/admin/archer/jobs/{id}/cancel":{"post":{"security":[{"BearerAuth":[]}],"description":"Set job status to canceled if cancellable. For running jobs, this only affects future picks; wire to Archer if you need active kill.","consumes":["application/json"],"produces":["application/json"],"tags":["ArcherAdmin"],"summary":"Cancel an Archer job (admin)","operationId":"AdminCancelArcherJob","parameters":[{"type":"string","description":"Job ID","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.Job"}},"400":{"description":"invalid job or not cancellable","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"forbidden","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}}}}},"/admin/archer/jobs/{id}/retry":{"post":{"security":[{"BearerAuth":[]}],"description":"Marks the job retriable (DB flip). Swap this for an Archer admin call if you expose one.","consumes":["application/json"],"produces":["application/json"],"tags":["ArcherAdmin"],"summary":"Retry a failed/canceled Archer job (admin)","operationId":"AdminRetryArcherJob","parameters":[{"type":"string","description":"Job ID","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.Job"}},"400":{"description":"invalid job or not eligible","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"forbidden","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}}}}},"/admin/archer/queues":{"get":{"security":[{"BearerAuth":[]}],"description":"Summary metrics per queue (pending, running, failed, scheduled).","consumes":["application/json"],"produces":["application/json"],"tags":["ArcherAdmin"],"summary":"List Archer queues (admin)","operationId":"AdminListArcherQueues","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.QueueInfo"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"forbidden","schema":{"type":"string"}},"500":{"description":"internal error","schema":{"type":"string"}}}}},"/annotations":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns annotations for the organization in X-Org-ID. Filters: ` + "`" + `key` + "`" + `, ` + "`" + `value` + "`" + `, and ` + "`" + `q` + "`" + ` (key contains). Add ` + "`" + `include=node_pools` + "`" + ` to include linked node pools.","consumes":["application/json"],"produces":["application/json"],"tags":["Annotations"],"summary":"List annotations (org scoped)","operationId":"ListAnnotations","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Exact key","name":"key","in":"query"},{"type":"string","description":"Exact value","name":"value","in":"query"},{"type":"string","description":"key contains (case-insensitive)","name":"q","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.AnnotationResponse"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"failed to list annotations","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Creates an annotation.","consumes":["application/json"],"produces":["application/json"],"tags":["Annotations"],"summary":"Create annotation (org scoped)","operationId":"CreateAnnotation","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"description":"Annotation payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateAnnotationRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.AnnotationResponse"}},"400":{"description":"invalid json / missing fields","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"create failed","schema":{"type":"string"}}}}},"/annotations/{id}":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns one annotation. Add ` + "`" + `include=node_pools` + "`" + ` to include node pools.","consumes":["application/json"],"produces":["application/json"],"tags":["Annotations"],"summary":"Get annotation by ID (org scoped)","operationId":"GetAnnotation","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Annotation ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.AnnotationResponse"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Permanently deletes the annotation.","consumes":["application/json"],"produces":["application/json"],"tags":["Annotations"],"summary":"Delete annotation (org scoped)","operationId":"DeleteAnnotation","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Annotation ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"delete failed","schema":{"type":"string"}}}},"patch":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Partially update annotation fields.","consumes":["application/json"],"produces":["application/json"],"tags":["Annotations"],"summary":"Update annotation (org scoped)","operationId":"UpdateAnnotation","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Annotation ID (UUID)","name":"id","in":"path","required":true},{"description":"Fields to update","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.UpdateAnnotationRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.AnnotationResponse"}},"400":{"description":"invalid id / invalid json","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"update failed","schema":{"type":"string"}}}}},"/auth/logout":{"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["Auth"],"summary":"Revoke refresh token family (logout everywhere)","operationId":"Logout","parameters":[{"description":"Refresh token","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.LogoutRequest"}}],"responses":{"204":{"description":"No Content"}}}},"/auth/refresh":{"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["Auth"],"summary":"Rotate refresh token","operationId":"Refresh","parameters":[{"description":"Refresh token","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.RefreshRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.TokenPair"}}}}},"/auth/{provider}/callback":{"get":{"produces":["application/json"],"tags":["Auth"],"summary":"Handle social login callback","operationId":"AuthCallback","parameters":[{"type":"string","description":"google|github","name":"provider","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.TokenPair"}}}}},"/auth/{provider}/start":{"post":{"description":"Returns provider authorization URL for the frontend to redirect","produces":["application/json"],"tags":["Auth"],"summary":"Begin social login","operationId":"AuthStart","parameters":[{"type":"string","description":"google|github","name":"provider","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.AuthStartResponse"}}}}},"/clusters":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns clusters for the organization in X-Org-ID. Filter by ` + "`" + `q` + "`" + ` (name contains).","produces":["application/json"],"tags":["Clusters"],"summary":"List clusters (org scoped)","operationId":"ListClusters","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Name contains (case-insensitive)","name":"q","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.ClusterResponse"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"failed to list clusters","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Creates a cluster. If ` + "`" + `kubeconfig` + "`" + ` is provided, it will be encrypted per-organization and stored securely (never returned).","consumes":["application/json"],"produces":["application/json"],"tags":["Clusters"],"summary":"Create cluster (org scoped)","operationId":"CreateCluster","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"description":"payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateClusterRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.ClusterResponse"}},"400":{"description":"invalid json","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"create failed","schema":{"type":"string"}}}}},"/credentials":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns credential metadata for the current org. Secrets are never returned.","consumes":["application/json"],"produces":["application/json"],"tags":["Credentials"],"summary":"List credentials (metadata only)","operationId":"ListCredentials","parameters":[{"type":"string","description":"Organization ID (UUID)","name":"X-Org-ID","in":"header"},{"type":"string","description":"Filter by provider (e.g., aws)","name":"provider","in":"query"},{"type":"string","description":"Filter by kind (e.g., aws_access_key)","name":"kind","in":"query"},{"type":"string","description":"Filter by scope kind (provider/service/resource)","name":"scope_kind","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.CredentialOut"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"internal server error","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Credentials"],"summary":"Create a credential (encrypts secret)","operationId":"CreateCredential","parameters":[{"type":"string","description":"Organization ID (UUID)","name":"X-Org-ID","in":"header"},{"description":"Credential payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateCredentialRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.CredentialOut"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"internal server error","schema":{"type":"string"}}}}},"/credentials/{id}":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Credentials"],"summary":"Get credential by ID (metadata only)","operationId":"GetCredential","parameters":[{"type":"string","description":"Organization ID (UUID)","name":"X-Org-ID","in":"header"},{"type":"string","description":"Credential ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.CredentialOut"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"internal server error","schema":{"type":"string"}}}},"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Credentials"],"summary":"Delete credential","operationId":"DeleteCredential","parameters":[{"type":"string","description":"Organization ID (UUID)","name":"X-Org-ID","in":"header"},{"type":"string","description":"Credential ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content"},"404":{"description":"not found","schema":{"type":"string"}}}},"patch":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Credentials"],"summary":"Update credential metadata and/or rotate secret","operationId":"UpdateCredential","parameters":[{"type":"string","description":"Organization ID (UUID)","name":"X-Org-ID","in":"header"},{"type":"string","description":"Credential ID (UUID)","name":"id","in":"path","required":true},{"description":"Fields to update","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.UpdateCredentialRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.CredentialOut"}},"403":{"description":"X-Org-ID required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}}}}},"/credentials/{id}/reveal":{"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Credentials"],"summary":"Reveal decrypted secret (one-time read)","operationId":"RevealCredential","parameters":[{"type":"string","description":"Organization ID (UUID)","name":"X-Org-ID","in":"header"},{"type":"string","description":"Credential ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"object","additionalProperties":true}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}}}}},"/healthz":{"get":{"description":"Returns 200 OK when the service is up","consumes":["application/json"],"produces":["application/json"],"tags":["Health"],"summary":"Basic health check","operationId":"HealthCheck // operationId","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/handlers.HealthStatus"}}}}},"/labels":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns node labels for the organization in X-Org-ID. Filters: ` + "`" + `key` + "`" + `, ` + "`" + `value` + "`" + `, and ` + "`" + `q` + "`" + ` (key contains). Add ` + "`" + `include=node_pools` + "`" + ` to include linked node groups.","consumes":["application/json"],"produces":["application/json"],"tags":["Labels"],"summary":"List node labels (org scoped)","operationId":"ListLabels","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Exact key","name":"key","in":"query"},{"type":"string","description":"Exact value","name":"value","in":"query"},{"type":"string","description":"Key contains (case-insensitive)","name":"q","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.LabelResponse"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"failed to list node taints","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Creates a label.","consumes":["application/json"],"produces":["application/json"],"tags":["Labels"],"summary":"Create label (org scoped)","operationId":"CreateLabel","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"description":"Label payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateLabelRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.LabelResponse"}},"400":{"description":"invalid json / missing fields / invalid node_pool_ids","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"create failed","schema":{"type":"string"}}}}},"/labels/{id}":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns one label.","consumes":["application/json"],"produces":["application/json"],"tags":["Labels"],"summary":"Get label by ID (org scoped)","operationId":"GetLabel","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Label ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.LabelResponse"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Permanently deletes the label.","consumes":["application/json"],"produces":["application/json"],"tags":["Labels"],"summary":"Delete label (org scoped)","operationId":"DeleteLabel","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Label ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"delete failed","schema":{"type":"string"}}}},"patch":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Partially update label fields.","consumes":["application/json"],"produces":["application/json"],"tags":["Labels"],"summary":"Update label (org scoped)","operationId":"UpdateLabel","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Label ID (UUID)","name":"id","in":"path","required":true},{"description":"Fields to update","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.UpdateLabelRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.LabelResponse"}},"400":{"description":"invalid id / invalid json","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"update failed","schema":{"type":"string"}}}}},"/me":{"get":{"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"produces":["application/json"],"tags":["Me"],"summary":"Get current user profile","operationId":"GetMe","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/handlers.meResponse"}}}},"patch":{"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Me"],"summary":"Update current user profile","operationId":"UpdateMe","parameters":[{"description":"Patch profile","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/handlers.updateMeRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/models.User"}}}}},"/me/api-keys":{"get":{"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"produces":["application/json"],"tags":["MeAPIKeys"],"summary":"List my API keys","operationId":"ListUserAPIKeys","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/handlers.userAPIKeyOut"}}}}},"post":{"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"description":"Returns the plaintext key once. Store it securely on the client side.","consumes":["application/json"],"produces":["application/json"],"tags":["MeAPIKeys"],"summary":"Create a new user API key","operationId":"CreateUserAPIKey","parameters":[{"description":"Key options","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/handlers.createUserKeyRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/handlers.userAPIKeyOut"}}}}},"/me/api-keys/{id}":{"delete":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["MeAPIKeys"],"summary":"Delete a user API key","operationId":"DeleteUserAPIKey","parameters":[{"type":"string","description":"Key ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content"}}}},"/node-pools":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns node pools for the organization in X-Org-ID.","consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"List node pools (org scoped)","operationId":"ListNodePools","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Name contains (case-insensitive)","name":"q","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.NodePoolResponse"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"failed to list node pools","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Creates a node pool. Optionally attach initial servers.","consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Create node pool (org scoped)","operationId":"CreateNodePool","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"description":"NodePool payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateNodePoolRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.NodePoolResponse"}},"400":{"description":"invalid json / missing fields / invalid server_ids","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"create failed","schema":{"type":"string"}}}}},"/node-pools/{id}":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns one node pool. Add ` + "`" + `include=servers` + "`" + ` to include servers.","consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Get node pool by ID (org scoped)","operationId":"GetNodePool","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.NodePoolResponse"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Permanently deletes the node pool.","consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Delete node pool (org scoped)","operationId":"DeleteNodePool","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"delete failed","schema":{"type":"string"}}}},"patch":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Partially update node pool fields.","consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Update node pool (org scoped)","operationId":"UpdateNodePool","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"description":"Fields to update","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.UpdateNodePoolRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.NodePoolResponse"}},"400":{"description":"invalid id / invalid json","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"update failed","schema":{"type":"string"}}}}},"/node-pools/{id}/annotations":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"List annotations attached to a node pool (org scoped)","operationId":"ListNodePoolAnnotations","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.AnnotationResponse"}}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Attach annotation to a node pool (org scoped)","operationId":"AttachNodePoolAnnotations","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Group ID (UUID)","name":"id","in":"path","required":true},{"description":"Annotation IDs to attach","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.AttachAnnotationsRequest"}}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id / invalid server_ids","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"attach failed","schema":{"type":"string"}}}}},"/node-pools/{id}/annotations/{annotationId}":{"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Detach one annotation from a node pool (org scoped)","operationId":"DetachNodePoolAnnotation","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"type":"string","description":"Annotation ID (UUID)","name":"annotationId","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"detach failed","schema":{"type":"string"}}}}},"/node-pools/{id}/labels":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"List labels attached to a node pool (org scoped)","operationId":"ListNodePoolLabels","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Label Pool ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.LabelResponse"}}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Attach labels to a node pool (org scoped)","operationId":"AttachNodePoolLabels","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"description":"Label IDs to attach","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.AttachLabelsRequest"}}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id / invalid server_ids","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"attach failed","schema":{"type":"string"}}}}},"/node-pools/{id}/labels/{labelId}":{"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Detach one label from a node pool (org scoped)","operationId":"DetachNodePoolLabel","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"type":"string","description":"Label ID (UUID)","name":"labelId","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"detach failed","schema":{"type":"string"}}}}},"/node-pools/{id}/servers":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"List servers attached to a node pool (org scoped)","operationId":"ListNodePoolServers","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.ServerResponse"}}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Attach servers to a node pool (org scoped)","operationId":"AttachNodePoolServers","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"description":"Server IDs to attach","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.AttachServersRequest"}}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id / invalid server_ids","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"attach failed","schema":{"type":"string"}}}}},"/node-pools/{id}/servers/{serverId}":{"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Detach one server from a node pool (org scoped)","operationId":"DetachNodePoolServer","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"type":"string","description":"Server ID (UUID)","name":"serverId","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"detach failed","schema":{"type":"string"}}}}},"/node-pools/{id}/taints":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"List taints attached to a node pool (org scoped)","operationId":"ListNodePoolTaints","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.TaintResponse"}}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Attach taints to a node pool (org scoped)","operationId":"AttachNodePoolTaints","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"description":"Taint IDs to attach","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.AttachTaintsRequest"}}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id / invalid taint_ids","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"attach failed","schema":{"type":"string"}}}}},"/node-pools/{id}/taints/{taintId}":{"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Detach one taint from a node pool (org scoped)","operationId":"DetachNodePoolTaint","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"type":"string","description":"Taint ID (UUID)","name":"taintId","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"detach failed","schema":{"type":"string"}}}}},"/orgs":{"get":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["Orgs"],"summary":"List organizations I belong to","operationId":"listMyOrgs","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/models.Organization"}}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}},"post":{"security":[{"BearerAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Orgs"],"summary":"Create organization","operationId":"createOrg","parameters":[{"description":"Org payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/handlers.orgCreateReq"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/models.Organization"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/utils.ErrorResponse"}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}},"409":{"description":"Conflict","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}}},"/orgs/{id}":{"get":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["Orgs"],"summary":"Get organization","operationId":"getOrg","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/models.Organization"}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}},"delete":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["Orgs"],"summary":"Delete organization (owner)","operationId":"deleteOrg","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}},"patch":{"security":[{"BearerAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Orgs"],"summary":"Update organization (owner/admin)","operationId":"updateOrg","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true},{"description":"Update payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/handlers.orgUpdateReq"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/models.Organization"}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}}},"/orgs/{id}/api-keys":{"get":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["Orgs"],"summary":"List org-scoped API keys (no secrets)","operationId":"listOrgKeys","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/models.APIKey"}}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}},"post":{"security":[{"BearerAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Orgs"],"summary":"Create org key/secret pair (owner/admin)","operationId":"createOrgKey","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true},{"description":"Key name + optional expiry","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/handlers.orgKeyCreateReq"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/handlers.orgKeyCreateResp"}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}}},"/orgs/{id}/api-keys/{key_id}":{"delete":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["Orgs"],"summary":"Delete org key (owner/admin)","operationId":"deleteOrgKey","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true},{"type":"string","description":"Key ID (UUID)","name":"key_id","in":"path","required":true}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}}},"/orgs/{id}/members":{"get":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["Orgs"],"summary":"List members in org","operationId":"listMembers","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/handlers.memberOut"}}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}},"post":{"security":[{"BearerAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Orgs"],"summary":"Add or update a member (owner/admin)","operationId":"addOrUpdateMember","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true},{"description":"User \u0026 role","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/handlers.memberUpsertReq"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/handlers.memberOut"}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}}},"/orgs/{id}/members/{user_id}":{"delete":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["Orgs"],"summary":"Remove a member (owner/admin)","operationId":"removeMember","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true},{"type":"string","description":"User ID (UUID)","name":"user_id","in":"path","required":true}],"responses":{"204":{"description":"Removed"},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}}},"/servers":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns servers for the organization in X-Org-ID. Optional filters: status, role.","consumes":["application/json"],"produces":["application/json"],"tags":["Servers"],"summary":"List servers (org scoped)","operationId":"ListServers","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Filter by status (pending|provisioning|ready|failed)","name":"status","in":"query"},{"type":"string","description":"Filter by role","name":"role","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.ServerResponse"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"failed to list servers","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Creates a server bound to the org in X-Org-ID. Validates that ssh_key_id belongs to the org.","consumes":["application/json"],"produces":["application/json"],"tags":["Servers"],"summary":"Create server (org scoped)","operationId":"CreateServer","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"description":"Server payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateServerRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.ServerResponse"}},"400":{"description":"invalid json / missing fields / invalid status / invalid ssh_key_id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"create failed","schema":{"type":"string"}}}}},"/servers/{id}":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns one server in the given organization.","consumes":["application/json"],"produces":["application/json"],"tags":["Servers"],"summary":"Get server by ID (org scoped)","operationId":"GetServer","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Server ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.ServerResponse"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Permanently deletes the server.","consumes":["application/json"],"produces":["application/json"],"tags":["Servers"],"summary":"Delete server (org scoped)","operationId":"DeleteServer","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Server ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"delete failed","schema":{"type":"string"}}}},"patch":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Partially update fields; changing ssh_key_id validates ownership.","consumes":["application/json"],"produces":["application/json"],"tags":["Servers"],"summary":"Update server (org scoped)","operationId":"UpdateServer","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Server ID (UUID)","name":"id","in":"path","required":true},{"description":"Fields to update","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.UpdateServerRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.ServerResponse"}},"400":{"description":"invalid id / invalid json / invalid status / invalid ssh_key_id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"update failed","schema":{"type":"string"}}}}},"/ssh":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns ssh keys for the organization in X-Org-ID.","consumes":["application/json"],"produces":["application/json"],"tags":["Ssh"],"summary":"List ssh keys (org scoped)","operationId":"ListPublicSshKeys","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.SshResponse"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"failed to list keys","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Generates an RSA or ED25519 keypair, saves it, and returns metadata. For RSA you may set bits (2048/3072/4096). Default is 4096. ED25519 ignores bits.","consumes":["application/json"],"produces":["application/json"],"tags":["Ssh"],"summary":"Create ssh keypair (org scoped)","operationId":"CreateSSHKey","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"description":"Key generation options","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateSSHRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.SshResponse"}},"400":{"description":"invalid json / invalid bits","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"generation/create failed","schema":{"type":"string"}}}}},"/ssh/{id}":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns public key fields. Append ` + "`" + `?reveal=true` + "`" + ` to include the private key PEM.","consumes":["application/json"],"produces":["application/json"],"tags":["Ssh"],"summary":"Get ssh key by ID (org scoped)","operationId":"GetSSHKey","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"SSH Key ID (UUID)","name":"id","in":"path","required":true},{"type":"boolean","description":"Reveal private key PEM","name":"reveal","in":"query"}],"responses":{"200":{"description":"When reveal=true","schema":{"$ref":"#/definitions/dto.SshRevealResponse"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Permanently deletes a keypair.","consumes":["application/json"],"produces":["application/json"],"tags":["Ssh"],"summary":"Delete ssh keypair (org scoped)","operationId":"DeleteSSHKey","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"SSH Key ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"delete failed","schema":{"type":"string"}}}}},"/ssh/{id}/download":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Download ` + "`" + `part=public|private|both` + "`" + ` of the keypair. ` + "`" + `both` + "`" + ` returns a zip file.","produces":["application/json"],"tags":["Ssh"],"summary":"Download ssh key files by ID (org scoped)","operationId":"DownloadSSHKey","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header","required":true},{"type":"string","description":"SSH Key ID (UUID)","name":"id","in":"path","required":true},{"enum":["public","private","both"],"type":"string","description":"Which part to download","name":"part","in":"query","required":true}],"responses":{"200":{"description":"file content","schema":{"type":"string"}},"400":{"description":"invalid id / invalid part","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"download failed","schema":{"type":"string"}}}}},"/taints":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns node taints for the organization in X-Org-ID. Filters: ` + "`" + `key` + "`" + `, ` + "`" + `value` + "`" + `, and ` + "`" + `q` + "`" + ` (key contains). Add ` + "`" + `include=node_pools` + "`" + ` to include linked node pools.","consumes":["application/json"],"produces":["application/json"],"tags":["Taints"],"summary":"List node pool taints (org scoped)","operationId":"ListTaints","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Exact key","name":"key","in":"query"},{"type":"string","description":"Exact value","name":"value","in":"query"},{"type":"string","description":"key contains (case-insensitive)","name":"q","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.TaintResponse"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"failed to list node taints","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Creates a taint.","consumes":["application/json"],"produces":["application/json"],"tags":["Taints"],"summary":"Create node taint (org scoped)","operationId":"CreateTaint","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"description":"Taint payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateTaintRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.TaintResponse"}},"400":{"description":"invalid json / missing fields / invalid node_pool_ids","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"create failed","schema":{"type":"string"}}}}},"/taints/{id}":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Taints"],"summary":"Get node taint by ID (org scoped)","operationId":"GetTaint","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Taint ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.TaintResponse"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Permanently deletes the taint.","consumes":["application/json"],"produces":["application/json"],"tags":["Taints"],"summary":"Delete taint (org scoped)","operationId":"DeleteTaint","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Taint ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"delete failed","schema":{"type":"string"}}}},"patch":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Partially update taint fields.","consumes":["application/json"],"produces":["application/json"],"tags":["Taints"],"summary":"Update node taint (org scoped)","operationId":"UpdateTaint","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Taint ID (UUID)","name":"id","in":"path","required":true},{"description":"Fields to update","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.UpdateTaintRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.TaintResponse"}},"400":{"description":"invalid id / invalid json","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"update failed","schema":{"type":"string"}}}}},"/version":{"get":{"description":"Returns build/runtime metadata for the running service.","consumes":["application/json"],"produces":["application/json"],"tags":["Meta"],"summary":"Service version information","operationId":"Version // operationId","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/handlers.VersionResponse"}}}}}},"definitions":{"dto.AnnotationResponse":{"type":"object","properties":{"created_at":{"type":"string"},"id":{"type":"string"},"key":{"type":"string"},"organization_id":{"type":"string"},"updated_at":{"type":"string"},"value":{"type":"string"}}},"dto.AttachAnnotationsRequest":{"type":"object","properties":{"annotation_ids":{"type":"array","items":{"type":"string"}}}},"dto.AttachLabelsRequest":{"type":"object","properties":{"label_ids":{"type":"array","items":{"type":"string"}}}},"dto.AttachServersRequest":{"type":"object","properties":{"server_ids":{"type":"array","items":{"type":"string"}}}},"dto.AttachTaintsRequest":{"type":"object","properties":{"taint_ids":{"type":"array","items":{"type":"string"}}}},"dto.AuthStartResponse":{"type":"object","properties":{"auth_url":{"type":"string","example":"https://accounts.google.com/o/oauth2/v2/auth?client_id=..."}}},"dto.ClusterResponse":{"type":"object","properties":{"bastion_server":{"$ref":"#/definitions/dto.ServerResponse"},"captain_domain":{"type":"string"},"certificate_key":{"type":"string"},"cluster_load_balancer":{"type":"string"},"control_load_balancer":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"node_pools":{"type":"array","items":{"$ref":"#/definitions/dto.NodePoolResponse"}},"provider":{"type":"string"},"random_token":{"type":"string"},"region":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"}}},"dto.CreateAnnotationRequest":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"dto.CreateClusterRequest":{"type":"object","properties":{"captain_domain":{"type":"string"},"cluster_load_balancer":{"type":"string"},"control_load_balancer":{"type":"string"},"name":{"type":"string"},"provider":{"type":"string"},"region":{"type":"string"},"status":{"type":"string"}}},"dto.CreateCredentialRequest":{"type":"object","required":["kind","provider","schema_version","scope","scope_kind","scope_version","secret"],"properties":{"account_id":{"type":"string","maxLength":32},"kind":{"description":"aws_access_key, api_token, basic_auth, oauth2","type":"string"},"name":{"description":"human label","type":"string","maxLength":100},"provider":{"type":"string","enum":["aws","cloudflare","hetzner","digitalocean","generic"]},"region":{"type":"string","maxLength":32},"schema_version":{"description":"secret schema version","type":"integer","minimum":1},"scope":{"description":"{\"service\":\"route53\"} or {\"arn\":\"...\"}","type":"object"},"scope_kind":{"type":"string","enum":["provider","service","resource"]},"scope_version":{"description":"scope schema version","type":"integer","minimum":1},"secret":{"description":"encrypted later","type":"object"}}},"dto.CreateLabelRequest":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"dto.CreateNodePoolRequest":{"type":"object","properties":{"name":{"type":"string"},"role":{"type":"string","enum":["master","worker"]}}},"dto.CreateSSHRequest":{"type":"object","properties":{"bits":{"description":"Only for RSA","type":"integer"},"comment":{"type":"string","example":"deploy@autoglue"},"name":{"type":"string"},"type":{"description":"\"rsa\" (default) or \"ed25519\"","type":"string"}}},"dto.CreateServerRequest":{"type":"object","properties":{"hostname":{"type":"string"},"private_ip_address":{"type":"string"},"public_ip_address":{"type":"string"},"role":{"type":"string","enum":["master","worker","bastion"],"example":"master|worker|bastion"},"ssh_key_id":{"type":"string"},"ssh_user":{"type":"string"},"status":{"type":"string","enum":["pending","provisioning","ready","failed"],"example":"pending|provisioning|ready|failed"}}},"dto.CreateTaintRequest":{"type":"object","properties":{"effect":{"type":"string"},"key":{"type":"string"},"value":{"type":"string"}}},"dto.CredentialOut":{"type":"object","properties":{"account_id":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"kind":{"type":"string"},"name":{"type":"string"},"provider":{"type":"string"},"region":{"type":"string"},"schema_version":{"type":"integer"},"scope":{"type":"object"},"scope_kind":{"type":"string"},"scope_version":{"type":"integer"},"updated_at":{"type":"string"}}},"dto.EnqueueRequest":{"type":"object","properties":{"payload":{"type":"object"},"queue":{"type":"string","example":"default"},"run_at":{"type":"string","example":"2025-11-05T08:00:00Z"},"type":{"type":"string","example":"email.send"}}},"dto.JWK":{"type":"object","properties":{"alg":{"type":"string","example":"RS256"},"e":{"type":"string","example":"AQAB"},"kid":{"type":"string","example":"7c6f1d0a-7a98-4e6a-9dbf-6b1af4b9f345"},"kty":{"type":"string","example":"RSA"},"n":{"type":"string"},"use":{"type":"string","example":"sig"},"x":{"type":"string"}}},"dto.JWKS":{"type":"object","properties":{"keys":{"type":"array","items":{"$ref":"#/definitions/dto.JWK"}}}},"dto.Job":{"type":"object","properties":{"attempts":{"type":"integer","example":0},"created_at":{"type":"string","example":"2025-11-04T09:30:00Z"},"id":{"type":"string","example":"01HF7SZK8Z8WG1M3J7S2Z8M2N6"},"last_error":{"type":"string","example":"error message"},"max_attempts":{"type":"integer","example":3},"payload":{},"queue":{"type":"string","example":"default"},"run_at":{"type":"string","example":"2025-11-04T09:30:00Z"},"status":{"enum":["queued|running|succeeded|failed|canceled|retrying|scheduled"],"allOf":[{"$ref":"#/definitions/dto.JobStatus"}],"example":"queued"},"type":{"type":"string","example":"email.send"},"updated_at":{"type":"string","example":"2025-11-04T09:30:00Z"}}},"dto.JobStatus":{"type":"string","enum":["queued","running","succeeded","failed","canceled","retrying","scheduled"],"x-enum-varnames":["StatusQueued","StatusRunning","StatusSucceeded","StatusFailed","StatusCanceled","StatusRetrying","StatusScheduled"]},"dto.LabelResponse":{"type":"object","properties":{"created_at":{"type":"string"},"id":{"type":"string"},"key":{"type":"string"},"organization_id":{"type":"string"},"updated_at":{"type":"string"},"value":{"type":"string"}}},"dto.LogoutRequest":{"type":"object","properties":{"refresh_token":{"type":"string","example":"m0l9o8rT3t0V8d3eFf..."}}},"dto.NodePoolResponse":{"type":"object","properties":{"annotations":{"type":"array","items":{"$ref":"#/definitions/dto.AnnotationResponse"}},"created_at":{"type":"string"},"id":{"type":"string"},"labels":{"type":"array","items":{"$ref":"#/definitions/dto.LabelResponse"}},"name":{"type":"string"},"organization_id":{"type":"string"},"role":{"type":"string","enum":["master","worker"]},"servers":{"type":"array","items":{"$ref":"#/definitions/dto.ServerResponse"}},"taints":{"type":"array","items":{"$ref":"#/definitions/dto.TaintResponse"}},"updated_at":{"type":"string"}}},"dto.PageJob":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/definitions/dto.Job"}},"page":{"type":"integer","example":1},"page_size":{"type":"integer","example":25},"total":{"type":"integer","example":120}}},"dto.QueueInfo":{"type":"object","properties":{"failed":{"type":"integer","example":5},"name":{"type":"string","example":"default"},"pending":{"type":"integer","example":42},"running":{"type":"integer","example":3},"scheduled":{"type":"integer","example":7}}},"dto.RefreshRequest":{"type":"object","properties":{"refresh_token":{"type":"string","example":"m0l9o8rT3t0V8d3eFf..."}}},"dto.ServerResponse":{"type":"object","properties":{"created_at":{"type":"string"},"hostname":{"type":"string"},"id":{"type":"string"},"organization_id":{"type":"string"},"private_ip_address":{"type":"string"},"public_ip_address":{"type":"string"},"role":{"type":"string","enum":["master","worker","bastion"],"example":"master|worker|bastion"},"ssh_key_id":{"type":"string"},"ssh_user":{"type":"string"},"status":{"type":"string","enum":["pending","provisioning","ready","failed"],"example":"pending|provisioning|ready|failed"},"updated_at":{"type":"string"}}},"dto.SshResponse":{"type":"object","properties":{"created_at":{"type":"string"},"fingerprint":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"organization_id":{"type":"string"},"public_key":{"type":"string"},"updated_at":{"type":"string"}}},"dto.SshRevealResponse":{"type":"object","properties":{"created_at":{"type":"string"},"fingerprint":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"organization_id":{"type":"string"},"private_key":{"type":"string"},"public_key":{"type":"string"},"updated_at":{"type":"string"}}},"dto.TaintResponse":{"type":"object","properties":{"created_at":{"type":"string"},"effect":{"type":"string"},"id":{"type":"string"},"key":{"type":"string"},"organization_id":{"type":"string"},"updated_at":{"type":"string"},"value":{"type":"string"}}},"dto.TokenPair":{"type":"object","properties":{"access_token":{"type":"string","example":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ij..."},"expires_in":{"type":"integer","example":3600},"refresh_token":{"type":"string","example":"m0l9o8rT3t0V8d3eFf...."},"token_type":{"type":"string","example":"Bearer"}}},"dto.UpdateAnnotationRequest":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"dto.UpdateCredentialRequest":{"type":"object","properties":{"account_id":{"type":"string"},"name":{"type":"string"},"region":{"type":"string"},"scope":{"type":"object"},"scope_kind":{"type":"string"},"scope_version":{"type":"integer"},"secret":{"description":"set if rotating","type":"object"}}},"dto.UpdateLabelRequest":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"dto.UpdateNodePoolRequest":{"type":"object","properties":{"name":{"type":"string"},"role":{"type":"string","enum":["master","worker"]}}},"dto.UpdateServerRequest":{"type":"object","properties":{"hostname":{"type":"string"},"private_ip_address":{"type":"string"},"public_ip_address":{"type":"string"},"role":{"type":"string","enum":["master","worker","bastion"],"example":"master|worker|bastion"},"ssh_key_id":{"type":"string"},"ssh_user":{"type":"string"},"status":{"type":"string","enum":["pending","provisioning","ready","failed"],"example":"pending|provisioning|ready|failed"}}},"dto.UpdateTaintRequest":{"type":"object","properties":{"effect":{"type":"string"},"key":{"type":"string"},"value":{"type":"string"}}},"handlers.HealthStatus":{"type":"object","properties":{"status":{"type":"string","example":"ok"}}},"handlers.VersionResponse":{"type":"object","properties":{"built":{"type":"string","example":"2025-11-08T12:34:56Z"},"builtBy":{"type":"string","example":"ci"},"commit":{"type":"string","example":"a1b2c3d"},"commitTime":{"type":"string","example":"2025-11-08T12:31:00Z"},"go":{"type":"string","example":"go1.23.3"},"goArch":{"type":"string","example":"amd64"},"goOS":{"type":"string","example":"linux"},"modified":{"type":"boolean","example":false},"revision":{"type":"string","example":"a1b2c3d4e5f6abcdef"},"vcs":{"type":"string","example":"git"},"version":{"type":"string","example":"1.4.2"}}},"handlers.createUserKeyRequest":{"type":"object","properties":{"expires_in_hours":{"description":"optional TTL","type":"integer"},"name":{"type":"string"}}},"handlers.meResponse":{"type":"object","properties":{"avatar_url":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"display_name":{"type":"string"},"emails":{"type":"array","items":{"$ref":"#/definitions/models.UserEmail"}},"id":{"description":"example: 3fa85f64-5717-4562-b3fc-2c963f66afa6","type":"string","format":"uuid"},"is_admin":{"type":"boolean"},"is_disabled":{"type":"boolean"},"organizations":{"type":"array","items":{"$ref":"#/definitions/models.Organization"}},"primary_email":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}}},"handlers.memberOut":{"type":"object","properties":{"email":{"type":"string"},"role":{"description":"owner/admin/member","type":"string"},"user_id":{"type":"string","format":"uuid"}}},"handlers.memberUpsertReq":{"type":"object","properties":{"role":{"type":"string","example":"member"},"user_id":{"type":"string","format":"uuid"}}},"handlers.orgCreateReq":{"type":"object","properties":{"domain":{"type":"string","example":"acme.com"},"name":{"type":"string","example":"Acme Corp"}}},"handlers.orgKeyCreateReq":{"type":"object","properties":{"expires_in_hours":{"type":"integer","example":720},"name":{"type":"string","example":"automation-bot"}}},"handlers.orgKeyCreateResp":{"type":"object","properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"org_key":{"description":"shown once:","type":"string"},"org_secret":{"description":"shown once:","type":"string"},"scope":{"description":"\"org\"","type":"string"}}},"handlers.orgUpdateReq":{"type":"object","properties":{"domain":{"type":"string"},"name":{"type":"string"}}},"handlers.updateMeRequest":{"type":"object","properties":{"display_name":{"type":"string"}}},"handlers.userAPIKeyOut":{"type":"object","properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"last_used_at":{"type":"string"},"name":{"type":"string"},"plain":{"description":"Shown only on create:","type":"string"},"scope":{"description":"\"user\"","type":"string"}}},"models.APIKey":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"expires_at":{"type":"string","format":"date-time"},"id":{"type":"string","format":"uuid"},"last_used_at":{"type":"string","format":"date-time"},"name":{"type":"string"},"org_id":{"type":"string","format":"uuid"},"prefix":{"type":"string"},"revoked":{"type":"boolean"},"scope":{"type":"string"},"updated_at":{"type":"string","format":"date-time"},"user_id":{"type":"string","format":"uuid"}}},"models.Organization":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"domain":{"type":"string"},"id":{"description":"example: 3fa85f64-5717-4562-b3fc-2c963f66afa6","type":"string","format":"uuid"},"name":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}}},"models.User":{"type":"object","properties":{"avatar_url":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"display_name":{"type":"string"},"id":{"description":"example: 3fa85f64-5717-4562-b3fc-2c963f66afa6","type":"string","format":"uuid"},"is_admin":{"type":"boolean"},"is_disabled":{"type":"boolean"},"primary_email":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}}},"models.UserEmail":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"email":{"type":"string"},"id":{"description":"example: 3fa85f64-5717-4562-b3fc-2c963f66afa6","type":"string","format":"uuid"},"is_primary":{"type":"boolean"},"is_verified":{"type":"boolean"},"updated_at":{"type":"string","format":"date-time"},"user":{"$ref":"#/definitions/models.User"},"user_id":{"type":"string","format":"uuid"}}},"utils.ErrorResponse":{"type":"object","properties":{"code":{"description":"A machine-readable error code, e.g. \"validation_error\"\nexample: validation_error","type":"string"},"message":{"description":"Human-readable message\nexample: slug is required","type":"string"}}}},"securityDefinitions":{"ApiKeyAuth":{"description":"User API key","type":"apiKey","name":"X-API-KEY","in":"header"},"BearerAuth":{"description":"Bearer token authentication","type":"apiKey","name":"Authorization","in":"header"},"OrgKeyAuth":{"description":"Org-level key/secret authentication","type":"apiKey","name":"X-ORG-KEY","in":"header"},"OrgSecretAuth":{"description":"Org-level secret","type":"apiKey","name":"X-ORG-SECRET","in":"header"}}}` - -// SwaggerInfo holds exported Swagger Info so clients can modify it -var SwaggerInfo = &swag.Spec{ - Version: "1.0", - Host: "", - BasePath: "/api/v1", - Schemes: []string{"http", "https"}, - Title: "AutoGlue API", - Description: "API for managing K3s clusters across cloud providers", - InfoInstanceName: "swagger", - SwaggerTemplate: docTemplate, - LeftDelim: "{{", - RightDelim: "}}", -} - -func init() { - swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) -} diff --git a/docs/swagger.json b/docs/swagger.json deleted file mode 100644 index 3e53bef..0000000 --- a/docs/swagger.json +++ /dev/null @@ -1 +0,0 @@ -{"schemes":["http","https"],"swagger":"2.0","info":{"description":"API for managing K3s clusters across cloud providers","title":"AutoGlue API","contact":{"name":"GlueOps"},"version":"1.0"},"basePath":"/api/v1","paths":{"/.well-known/jwks.json":{"get":{"description":"Returns the JSON Web Key Set for token verification","produces":["application/json"],"tags":["Auth"],"summary":"Get JWKS","operationId":"getJWKS","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.JWKS"}}}}},"/admin/archer/jobs":{"get":{"security":[{"BearerAuth":[]}],"description":"Paginated background jobs with optional filters. Search `q` may match id, type, error, payload (implementation-dependent).","consumes":["application/json"],"produces":["application/json"],"tags":["ArcherAdmin"],"summary":"List Archer jobs (admin)","operationId":"AdminListArcherJobs","parameters":[{"enum":["queued","running","succeeded","failed","canceled","retrying","scheduled"],"type":"string","description":"Filter by status","name":"status","in":"query"},{"type":"string","description":"Filter by queue name / worker name","name":"queue","in":"query"},{"type":"string","description":"Free-text search","name":"q","in":"query"},{"type":"integer","default":1,"description":"Page number","name":"page","in":"query"},{"maximum":100,"minimum":1,"type":"integer","default":25,"description":"Items per page","name":"page_size","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.PageJob"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"forbidden","schema":{"type":"string"}},"500":{"description":"internal error","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]}],"description":"Create a job immediately or schedule it for the future via `run_at`.","consumes":["application/json"],"produces":["application/json"],"tags":["ArcherAdmin"],"summary":"Enqueue a new Archer job (admin)","operationId":"AdminEnqueueArcherJob","parameters":[{"description":"Job parameters","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.EnqueueRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.Job"}},"400":{"description":"invalid json or missing fields","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"forbidden","schema":{"type":"string"}},"500":{"description":"internal error","schema":{"type":"string"}}}}},"/admin/archer/jobs/{id}/cancel":{"post":{"security":[{"BearerAuth":[]}],"description":"Set job status to canceled if cancellable. For running jobs, this only affects future picks; wire to Archer if you need active kill.","consumes":["application/json"],"produces":["application/json"],"tags":["ArcherAdmin"],"summary":"Cancel an Archer job (admin)","operationId":"AdminCancelArcherJob","parameters":[{"type":"string","description":"Job ID","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.Job"}},"400":{"description":"invalid job or not cancellable","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"forbidden","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}}}}},"/admin/archer/jobs/{id}/retry":{"post":{"security":[{"BearerAuth":[]}],"description":"Marks the job retriable (DB flip). Swap this for an Archer admin call if you expose one.","consumes":["application/json"],"produces":["application/json"],"tags":["ArcherAdmin"],"summary":"Retry a failed/canceled Archer job (admin)","operationId":"AdminRetryArcherJob","parameters":[{"type":"string","description":"Job ID","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.Job"}},"400":{"description":"invalid job or not eligible","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"forbidden","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}}}}},"/admin/archer/queues":{"get":{"security":[{"BearerAuth":[]}],"description":"Summary metrics per queue (pending, running, failed, scheduled).","consumes":["application/json"],"produces":["application/json"],"tags":["ArcherAdmin"],"summary":"List Archer queues (admin)","operationId":"AdminListArcherQueues","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.QueueInfo"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"forbidden","schema":{"type":"string"}},"500":{"description":"internal error","schema":{"type":"string"}}}}},"/annotations":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns annotations for the organization in X-Org-ID. Filters: `key`, `value`, and `q` (key contains). Add `include=node_pools` to include linked node pools.","consumes":["application/json"],"produces":["application/json"],"tags":["Annotations"],"summary":"List annotations (org scoped)","operationId":"ListAnnotations","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Exact key","name":"key","in":"query"},{"type":"string","description":"Exact value","name":"value","in":"query"},{"type":"string","description":"key contains (case-insensitive)","name":"q","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.AnnotationResponse"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"failed to list annotations","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Creates an annotation.","consumes":["application/json"],"produces":["application/json"],"tags":["Annotations"],"summary":"Create annotation (org scoped)","operationId":"CreateAnnotation","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"description":"Annotation payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateAnnotationRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.AnnotationResponse"}},"400":{"description":"invalid json / missing fields","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"create failed","schema":{"type":"string"}}}}},"/annotations/{id}":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns one annotation. Add `include=node_pools` to include node pools.","consumes":["application/json"],"produces":["application/json"],"tags":["Annotations"],"summary":"Get annotation by ID (org scoped)","operationId":"GetAnnotation","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Annotation ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.AnnotationResponse"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Permanently deletes the annotation.","consumes":["application/json"],"produces":["application/json"],"tags":["Annotations"],"summary":"Delete annotation (org scoped)","operationId":"DeleteAnnotation","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Annotation ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"delete failed","schema":{"type":"string"}}}},"patch":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Partially update annotation fields.","consumes":["application/json"],"produces":["application/json"],"tags":["Annotations"],"summary":"Update annotation (org scoped)","operationId":"UpdateAnnotation","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Annotation ID (UUID)","name":"id","in":"path","required":true},{"description":"Fields to update","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.UpdateAnnotationRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.AnnotationResponse"}},"400":{"description":"invalid id / invalid json","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"update failed","schema":{"type":"string"}}}}},"/auth/logout":{"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["Auth"],"summary":"Revoke refresh token family (logout everywhere)","operationId":"Logout","parameters":[{"description":"Refresh token","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.LogoutRequest"}}],"responses":{"204":{"description":"No Content"}}}},"/auth/refresh":{"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["Auth"],"summary":"Rotate refresh token","operationId":"Refresh","parameters":[{"description":"Refresh token","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.RefreshRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.TokenPair"}}}}},"/auth/{provider}/callback":{"get":{"produces":["application/json"],"tags":["Auth"],"summary":"Handle social login callback","operationId":"AuthCallback","parameters":[{"type":"string","description":"google|github","name":"provider","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.TokenPair"}}}}},"/auth/{provider}/start":{"post":{"description":"Returns provider authorization URL for the frontend to redirect","produces":["application/json"],"tags":["Auth"],"summary":"Begin social login","operationId":"AuthStart","parameters":[{"type":"string","description":"google|github","name":"provider","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.AuthStartResponse"}}}}},"/clusters":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns clusters for the organization in X-Org-ID. Filter by `q` (name contains).","produces":["application/json"],"tags":["Clusters"],"summary":"List clusters (org scoped)","operationId":"ListClusters","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Name contains (case-insensitive)","name":"q","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.ClusterResponse"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"failed to list clusters","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Creates a cluster. If `kubeconfig` is provided, it will be encrypted per-organization and stored securely (never returned).","consumes":["application/json"],"produces":["application/json"],"tags":["Clusters"],"summary":"Create cluster (org scoped)","operationId":"CreateCluster","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"description":"payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateClusterRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.ClusterResponse"}},"400":{"description":"invalid json","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"create failed","schema":{"type":"string"}}}}},"/credentials":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns credential metadata for the current org. Secrets are never returned.","consumes":["application/json"],"produces":["application/json"],"tags":["Credentials"],"summary":"List credentials (metadata only)","operationId":"ListCredentials","parameters":[{"type":"string","description":"Organization ID (UUID)","name":"X-Org-ID","in":"header"},{"type":"string","description":"Filter by provider (e.g., aws)","name":"provider","in":"query"},{"type":"string","description":"Filter by kind (e.g., aws_access_key)","name":"kind","in":"query"},{"type":"string","description":"Filter by scope kind (provider/service/resource)","name":"scope_kind","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.CredentialOut"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"internal server error","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Credentials"],"summary":"Create a credential (encrypts secret)","operationId":"CreateCredential","parameters":[{"type":"string","description":"Organization ID (UUID)","name":"X-Org-ID","in":"header"},{"description":"Credential payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateCredentialRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.CredentialOut"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"internal server error","schema":{"type":"string"}}}}},"/credentials/{id}":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Credentials"],"summary":"Get credential by ID (metadata only)","operationId":"GetCredential","parameters":[{"type":"string","description":"Organization ID (UUID)","name":"X-Org-ID","in":"header"},{"type":"string","description":"Credential ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.CredentialOut"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"internal server error","schema":{"type":"string"}}}},"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Credentials"],"summary":"Delete credential","operationId":"DeleteCredential","parameters":[{"type":"string","description":"Organization ID (UUID)","name":"X-Org-ID","in":"header"},{"type":"string","description":"Credential ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content"},"404":{"description":"not found","schema":{"type":"string"}}}},"patch":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Credentials"],"summary":"Update credential metadata and/or rotate secret","operationId":"UpdateCredential","parameters":[{"type":"string","description":"Organization ID (UUID)","name":"X-Org-ID","in":"header"},{"type":"string","description":"Credential ID (UUID)","name":"id","in":"path","required":true},{"description":"Fields to update","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.UpdateCredentialRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.CredentialOut"}},"403":{"description":"X-Org-ID required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}}}}},"/credentials/{id}/reveal":{"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Credentials"],"summary":"Reveal decrypted secret (one-time read)","operationId":"RevealCredential","parameters":[{"type":"string","description":"Organization ID (UUID)","name":"X-Org-ID","in":"header"},{"type":"string","description":"Credential ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"object","additionalProperties":true}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}}}}},"/healthz":{"get":{"description":"Returns 200 OK when the service is up","consumes":["application/json"],"produces":["application/json"],"tags":["Health"],"summary":"Basic health check","operationId":"HealthCheck // operationId","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/handlers.HealthStatus"}}}}},"/labels":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns node labels for the organization in X-Org-ID. Filters: `key`, `value`, and `q` (key contains). Add `include=node_pools` to include linked node groups.","consumes":["application/json"],"produces":["application/json"],"tags":["Labels"],"summary":"List node labels (org scoped)","operationId":"ListLabels","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Exact key","name":"key","in":"query"},{"type":"string","description":"Exact value","name":"value","in":"query"},{"type":"string","description":"Key contains (case-insensitive)","name":"q","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.LabelResponse"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"failed to list node taints","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Creates a label.","consumes":["application/json"],"produces":["application/json"],"tags":["Labels"],"summary":"Create label (org scoped)","operationId":"CreateLabel","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"description":"Label payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateLabelRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.LabelResponse"}},"400":{"description":"invalid json / missing fields / invalid node_pool_ids","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"create failed","schema":{"type":"string"}}}}},"/labels/{id}":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns one label.","consumes":["application/json"],"produces":["application/json"],"tags":["Labels"],"summary":"Get label by ID (org scoped)","operationId":"GetLabel","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Label ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.LabelResponse"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Permanently deletes the label.","consumes":["application/json"],"produces":["application/json"],"tags":["Labels"],"summary":"Delete label (org scoped)","operationId":"DeleteLabel","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Label ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"delete failed","schema":{"type":"string"}}}},"patch":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Partially update label fields.","consumes":["application/json"],"produces":["application/json"],"tags":["Labels"],"summary":"Update label (org scoped)","operationId":"UpdateLabel","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Label ID (UUID)","name":"id","in":"path","required":true},{"description":"Fields to update","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.UpdateLabelRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.LabelResponse"}},"400":{"description":"invalid id / invalid json","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"update failed","schema":{"type":"string"}}}}},"/me":{"get":{"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"produces":["application/json"],"tags":["Me"],"summary":"Get current user profile","operationId":"GetMe","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/handlers.meResponse"}}}},"patch":{"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Me"],"summary":"Update current user profile","operationId":"UpdateMe","parameters":[{"description":"Patch profile","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/handlers.updateMeRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/models.User"}}}}},"/me/api-keys":{"get":{"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"produces":["application/json"],"tags":["MeAPIKeys"],"summary":"List my API keys","operationId":"ListUserAPIKeys","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/handlers.userAPIKeyOut"}}}}},"post":{"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"description":"Returns the plaintext key once. Store it securely on the client side.","consumes":["application/json"],"produces":["application/json"],"tags":["MeAPIKeys"],"summary":"Create a new user API key","operationId":"CreateUserAPIKey","parameters":[{"description":"Key options","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/handlers.createUserKeyRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/handlers.userAPIKeyOut"}}}}},"/me/api-keys/{id}":{"delete":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["MeAPIKeys"],"summary":"Delete a user API key","operationId":"DeleteUserAPIKey","parameters":[{"type":"string","description":"Key ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content"}}}},"/node-pools":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns node pools for the organization in X-Org-ID.","consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"List node pools (org scoped)","operationId":"ListNodePools","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Name contains (case-insensitive)","name":"q","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.NodePoolResponse"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"failed to list node pools","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Creates a node pool. Optionally attach initial servers.","consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Create node pool (org scoped)","operationId":"CreateNodePool","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"description":"NodePool payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateNodePoolRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.NodePoolResponse"}},"400":{"description":"invalid json / missing fields / invalid server_ids","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"create failed","schema":{"type":"string"}}}}},"/node-pools/{id}":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns one node pool. Add `include=servers` to include servers.","consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Get node pool by ID (org scoped)","operationId":"GetNodePool","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.NodePoolResponse"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Permanently deletes the node pool.","consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Delete node pool (org scoped)","operationId":"DeleteNodePool","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"delete failed","schema":{"type":"string"}}}},"patch":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Partially update node pool fields.","consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Update node pool (org scoped)","operationId":"UpdateNodePool","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"description":"Fields to update","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.UpdateNodePoolRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.NodePoolResponse"}},"400":{"description":"invalid id / invalid json","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"update failed","schema":{"type":"string"}}}}},"/node-pools/{id}/annotations":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"List annotations attached to a node pool (org scoped)","operationId":"ListNodePoolAnnotations","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.AnnotationResponse"}}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Attach annotation to a node pool (org scoped)","operationId":"AttachNodePoolAnnotations","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Group ID (UUID)","name":"id","in":"path","required":true},{"description":"Annotation IDs to attach","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.AttachAnnotationsRequest"}}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id / invalid server_ids","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"attach failed","schema":{"type":"string"}}}}},"/node-pools/{id}/annotations/{annotationId}":{"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Detach one annotation from a node pool (org scoped)","operationId":"DetachNodePoolAnnotation","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"type":"string","description":"Annotation ID (UUID)","name":"annotationId","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"detach failed","schema":{"type":"string"}}}}},"/node-pools/{id}/labels":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"List labels attached to a node pool (org scoped)","operationId":"ListNodePoolLabels","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Label Pool ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.LabelResponse"}}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Attach labels to a node pool (org scoped)","operationId":"AttachNodePoolLabels","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"description":"Label IDs to attach","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.AttachLabelsRequest"}}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id / invalid server_ids","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"attach failed","schema":{"type":"string"}}}}},"/node-pools/{id}/labels/{labelId}":{"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Detach one label from a node pool (org scoped)","operationId":"DetachNodePoolLabel","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"type":"string","description":"Label ID (UUID)","name":"labelId","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"detach failed","schema":{"type":"string"}}}}},"/node-pools/{id}/servers":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"List servers attached to a node pool (org scoped)","operationId":"ListNodePoolServers","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.ServerResponse"}}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Attach servers to a node pool (org scoped)","operationId":"AttachNodePoolServers","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"description":"Server IDs to attach","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.AttachServersRequest"}}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id / invalid server_ids","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"attach failed","schema":{"type":"string"}}}}},"/node-pools/{id}/servers/{serverId}":{"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Detach one server from a node pool (org scoped)","operationId":"DetachNodePoolServer","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"type":"string","description":"Server ID (UUID)","name":"serverId","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"detach failed","schema":{"type":"string"}}}}},"/node-pools/{id}/taints":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"List taints attached to a node pool (org scoped)","operationId":"ListNodePoolTaints","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.TaintResponse"}}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Attach taints to a node pool (org scoped)","operationId":"AttachNodePoolTaints","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"description":"Taint IDs to attach","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.AttachTaintsRequest"}}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id / invalid taint_ids","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"attach failed","schema":{"type":"string"}}}}},"/node-pools/{id}/taints/{taintId}":{"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["NodePools"],"summary":"Detach one taint from a node pool (org scoped)","operationId":"DetachNodePoolTaint","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Pool ID (UUID)","name":"id","in":"path","required":true},{"type":"string","description":"Taint ID (UUID)","name":"taintId","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"detach failed","schema":{"type":"string"}}}}},"/orgs":{"get":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["Orgs"],"summary":"List organizations I belong to","operationId":"listMyOrgs","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/models.Organization"}}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}},"post":{"security":[{"BearerAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Orgs"],"summary":"Create organization","operationId":"createOrg","parameters":[{"description":"Org payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/handlers.orgCreateReq"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/models.Organization"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/utils.ErrorResponse"}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}},"409":{"description":"Conflict","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}}},"/orgs/{id}":{"get":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["Orgs"],"summary":"Get organization","operationId":"getOrg","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/models.Organization"}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}},"delete":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["Orgs"],"summary":"Delete organization (owner)","operationId":"deleteOrg","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}},"patch":{"security":[{"BearerAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Orgs"],"summary":"Update organization (owner/admin)","operationId":"updateOrg","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true},{"description":"Update payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/handlers.orgUpdateReq"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/models.Organization"}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}}},"/orgs/{id}/api-keys":{"get":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["Orgs"],"summary":"List org-scoped API keys (no secrets)","operationId":"listOrgKeys","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/models.APIKey"}}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}},"post":{"security":[{"BearerAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Orgs"],"summary":"Create org key/secret pair (owner/admin)","operationId":"createOrgKey","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true},{"description":"Key name + optional expiry","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/handlers.orgKeyCreateReq"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/handlers.orgKeyCreateResp"}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}}},"/orgs/{id}/api-keys/{key_id}":{"delete":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["Orgs"],"summary":"Delete org key (owner/admin)","operationId":"deleteOrgKey","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true},{"type":"string","description":"Key ID (UUID)","name":"key_id","in":"path","required":true}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}}},"/orgs/{id}/members":{"get":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["Orgs"],"summary":"List members in org","operationId":"listMembers","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/handlers.memberOut"}}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}},"post":{"security":[{"BearerAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Orgs"],"summary":"Add or update a member (owner/admin)","operationId":"addOrUpdateMember","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true},{"description":"User \u0026 role","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/handlers.memberUpsertReq"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/handlers.memberOut"}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}}},"/orgs/{id}/members/{user_id}":{"delete":{"security":[{"BearerAuth":[]}],"produces":["application/json"],"tags":["Orgs"],"summary":"Remove a member (owner/admin)","operationId":"removeMember","parameters":[{"type":"string","description":"Org ID (UUID)","name":"id","in":"path","required":true},{"type":"string","description":"User ID (UUID)","name":"user_id","in":"path","required":true}],"responses":{"204":{"description":"Removed"},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/utils.ErrorResponse"}}}}},"/servers":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns servers for the organization in X-Org-ID. Optional filters: status, role.","consumes":["application/json"],"produces":["application/json"],"tags":["Servers"],"summary":"List servers (org scoped)","operationId":"ListServers","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Filter by status (pending|provisioning|ready|failed)","name":"status","in":"query"},{"type":"string","description":"Filter by role","name":"role","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.ServerResponse"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"failed to list servers","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Creates a server bound to the org in X-Org-ID. Validates that ssh_key_id belongs to the org.","consumes":["application/json"],"produces":["application/json"],"tags":["Servers"],"summary":"Create server (org scoped)","operationId":"CreateServer","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"description":"Server payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateServerRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.ServerResponse"}},"400":{"description":"invalid json / missing fields / invalid status / invalid ssh_key_id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"create failed","schema":{"type":"string"}}}}},"/servers/{id}":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns one server in the given organization.","consumes":["application/json"],"produces":["application/json"],"tags":["Servers"],"summary":"Get server by ID (org scoped)","operationId":"GetServer","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Server ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.ServerResponse"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Permanently deletes the server.","consumes":["application/json"],"produces":["application/json"],"tags":["Servers"],"summary":"Delete server (org scoped)","operationId":"DeleteServer","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Server ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"delete failed","schema":{"type":"string"}}}},"patch":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Partially update fields; changing ssh_key_id validates ownership.","consumes":["application/json"],"produces":["application/json"],"tags":["Servers"],"summary":"Update server (org scoped)","operationId":"UpdateServer","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Server ID (UUID)","name":"id","in":"path","required":true},{"description":"Fields to update","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.UpdateServerRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.ServerResponse"}},"400":{"description":"invalid id / invalid json / invalid status / invalid ssh_key_id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"update failed","schema":{"type":"string"}}}}},"/ssh":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns ssh keys for the organization in X-Org-ID.","consumes":["application/json"],"produces":["application/json"],"tags":["Ssh"],"summary":"List ssh keys (org scoped)","operationId":"ListPublicSshKeys","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.SshResponse"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"failed to list keys","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Generates an RSA or ED25519 keypair, saves it, and returns metadata. For RSA you may set bits (2048/3072/4096). Default is 4096. ED25519 ignores bits.","consumes":["application/json"],"produces":["application/json"],"tags":["Ssh"],"summary":"Create ssh keypair (org scoped)","operationId":"CreateSSHKey","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"description":"Key generation options","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateSSHRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.SshResponse"}},"400":{"description":"invalid json / invalid bits","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"generation/create failed","schema":{"type":"string"}}}}},"/ssh/{id}":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns public key fields. Append `?reveal=true` to include the private key PEM.","consumes":["application/json"],"produces":["application/json"],"tags":["Ssh"],"summary":"Get ssh key by ID (org scoped)","operationId":"GetSSHKey","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"SSH Key ID (UUID)","name":"id","in":"path","required":true},{"type":"boolean","description":"Reveal private key PEM","name":"reveal","in":"query"}],"responses":{"200":{"description":"When reveal=true","schema":{"$ref":"#/definitions/dto.SshRevealResponse"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Permanently deletes a keypair.","consumes":["application/json"],"produces":["application/json"],"tags":["Ssh"],"summary":"Delete ssh keypair (org scoped)","operationId":"DeleteSSHKey","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"SSH Key ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"delete failed","schema":{"type":"string"}}}}},"/ssh/{id}/download":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Download `part=public|private|both` of the keypair. `both` returns a zip file.","produces":["application/json"],"tags":["Ssh"],"summary":"Download ssh key files by ID (org scoped)","operationId":"DownloadSSHKey","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header","required":true},{"type":"string","description":"SSH Key ID (UUID)","name":"id","in":"path","required":true},{"enum":["public","private","both"],"type":"string","description":"Which part to download","name":"part","in":"query","required":true}],"responses":{"200":{"description":"file content","schema":{"type":"string"}},"400":{"description":"invalid id / invalid part","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"download failed","schema":{"type":"string"}}}}},"/taints":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Returns node taints for the organization in X-Org-ID. Filters: `key`, `value`, and `q` (key contains). Add `include=node_pools` to include linked node pools.","consumes":["application/json"],"produces":["application/json"],"tags":["Taints"],"summary":"List node pool taints (org scoped)","operationId":"ListTaints","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Exact key","name":"key","in":"query"},{"type":"string","description":"Exact value","name":"value","in":"query"},{"type":"string","description":"key contains (case-insensitive)","name":"q","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/dto.TaintResponse"}}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"failed to list node taints","schema":{"type":"string"}}}},"post":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Creates a taint.","consumes":["application/json"],"produces":["application/json"],"tags":["Taints"],"summary":"Create node taint (org scoped)","operationId":"CreateTaint","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"description":"Taint payload","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.CreateTaintRequest"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/dto.TaintResponse"}},"400":{"description":"invalid json / missing fields / invalid node_pool_ids","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"create failed","schema":{"type":"string"}}}}},"/taints/{id}":{"get":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"consumes":["application/json"],"produces":["application/json"],"tags":["Taints"],"summary":"Get node taint by ID (org scoped)","operationId":"GetTaint","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Taint ID (UUID)","name":"id","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.TaintResponse"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"fetch failed","schema":{"type":"string"}}}},"delete":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Permanently deletes the taint.","consumes":["application/json"],"produces":["application/json"],"tags":["Taints"],"summary":"Delete taint (org scoped)","operationId":"DeleteTaint","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Taint ID (UUID)","name":"id","in":"path","required":true}],"responses":{"204":{"description":"No Content","schema":{"type":"string"}},"400":{"description":"invalid id","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"500":{"description":"delete failed","schema":{"type":"string"}}}},"patch":{"security":[{"BearerAuth":[]},{"OrgKeyAuth":[]},{"OrgSecretAuth":[]}],"description":"Partially update taint fields.","consumes":["application/json"],"produces":["application/json"],"tags":["Taints"],"summary":"Update node taint (org scoped)","operationId":"UpdateTaint","parameters":[{"type":"string","description":"Organization UUID","name":"X-Org-ID","in":"header"},{"type":"string","description":"Node Taint ID (UUID)","name":"id","in":"path","required":true},{"description":"Fields to update","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/dto.UpdateTaintRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/dto.TaintResponse"}},"400":{"description":"invalid id / invalid json","schema":{"type":"string"}},"401":{"description":"Unauthorized","schema":{"type":"string"}},"403":{"description":"organization required","schema":{"type":"string"}},"404":{"description":"not found","schema":{"type":"string"}},"500":{"description":"update failed","schema":{"type":"string"}}}}},"/version":{"get":{"description":"Returns build/runtime metadata for the running service.","consumes":["application/json"],"produces":["application/json"],"tags":["Meta"],"summary":"Service version information","operationId":"Version // operationId","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/handlers.VersionResponse"}}}}}},"definitions":{"dto.AnnotationResponse":{"type":"object","properties":{"created_at":{"type":"string"},"id":{"type":"string"},"key":{"type":"string"},"organization_id":{"type":"string"},"updated_at":{"type":"string"},"value":{"type":"string"}}},"dto.AttachAnnotationsRequest":{"type":"object","properties":{"annotation_ids":{"type":"array","items":{"type":"string"}}}},"dto.AttachLabelsRequest":{"type":"object","properties":{"label_ids":{"type":"array","items":{"type":"string"}}}},"dto.AttachServersRequest":{"type":"object","properties":{"server_ids":{"type":"array","items":{"type":"string"}}}},"dto.AttachTaintsRequest":{"type":"object","properties":{"taint_ids":{"type":"array","items":{"type":"string"}}}},"dto.AuthStartResponse":{"type":"object","properties":{"auth_url":{"type":"string","example":"https://accounts.google.com/o/oauth2/v2/auth?client_id=..."}}},"dto.ClusterResponse":{"type":"object","properties":{"bastion_server":{"$ref":"#/definitions/dto.ServerResponse"},"captain_domain":{"type":"string"},"certificate_key":{"type":"string"},"cluster_load_balancer":{"type":"string"},"control_load_balancer":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"node_pools":{"type":"array","items":{"$ref":"#/definitions/dto.NodePoolResponse"}},"provider":{"type":"string"},"random_token":{"type":"string"},"region":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"}}},"dto.CreateAnnotationRequest":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"dto.CreateClusterRequest":{"type":"object","properties":{"captain_domain":{"type":"string"},"cluster_load_balancer":{"type":"string"},"control_load_balancer":{"type":"string"},"name":{"type":"string"},"provider":{"type":"string"},"region":{"type":"string"},"status":{"type":"string"}}},"dto.CreateCredentialRequest":{"type":"object","required":["kind","provider","schema_version","scope","scope_kind","scope_version","secret"],"properties":{"account_id":{"type":"string","maxLength":32},"kind":{"description":"aws_access_key, api_token, basic_auth, oauth2","type":"string"},"name":{"description":"human label","type":"string","maxLength":100},"provider":{"type":"string","enum":["aws","cloudflare","hetzner","digitalocean","generic"]},"region":{"type":"string","maxLength":32},"schema_version":{"description":"secret schema version","type":"integer","minimum":1},"scope":{"description":"{\"service\":\"route53\"} or {\"arn\":\"...\"}","type":"object"},"scope_kind":{"type":"string","enum":["provider","service","resource"]},"scope_version":{"description":"scope schema version","type":"integer","minimum":1},"secret":{"description":"encrypted later","type":"object"}}},"dto.CreateLabelRequest":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"dto.CreateNodePoolRequest":{"type":"object","properties":{"name":{"type":"string"},"role":{"type":"string","enum":["master","worker"]}}},"dto.CreateSSHRequest":{"type":"object","properties":{"bits":{"description":"Only for RSA","type":"integer"},"comment":{"type":"string","example":"deploy@autoglue"},"name":{"type":"string"},"type":{"description":"\"rsa\" (default) or \"ed25519\"","type":"string"}}},"dto.CreateServerRequest":{"type":"object","properties":{"hostname":{"type":"string"},"private_ip_address":{"type":"string"},"public_ip_address":{"type":"string"},"role":{"type":"string","enum":["master","worker","bastion"],"example":"master|worker|bastion"},"ssh_key_id":{"type":"string"},"ssh_user":{"type":"string"},"status":{"type":"string","enum":["pending","provisioning","ready","failed"],"example":"pending|provisioning|ready|failed"}}},"dto.CreateTaintRequest":{"type":"object","properties":{"effect":{"type":"string"},"key":{"type":"string"},"value":{"type":"string"}}},"dto.CredentialOut":{"type":"object","properties":{"account_id":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"kind":{"type":"string"},"name":{"type":"string"},"provider":{"type":"string"},"region":{"type":"string"},"schema_version":{"type":"integer"},"scope":{"type":"object"},"scope_kind":{"type":"string"},"scope_version":{"type":"integer"},"updated_at":{"type":"string"}}},"dto.EnqueueRequest":{"type":"object","properties":{"payload":{"type":"object"},"queue":{"type":"string","example":"default"},"run_at":{"type":"string","example":"2025-11-05T08:00:00Z"},"type":{"type":"string","example":"email.send"}}},"dto.JWK":{"type":"object","properties":{"alg":{"type":"string","example":"RS256"},"e":{"type":"string","example":"AQAB"},"kid":{"type":"string","example":"7c6f1d0a-7a98-4e6a-9dbf-6b1af4b9f345"},"kty":{"type":"string","example":"RSA"},"n":{"type":"string"},"use":{"type":"string","example":"sig"},"x":{"type":"string"}}},"dto.JWKS":{"type":"object","properties":{"keys":{"type":"array","items":{"$ref":"#/definitions/dto.JWK"}}}},"dto.Job":{"type":"object","properties":{"attempts":{"type":"integer","example":0},"created_at":{"type":"string","example":"2025-11-04T09:30:00Z"},"id":{"type":"string","example":"01HF7SZK8Z8WG1M3J7S2Z8M2N6"},"last_error":{"type":"string","example":"error message"},"max_attempts":{"type":"integer","example":3},"payload":{},"queue":{"type":"string","example":"default"},"run_at":{"type":"string","example":"2025-11-04T09:30:00Z"},"status":{"enum":["queued|running|succeeded|failed|canceled|retrying|scheduled"],"allOf":[{"$ref":"#/definitions/dto.JobStatus"}],"example":"queued"},"type":{"type":"string","example":"email.send"},"updated_at":{"type":"string","example":"2025-11-04T09:30:00Z"}}},"dto.JobStatus":{"type":"string","enum":["queued","running","succeeded","failed","canceled","retrying","scheduled"],"x-enum-varnames":["StatusQueued","StatusRunning","StatusSucceeded","StatusFailed","StatusCanceled","StatusRetrying","StatusScheduled"]},"dto.LabelResponse":{"type":"object","properties":{"created_at":{"type":"string"},"id":{"type":"string"},"key":{"type":"string"},"organization_id":{"type":"string"},"updated_at":{"type":"string"},"value":{"type":"string"}}},"dto.LogoutRequest":{"type":"object","properties":{"refresh_token":{"type":"string","example":"m0l9o8rT3t0V8d3eFf..."}}},"dto.NodePoolResponse":{"type":"object","properties":{"annotations":{"type":"array","items":{"$ref":"#/definitions/dto.AnnotationResponse"}},"created_at":{"type":"string"},"id":{"type":"string"},"labels":{"type":"array","items":{"$ref":"#/definitions/dto.LabelResponse"}},"name":{"type":"string"},"organization_id":{"type":"string"},"role":{"type":"string","enum":["master","worker"]},"servers":{"type":"array","items":{"$ref":"#/definitions/dto.ServerResponse"}},"taints":{"type":"array","items":{"$ref":"#/definitions/dto.TaintResponse"}},"updated_at":{"type":"string"}}},"dto.PageJob":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/definitions/dto.Job"}},"page":{"type":"integer","example":1},"page_size":{"type":"integer","example":25},"total":{"type":"integer","example":120}}},"dto.QueueInfo":{"type":"object","properties":{"failed":{"type":"integer","example":5},"name":{"type":"string","example":"default"},"pending":{"type":"integer","example":42},"running":{"type":"integer","example":3},"scheduled":{"type":"integer","example":7}}},"dto.RefreshRequest":{"type":"object","properties":{"refresh_token":{"type":"string","example":"m0l9o8rT3t0V8d3eFf..."}}},"dto.ServerResponse":{"type":"object","properties":{"created_at":{"type":"string"},"hostname":{"type":"string"},"id":{"type":"string"},"organization_id":{"type":"string"},"private_ip_address":{"type":"string"},"public_ip_address":{"type":"string"},"role":{"type":"string","enum":["master","worker","bastion"],"example":"master|worker|bastion"},"ssh_key_id":{"type":"string"},"ssh_user":{"type":"string"},"status":{"type":"string","enum":["pending","provisioning","ready","failed"],"example":"pending|provisioning|ready|failed"},"updated_at":{"type":"string"}}},"dto.SshResponse":{"type":"object","properties":{"created_at":{"type":"string"},"fingerprint":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"organization_id":{"type":"string"},"public_key":{"type":"string"},"updated_at":{"type":"string"}}},"dto.SshRevealResponse":{"type":"object","properties":{"created_at":{"type":"string"},"fingerprint":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"organization_id":{"type":"string"},"private_key":{"type":"string"},"public_key":{"type":"string"},"updated_at":{"type":"string"}}},"dto.TaintResponse":{"type":"object","properties":{"created_at":{"type":"string"},"effect":{"type":"string"},"id":{"type":"string"},"key":{"type":"string"},"organization_id":{"type":"string"},"updated_at":{"type":"string"},"value":{"type":"string"}}},"dto.TokenPair":{"type":"object","properties":{"access_token":{"type":"string","example":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ij..."},"expires_in":{"type":"integer","example":3600},"refresh_token":{"type":"string","example":"m0l9o8rT3t0V8d3eFf...."},"token_type":{"type":"string","example":"Bearer"}}},"dto.UpdateAnnotationRequest":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"dto.UpdateCredentialRequest":{"type":"object","properties":{"account_id":{"type":"string"},"name":{"type":"string"},"region":{"type":"string"},"scope":{"type":"object"},"scope_kind":{"type":"string"},"scope_version":{"type":"integer"},"secret":{"description":"set if rotating","type":"object"}}},"dto.UpdateLabelRequest":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"dto.UpdateNodePoolRequest":{"type":"object","properties":{"name":{"type":"string"},"role":{"type":"string","enum":["master","worker"]}}},"dto.UpdateServerRequest":{"type":"object","properties":{"hostname":{"type":"string"},"private_ip_address":{"type":"string"},"public_ip_address":{"type":"string"},"role":{"type":"string","enum":["master","worker","bastion"],"example":"master|worker|bastion"},"ssh_key_id":{"type":"string"},"ssh_user":{"type":"string"},"status":{"type":"string","enum":["pending","provisioning","ready","failed"],"example":"pending|provisioning|ready|failed"}}},"dto.UpdateTaintRequest":{"type":"object","properties":{"effect":{"type":"string"},"key":{"type":"string"},"value":{"type":"string"}}},"handlers.HealthStatus":{"type":"object","properties":{"status":{"type":"string","example":"ok"}}},"handlers.VersionResponse":{"type":"object","properties":{"built":{"type":"string","example":"2025-11-08T12:34:56Z"},"builtBy":{"type":"string","example":"ci"},"commit":{"type":"string","example":"a1b2c3d"},"commitTime":{"type":"string","example":"2025-11-08T12:31:00Z"},"go":{"type":"string","example":"go1.23.3"},"goArch":{"type":"string","example":"amd64"},"goOS":{"type":"string","example":"linux"},"modified":{"type":"boolean","example":false},"revision":{"type":"string","example":"a1b2c3d4e5f6abcdef"},"vcs":{"type":"string","example":"git"},"version":{"type":"string","example":"1.4.2"}}},"handlers.createUserKeyRequest":{"type":"object","properties":{"expires_in_hours":{"description":"optional TTL","type":"integer"},"name":{"type":"string"}}},"handlers.meResponse":{"type":"object","properties":{"avatar_url":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"display_name":{"type":"string"},"emails":{"type":"array","items":{"$ref":"#/definitions/models.UserEmail"}},"id":{"description":"example: 3fa85f64-5717-4562-b3fc-2c963f66afa6","type":"string","format":"uuid"},"is_admin":{"type":"boolean"},"is_disabled":{"type":"boolean"},"organizations":{"type":"array","items":{"$ref":"#/definitions/models.Organization"}},"primary_email":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}}},"handlers.memberOut":{"type":"object","properties":{"email":{"type":"string"},"role":{"description":"owner/admin/member","type":"string"},"user_id":{"type":"string","format":"uuid"}}},"handlers.memberUpsertReq":{"type":"object","properties":{"role":{"type":"string","example":"member"},"user_id":{"type":"string","format":"uuid"}}},"handlers.orgCreateReq":{"type":"object","properties":{"domain":{"type":"string","example":"acme.com"},"name":{"type":"string","example":"Acme Corp"}}},"handlers.orgKeyCreateReq":{"type":"object","properties":{"expires_in_hours":{"type":"integer","example":720},"name":{"type":"string","example":"automation-bot"}}},"handlers.orgKeyCreateResp":{"type":"object","properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"org_key":{"description":"shown once:","type":"string"},"org_secret":{"description":"shown once:","type":"string"},"scope":{"description":"\"org\"","type":"string"}}},"handlers.orgUpdateReq":{"type":"object","properties":{"domain":{"type":"string"},"name":{"type":"string"}}},"handlers.updateMeRequest":{"type":"object","properties":{"display_name":{"type":"string"}}},"handlers.userAPIKeyOut":{"type":"object","properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"last_used_at":{"type":"string"},"name":{"type":"string"},"plain":{"description":"Shown only on create:","type":"string"},"scope":{"description":"\"user\"","type":"string"}}},"models.APIKey":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"expires_at":{"type":"string","format":"date-time"},"id":{"type":"string","format":"uuid"},"last_used_at":{"type":"string","format":"date-time"},"name":{"type":"string"},"org_id":{"type":"string","format":"uuid"},"prefix":{"type":"string"},"revoked":{"type":"boolean"},"scope":{"type":"string"},"updated_at":{"type":"string","format":"date-time"},"user_id":{"type":"string","format":"uuid"}}},"models.Organization":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"domain":{"type":"string"},"id":{"description":"example: 3fa85f64-5717-4562-b3fc-2c963f66afa6","type":"string","format":"uuid"},"name":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}}},"models.User":{"type":"object","properties":{"avatar_url":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"display_name":{"type":"string"},"id":{"description":"example: 3fa85f64-5717-4562-b3fc-2c963f66afa6","type":"string","format":"uuid"},"is_admin":{"type":"boolean"},"is_disabled":{"type":"boolean"},"primary_email":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}}},"models.UserEmail":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"email":{"type":"string"},"id":{"description":"example: 3fa85f64-5717-4562-b3fc-2c963f66afa6","type":"string","format":"uuid"},"is_primary":{"type":"boolean"},"is_verified":{"type":"boolean"},"updated_at":{"type":"string","format":"date-time"},"user":{"$ref":"#/definitions/models.User"},"user_id":{"type":"string","format":"uuid"}}},"utils.ErrorResponse":{"type":"object","properties":{"code":{"description":"A machine-readable error code, e.g. \"validation_error\"\nexample: validation_error","type":"string"},"message":{"description":"Human-readable message\nexample: slug is required","type":"string"}}}},"securityDefinitions":{"ApiKeyAuth":{"description":"User API key","type":"apiKey","name":"X-API-KEY","in":"header"},"BearerAuth":{"description":"Bearer token authentication","type":"apiKey","name":"Authorization","in":"header"},"OrgKeyAuth":{"description":"Org-level key/secret authentication","type":"apiKey","name":"X-ORG-KEY","in":"header"},"OrgSecretAuth":{"description":"Org-level secret","type":"apiKey","name":"X-ORG-SECRET","in":"header"}}} \ No newline at end of file diff --git a/docs/swagger.yaml b/docs/swagger.yaml deleted file mode 100644 index be4d086..0000000 --- a/docs/swagger.yaml +++ /dev/null @@ -1,4158 +0,0 @@ -basePath: /api/v1 -definitions: - dto.AnnotationResponse: - properties: - created_at: - type: string - id: - type: string - key: - type: string - organization_id: - type: string - updated_at: - type: string - value: - type: string - type: object - dto.AttachAnnotationsRequest: - properties: - annotation_ids: - items: - type: string - type: array - type: object - dto.AttachLabelsRequest: - properties: - label_ids: - items: - type: string - type: array - type: object - dto.AttachServersRequest: - properties: - server_ids: - items: - type: string - type: array - type: object - dto.AttachTaintsRequest: - properties: - taint_ids: - items: - type: string - type: array - type: object - dto.AuthStartResponse: - properties: - auth_url: - example: https://accounts.google.com/o/oauth2/v2/auth?client_id=... - type: string - type: object - dto.ClusterResponse: - properties: - bastion_server: - $ref: '#/definitions/dto.ServerResponse' - captain_domain: - type: string - certificate_key: - type: string - cluster_load_balancer: - type: string - control_load_balancer: - type: string - created_at: - type: string - id: - type: string - name: - type: string - node_pools: - items: - $ref: '#/definitions/dto.NodePoolResponse' - type: array - provider: - type: string - random_token: - type: string - region: - type: string - status: - type: string - updated_at: - type: string - type: object - dto.CreateAnnotationRequest: - properties: - key: - type: string - value: - type: string - type: object - dto.CreateClusterRequest: - properties: - captain_domain: - type: string - cluster_load_balancer: - type: string - control_load_balancer: - type: string - name: - type: string - provider: - type: string - region: - type: string - status: - type: string - type: object - dto.CreateCredentialRequest: - properties: - account_id: - maxLength: 32 - type: string - kind: - description: aws_access_key, api_token, basic_auth, oauth2 - type: string - name: - description: human label - maxLength: 100 - type: string - provider: - enum: - - aws - - cloudflare - - hetzner - - digitalocean - - generic - type: string - region: - maxLength: 32 - type: string - schema_version: - description: secret schema version - minimum: 1 - type: integer - scope: - description: '{"service":"route53"} or {"arn":"..."}' - type: object - scope_kind: - enum: - - provider - - service - - resource - type: string - scope_version: - description: scope schema version - minimum: 1 - type: integer - secret: - description: encrypted later - type: object - required: - - kind - - provider - - schema_version - - scope - - scope_kind - - scope_version - - secret - type: object - dto.CreateLabelRequest: - properties: - key: - type: string - value: - type: string - type: object - dto.CreateNodePoolRequest: - properties: - name: - type: string - role: - enum: - - master - - worker - type: string - type: object - dto.CreateSSHRequest: - properties: - bits: - description: Only for RSA - type: integer - comment: - example: deploy@autoglue - type: string - name: - type: string - type: - description: '"rsa" (default) or "ed25519"' - type: string - type: object - dto.CreateServerRequest: - properties: - hostname: - type: string - private_ip_address: - type: string - public_ip_address: - type: string - role: - enum: - - master - - worker - - bastion - example: master|worker|bastion - type: string - ssh_key_id: - type: string - ssh_user: - type: string - status: - enum: - - pending - - provisioning - - ready - - failed - example: pending|provisioning|ready|failed - type: string - type: object - dto.CreateTaintRequest: - properties: - effect: - type: string - key: - type: string - value: - type: string - type: object - dto.CredentialOut: - properties: - account_id: - type: string - created_at: - type: string - id: - type: string - kind: - type: string - name: - type: string - provider: - type: string - region: - type: string - schema_version: - type: integer - scope: - type: object - scope_kind: - type: string - scope_version: - type: integer - updated_at: - type: string - type: object - dto.EnqueueRequest: - properties: - payload: - type: object - queue: - example: default - type: string - run_at: - example: "2025-11-05T08:00:00Z" - type: string - type: - example: email.send - type: string - type: object - dto.JWK: - properties: - alg: - example: RS256 - type: string - e: - example: AQAB - type: string - kid: - example: 7c6f1d0a-7a98-4e6a-9dbf-6b1af4b9f345 - type: string - kty: - example: RSA - type: string - "n": - type: string - use: - example: sig - type: string - x: - type: string - type: object - dto.JWKS: - properties: - keys: - items: - $ref: '#/definitions/dto.JWK' - type: array - type: object - dto.Job: - properties: - attempts: - example: 0 - type: integer - created_at: - example: "2025-11-04T09:30:00Z" - type: string - id: - example: 01HF7SZK8Z8WG1M3J7S2Z8M2N6 - type: string - last_error: - example: error message - type: string - max_attempts: - example: 3 - type: integer - payload: {} - queue: - example: default - type: string - run_at: - example: "2025-11-04T09:30:00Z" - type: string - status: - allOf: - - $ref: '#/definitions/dto.JobStatus' - enum: - - queued|running|succeeded|failed|canceled|retrying|scheduled - example: queued - type: - example: email.send - type: string - updated_at: - example: "2025-11-04T09:30:00Z" - type: string - type: object - dto.JobStatus: - enum: - - queued - - running - - succeeded - - failed - - canceled - - retrying - - scheduled - type: string - x-enum-varnames: - - StatusQueued - - StatusRunning - - StatusSucceeded - - StatusFailed - - StatusCanceled - - StatusRetrying - - StatusScheduled - dto.LabelResponse: - properties: - created_at: - type: string - id: - type: string - key: - type: string - organization_id: - type: string - updated_at: - type: string - value: - type: string - type: object - dto.LogoutRequest: - properties: - refresh_token: - example: m0l9o8rT3t0V8d3eFf... - type: string - type: object - dto.NodePoolResponse: - properties: - annotations: - items: - $ref: '#/definitions/dto.AnnotationResponse' - type: array - created_at: - type: string - id: - type: string - labels: - items: - $ref: '#/definitions/dto.LabelResponse' - type: array - name: - type: string - organization_id: - type: string - role: - enum: - - master - - worker - type: string - servers: - items: - $ref: '#/definitions/dto.ServerResponse' - type: array - taints: - items: - $ref: '#/definitions/dto.TaintResponse' - type: array - updated_at: - type: string - type: object - dto.PageJob: - properties: - items: - items: - $ref: '#/definitions/dto.Job' - type: array - page: - example: 1 - type: integer - page_size: - example: 25 - type: integer - total: - example: 120 - type: integer - type: object - dto.QueueInfo: - properties: - failed: - example: 5 - type: integer - name: - example: default - type: string - pending: - example: 42 - type: integer - running: - example: 3 - type: integer - scheduled: - example: 7 - type: integer - type: object - dto.RefreshRequest: - properties: - refresh_token: - example: m0l9o8rT3t0V8d3eFf... - type: string - type: object - dto.ServerResponse: - properties: - created_at: - type: string - hostname: - type: string - id: - type: string - organization_id: - type: string - private_ip_address: - type: string - public_ip_address: - type: string - role: - enum: - - master - - worker - - bastion - example: master|worker|bastion - type: string - ssh_key_id: - type: string - ssh_user: - type: string - status: - enum: - - pending - - provisioning - - ready - - failed - example: pending|provisioning|ready|failed - type: string - updated_at: - type: string - type: object - dto.SshResponse: - properties: - created_at: - type: string - fingerprint: - type: string - id: - type: string - name: - type: string - organization_id: - type: string - public_key: - type: string - updated_at: - type: string - type: object - dto.SshRevealResponse: - properties: - created_at: - type: string - fingerprint: - type: string - id: - type: string - name: - type: string - organization_id: - type: string - private_key: - type: string - public_key: - type: string - updated_at: - type: string - type: object - dto.TaintResponse: - properties: - created_at: - type: string - effect: - type: string - id: - type: string - key: - type: string - organization_id: - type: string - updated_at: - type: string - value: - type: string - type: object - dto.TokenPair: - properties: - access_token: - example: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ij... - type: string - expires_in: - example: 3600 - type: integer - refresh_token: - example: m0l9o8rT3t0V8d3eFf.... - type: string - token_type: - example: Bearer - type: string - type: object - dto.UpdateAnnotationRequest: - properties: - key: - type: string - value: - type: string - type: object - dto.UpdateCredentialRequest: - properties: - account_id: - type: string - name: - type: string - region: - type: string - scope: - type: object - scope_kind: - type: string - scope_version: - type: integer - secret: - description: set if rotating - type: object - type: object - dto.UpdateLabelRequest: - properties: - key: - type: string - value: - type: string - type: object - dto.UpdateNodePoolRequest: - properties: - name: - type: string - role: - enum: - - master - - worker - type: string - type: object - dto.UpdateServerRequest: - properties: - hostname: - type: string - private_ip_address: - type: string - public_ip_address: - type: string - role: - enum: - - master - - worker - - bastion - example: master|worker|bastion - type: string - ssh_key_id: - type: string - ssh_user: - type: string - status: - enum: - - pending - - provisioning - - ready - - failed - example: pending|provisioning|ready|failed - type: string - type: object - dto.UpdateTaintRequest: - properties: - effect: - type: string - key: - type: string - value: - type: string - type: object - handlers.HealthStatus: - properties: - status: - example: ok - type: string - type: object - handlers.VersionResponse: - properties: - built: - example: "2025-11-08T12:34:56Z" - type: string - builtBy: - example: ci - type: string - commit: - example: a1b2c3d - type: string - commitTime: - example: "2025-11-08T12:31:00Z" - type: string - go: - example: go1.23.3 - type: string - goArch: - example: amd64 - type: string - goOS: - example: linux - type: string - modified: - example: false - type: boolean - revision: - example: a1b2c3d4e5f6abcdef - type: string - vcs: - example: git - type: string - version: - example: 1.4.2 - type: string - type: object - handlers.createUserKeyRequest: - properties: - expires_in_hours: - description: optional TTL - type: integer - name: - type: string - type: object - handlers.meResponse: - properties: - avatar_url: - type: string - created_at: - format: date-time - type: string - display_name: - type: string - emails: - items: - $ref: '#/definitions/models.UserEmail' - type: array - id: - description: 'example: 3fa85f64-5717-4562-b3fc-2c963f66afa6' - format: uuid - type: string - is_admin: - type: boolean - is_disabled: - type: boolean - organizations: - items: - $ref: '#/definitions/models.Organization' - type: array - primary_email: - type: string - updated_at: - format: date-time - type: string - type: object - handlers.memberOut: - properties: - email: - type: string - role: - description: owner/admin/member - type: string - user_id: - format: uuid - type: string - type: object - handlers.memberUpsertReq: - properties: - role: - example: member - type: string - user_id: - format: uuid - type: string - type: object - handlers.orgCreateReq: - properties: - domain: - example: acme.com - type: string - name: - example: Acme Corp - type: string - type: object - handlers.orgKeyCreateReq: - properties: - expires_in_hours: - example: 720 - type: integer - name: - example: automation-bot - type: string - type: object - handlers.orgKeyCreateResp: - properties: - created_at: - type: string - expires_at: - type: string - id: - type: string - name: - type: string - org_key: - description: 'shown once:' - type: string - org_secret: - description: 'shown once:' - type: string - scope: - description: '"org"' - type: string - type: object - handlers.orgUpdateReq: - properties: - domain: - type: string - name: - type: string - type: object - handlers.updateMeRequest: - properties: - display_name: - type: string - type: object - handlers.userAPIKeyOut: - properties: - created_at: - type: string - expires_at: - type: string - id: - format: uuid - type: string - last_used_at: - type: string - name: - type: string - plain: - description: 'Shown only on create:' - type: string - scope: - description: '"user"' - type: string - type: object - models.APIKey: - properties: - created_at: - format: date-time - type: string - expires_at: - format: date-time - type: string - id: - format: uuid - type: string - last_used_at: - format: date-time - type: string - name: - type: string - org_id: - format: uuid - type: string - prefix: - type: string - revoked: - type: boolean - scope: - type: string - updated_at: - format: date-time - type: string - user_id: - format: uuid - type: string - type: object - models.Organization: - properties: - created_at: - format: date-time - type: string - domain: - type: string - id: - description: 'example: 3fa85f64-5717-4562-b3fc-2c963f66afa6' - format: uuid - type: string - name: - type: string - updated_at: - format: date-time - type: string - type: object - models.User: - properties: - avatar_url: - type: string - created_at: - format: date-time - type: string - display_name: - type: string - id: - description: 'example: 3fa85f64-5717-4562-b3fc-2c963f66afa6' - format: uuid - type: string - is_admin: - type: boolean - is_disabled: - type: boolean - primary_email: - type: string - updated_at: - format: date-time - type: string - type: object - models.UserEmail: - properties: - created_at: - format: date-time - type: string - email: - type: string - id: - description: 'example: 3fa85f64-5717-4562-b3fc-2c963f66afa6' - format: uuid - type: string - is_primary: - type: boolean - is_verified: - type: boolean - updated_at: - format: date-time - type: string - user: - $ref: '#/definitions/models.User' - user_id: - format: uuid - type: string - type: object - utils.ErrorResponse: - properties: - code: - description: |- - A machine-readable error code, e.g. "validation_error" - example: validation_error - type: string - message: - description: |- - Human-readable message - example: slug is required - type: string - type: object -info: - contact: - name: GlueOps - description: API for managing K3s clusters across cloud providers - title: AutoGlue API - version: "1.0" -paths: - /.well-known/jwks.json: - get: - description: Returns the JSON Web Key Set for token verification - operationId: getJWKS - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.JWKS' - summary: Get JWKS - tags: - - Auth - /admin/archer/jobs: - get: - consumes: - - application/json - description: Paginated background jobs with optional filters. Search `q` may - match id, type, error, payload (implementation-dependent). - operationId: AdminListArcherJobs - parameters: - - description: Filter by status - enum: - - queued - - running - - succeeded - - failed - - canceled - - retrying - - scheduled - in: query - name: status - type: string - - description: Filter by queue name / worker name - in: query - name: queue - type: string - - description: Free-text search - in: query - name: q - type: string - - default: 1 - description: Page number - in: query - name: page - type: integer - - default: 25 - description: Items per page - in: query - maximum: 100 - minimum: 1 - name: page_size - type: integer - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.PageJob' - "401": - description: Unauthorized - schema: - type: string - "403": - description: forbidden - schema: - type: string - "500": - description: internal error - schema: - type: string - security: - - BearerAuth: [] - summary: List Archer jobs (admin) - tags: - - ArcherAdmin - post: - consumes: - - application/json - description: Create a job immediately or schedule it for the future via `run_at`. - operationId: AdminEnqueueArcherJob - parameters: - - description: Job parameters - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.EnqueueRequest' - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.Job' - "400": - description: invalid json or missing fields - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: forbidden - schema: - type: string - "500": - description: internal error - schema: - type: string - security: - - BearerAuth: [] - summary: Enqueue a new Archer job (admin) - tags: - - ArcherAdmin - /admin/archer/jobs/{id}/cancel: - post: - consumes: - - application/json - description: Set job status to canceled if cancellable. For running jobs, this - only affects future picks; wire to Archer if you need active kill. - operationId: AdminCancelArcherJob - parameters: - - description: Job ID - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.Job' - "400": - description: invalid job or not cancellable - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: forbidden - schema: - type: string - "404": - description: not found - schema: - type: string - security: - - BearerAuth: [] - summary: Cancel an Archer job (admin) - tags: - - ArcherAdmin - /admin/archer/jobs/{id}/retry: - post: - consumes: - - application/json - description: Marks the job retriable (DB flip). Swap this for an Archer admin - call if you expose one. - operationId: AdminRetryArcherJob - parameters: - - description: Job ID - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.Job' - "400": - description: invalid job or not eligible - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: forbidden - schema: - type: string - "404": - description: not found - schema: - type: string - security: - - BearerAuth: [] - summary: Retry a failed/canceled Archer job (admin) - tags: - - ArcherAdmin - /admin/archer/queues: - get: - consumes: - - application/json - description: Summary metrics per queue (pending, running, failed, scheduled). - operationId: AdminListArcherQueues - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/dto.QueueInfo' - type: array - "401": - description: Unauthorized - schema: - type: string - "403": - description: forbidden - schema: - type: string - "500": - description: internal error - schema: - type: string - security: - - BearerAuth: [] - summary: List Archer queues (admin) - tags: - - ArcherAdmin - /annotations: - get: - consumes: - - application/json - description: 'Returns annotations for the organization in X-Org-ID. Filters: - `key`, `value`, and `q` (key contains). Add `include=node_pools` to include - linked node pools.' - operationId: ListAnnotations - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Exact key - in: query - name: key - type: string - - description: Exact value - in: query - name: value - type: string - - description: key contains (case-insensitive) - in: query - name: q - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/dto.AnnotationResponse' - type: array - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: failed to list annotations - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: List annotations (org scoped) - tags: - - Annotations - post: - consumes: - - application/json - description: Creates an annotation. - operationId: CreateAnnotation - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Annotation payload - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.CreateAnnotationRequest' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/dto.AnnotationResponse' - "400": - description: invalid json / missing fields - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: create failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Create annotation (org scoped) - tags: - - Annotations - /annotations/{id}: - delete: - consumes: - - application/json - description: Permanently deletes the annotation. - operationId: DeleteAnnotation - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Annotation ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: delete failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Delete annotation (org scoped) - tags: - - Annotations - get: - consumes: - - application/json - description: Returns one annotation. Add `include=node_pools` to include node - pools. - operationId: GetAnnotation - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Annotation ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.AnnotationResponse' - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: fetch failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Get annotation by ID (org scoped) - tags: - - Annotations - patch: - consumes: - - application/json - description: Partially update annotation fields. - operationId: UpdateAnnotation - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Annotation ID (UUID) - in: path - name: id - required: true - type: string - - description: Fields to update - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.UpdateAnnotationRequest' - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.AnnotationResponse' - "400": - description: invalid id / invalid json - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: update failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Update annotation (org scoped) - tags: - - Annotations - /auth/{provider}/callback: - get: - operationId: AuthCallback - parameters: - - description: google|github - in: path - name: provider - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.TokenPair' - summary: Handle social login callback - tags: - - Auth - /auth/{provider}/start: - post: - description: Returns provider authorization URL for the frontend to redirect - operationId: AuthStart - parameters: - - description: google|github - in: path - name: provider - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.AuthStartResponse' - summary: Begin social login - tags: - - Auth - /auth/logout: - post: - consumes: - - application/json - operationId: Logout - parameters: - - description: Refresh token - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.LogoutRequest' - produces: - - application/json - responses: - "204": - description: No Content - summary: Revoke refresh token family (logout everywhere) - tags: - - Auth - /auth/refresh: - post: - consumes: - - application/json - operationId: Refresh - parameters: - - description: Refresh token - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.RefreshRequest' - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.TokenPair' - summary: Rotate refresh token - tags: - - Auth - /clusters: - get: - description: Returns clusters for the organization in X-Org-ID. Filter by `q` - (name contains). - operationId: ListClusters - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Name contains (case-insensitive) - in: query - name: q - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/dto.ClusterResponse' - type: array - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: failed to list clusters - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: List clusters (org scoped) - tags: - - Clusters - post: - consumes: - - application/json - description: Creates a cluster. If `kubeconfig` is provided, it will be encrypted - per-organization and stored securely (never returned). - operationId: CreateCluster - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: payload - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.CreateClusterRequest' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/dto.ClusterResponse' - "400": - description: invalid json - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: create failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Create cluster (org scoped) - tags: - - Clusters - /credentials: - get: - consumes: - - application/json - description: Returns credential metadata for the current org. Secrets are never - returned. - operationId: ListCredentials - parameters: - - description: Organization ID (UUID) - in: header - name: X-Org-ID - type: string - - description: Filter by provider (e.g., aws) - in: query - name: provider - type: string - - description: Filter by kind (e.g., aws_access_key) - in: query - name: kind - type: string - - description: Filter by scope kind (provider/service/resource) - in: query - name: scope_kind - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/dto.CredentialOut' - type: array - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: internal server error - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: List credentials (metadata only) - tags: - - Credentials - post: - consumes: - - application/json - operationId: CreateCredential - parameters: - - description: Organization ID (UUID) - in: header - name: X-Org-ID - type: string - - description: Credential payload - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.CreateCredentialRequest' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/dto.CredentialOut' - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: internal server error - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Create a credential (encrypts secret) - tags: - - Credentials - /credentials/{id}: - delete: - consumes: - - application/json - operationId: DeleteCredential - parameters: - - description: Organization ID (UUID) - in: header - name: X-Org-ID - type: string - - description: Credential ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - "404": - description: not found - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Delete credential - tags: - - Credentials - get: - consumes: - - application/json - operationId: GetCredential - parameters: - - description: Organization ID (UUID) - in: header - name: X-Org-ID - type: string - - description: Credential ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.CredentialOut' - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: internal server error - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Get credential by ID (metadata only) - tags: - - Credentials - patch: - consumes: - - application/json - operationId: UpdateCredential - parameters: - - description: Organization ID (UUID) - in: header - name: X-Org-ID - type: string - - description: Credential ID (UUID) - in: path - name: id - required: true - type: string - - description: Fields to update - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.UpdateCredentialRequest' - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.CredentialOut' - "403": - description: X-Org-ID required - schema: - type: string - "404": - description: not found - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Update credential metadata and/or rotate secret - tags: - - Credentials - /credentials/{id}/reveal: - post: - consumes: - - application/json - operationId: RevealCredential - parameters: - - description: Organization ID (UUID) - in: header - name: X-Org-ID - type: string - - description: Credential ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - additionalProperties: true - type: object - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Reveal decrypted secret (one-time read) - tags: - - Credentials - /healthz: - get: - consumes: - - application/json - description: Returns 200 OK when the service is up - operationId: HealthCheck // operationId - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/handlers.HealthStatus' - summary: Basic health check - tags: - - Health - /labels: - get: - consumes: - - application/json - description: 'Returns node labels for the organization in X-Org-ID. Filters: - `key`, `value`, and `q` (key contains). Add `include=node_pools` to include - linked node groups.' - operationId: ListLabels - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Exact key - in: query - name: key - type: string - - description: Exact value - in: query - name: value - type: string - - description: Key contains (case-insensitive) - in: query - name: q - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/dto.LabelResponse' - type: array - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: failed to list node taints - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: List node labels (org scoped) - tags: - - Labels - post: - consumes: - - application/json - description: Creates a label. - operationId: CreateLabel - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Label payload - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.CreateLabelRequest' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/dto.LabelResponse' - "400": - description: invalid json / missing fields / invalid node_pool_ids - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: create failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Create label (org scoped) - tags: - - Labels - /labels/{id}: - delete: - consumes: - - application/json - description: Permanently deletes the label. - operationId: DeleteLabel - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Label ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: delete failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Delete label (org scoped) - tags: - - Labels - get: - consumes: - - application/json - description: Returns one label. - operationId: GetLabel - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Label ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.LabelResponse' - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: fetch failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Get label by ID (org scoped) - tags: - - Labels - patch: - consumes: - - application/json - description: Partially update label fields. - operationId: UpdateLabel - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Label ID (UUID) - in: path - name: id - required: true - type: string - - description: Fields to update - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.UpdateLabelRequest' - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.LabelResponse' - "400": - description: invalid id / invalid json - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: update failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Update label (org scoped) - tags: - - Labels - /me: - get: - operationId: GetMe - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/handlers.meResponse' - security: - - BearerAuth: [] - - ApiKeyAuth: [] - summary: Get current user profile - tags: - - Me - patch: - consumes: - - application/json - operationId: UpdateMe - parameters: - - description: Patch profile - in: body - name: body - required: true - schema: - $ref: '#/definitions/handlers.updateMeRequest' - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/models.User' - security: - - BearerAuth: [] - - ApiKeyAuth: [] - summary: Update current user profile - tags: - - Me - /me/api-keys: - get: - operationId: ListUserAPIKeys - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/handlers.userAPIKeyOut' - type: array - security: - - BearerAuth: [] - - ApiKeyAuth: [] - summary: List my API keys - tags: - - MeAPIKeys - post: - consumes: - - application/json - description: Returns the plaintext key once. Store it securely on the client - side. - operationId: CreateUserAPIKey - parameters: - - description: Key options - in: body - name: body - required: true - schema: - $ref: '#/definitions/handlers.createUserKeyRequest' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/handlers.userAPIKeyOut' - security: - - BearerAuth: [] - - ApiKeyAuth: [] - summary: Create a new user API key - tags: - - MeAPIKeys - /me/api-keys/{id}: - delete: - operationId: DeleteUserAPIKey - parameters: - - description: Key ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - security: - - BearerAuth: [] - summary: Delete a user API key - tags: - - MeAPIKeys - /node-pools: - get: - consumes: - - application/json - description: Returns node pools for the organization in X-Org-ID. - operationId: ListNodePools - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Name contains (case-insensitive) - in: query - name: q - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/dto.NodePoolResponse' - type: array - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: failed to list node pools - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: List node pools (org scoped) - tags: - - NodePools - post: - consumes: - - application/json - description: Creates a node pool. Optionally attach initial servers. - operationId: CreateNodePool - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: NodePool payload - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.CreateNodePoolRequest' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/dto.NodePoolResponse' - "400": - description: invalid json / missing fields / invalid server_ids - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: create failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Create node pool (org scoped) - tags: - - NodePools - /node-pools/{id}: - delete: - consumes: - - application/json - description: Permanently deletes the node pool. - operationId: DeleteNodePool - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Pool ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: delete failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Delete node pool (org scoped) - tags: - - NodePools - get: - consumes: - - application/json - description: Returns one node pool. Add `include=servers` to include servers. - operationId: GetNodePool - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Pool ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.NodePoolResponse' - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: fetch failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Get node pool by ID (org scoped) - tags: - - NodePools - patch: - consumes: - - application/json - description: Partially update node pool fields. - operationId: UpdateNodePool - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Pool ID (UUID) - in: path - name: id - required: true - type: string - - description: Fields to update - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.UpdateNodePoolRequest' - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.NodePoolResponse' - "400": - description: invalid id / invalid json - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: update failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Update node pool (org scoped) - tags: - - NodePools - /node-pools/{id}/annotations: - get: - consumes: - - application/json - operationId: ListNodePoolAnnotations - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Pool ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/dto.AnnotationResponse' - type: array - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: fetch failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: List annotations attached to a node pool (org scoped) - tags: - - NodePools - post: - consumes: - - application/json - operationId: AttachNodePoolAnnotations - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Group ID (UUID) - in: path - name: id - required: true - type: string - - description: Annotation IDs to attach - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.AttachAnnotationsRequest' - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: invalid id / invalid server_ids - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: attach failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Attach annotation to a node pool (org scoped) - tags: - - NodePools - /node-pools/{id}/annotations/{annotationId}: - delete: - consumes: - - application/json - operationId: DetachNodePoolAnnotation - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Pool ID (UUID) - in: path - name: id - required: true - type: string - - description: Annotation ID (UUID) - in: path - name: annotationId - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: detach failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Detach one annotation from a node pool (org scoped) - tags: - - NodePools - /node-pools/{id}/labels: - get: - consumes: - - application/json - operationId: ListNodePoolLabels - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Label Pool ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/dto.LabelResponse' - type: array - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: fetch failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: List labels attached to a node pool (org scoped) - tags: - - NodePools - post: - consumes: - - application/json - operationId: AttachNodePoolLabels - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Pool ID (UUID) - in: path - name: id - required: true - type: string - - description: Label IDs to attach - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.AttachLabelsRequest' - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: invalid id / invalid server_ids - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: attach failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Attach labels to a node pool (org scoped) - tags: - - NodePools - /node-pools/{id}/labels/{labelId}: - delete: - consumes: - - application/json - operationId: DetachNodePoolLabel - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Pool ID (UUID) - in: path - name: id - required: true - type: string - - description: Label ID (UUID) - in: path - name: labelId - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: detach failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Detach one label from a node pool (org scoped) - tags: - - NodePools - /node-pools/{id}/servers: - get: - consumes: - - application/json - operationId: ListNodePoolServers - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Pool ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/dto.ServerResponse' - type: array - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: fetch failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: List servers attached to a node pool (org scoped) - tags: - - NodePools - post: - consumes: - - application/json - operationId: AttachNodePoolServers - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Pool ID (UUID) - in: path - name: id - required: true - type: string - - description: Server IDs to attach - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.AttachServersRequest' - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: invalid id / invalid server_ids - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: attach failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Attach servers to a node pool (org scoped) - tags: - - NodePools - /node-pools/{id}/servers/{serverId}: - delete: - consumes: - - application/json - operationId: DetachNodePoolServer - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Pool ID (UUID) - in: path - name: id - required: true - type: string - - description: Server ID (UUID) - in: path - name: serverId - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: detach failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Detach one server from a node pool (org scoped) - tags: - - NodePools - /node-pools/{id}/taints: - get: - consumes: - - application/json - operationId: ListNodePoolTaints - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Pool ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/dto.TaintResponse' - type: array - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: fetch failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: List taints attached to a node pool (org scoped) - tags: - - NodePools - post: - consumes: - - application/json - operationId: AttachNodePoolTaints - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Pool ID (UUID) - in: path - name: id - required: true - type: string - - description: Taint IDs to attach - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.AttachTaintsRequest' - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: invalid id / invalid taint_ids - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: attach failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Attach taints to a node pool (org scoped) - tags: - - NodePools - /node-pools/{id}/taints/{taintId}: - delete: - consumes: - - application/json - operationId: DetachNodePoolTaint - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Pool ID (UUID) - in: path - name: id - required: true - type: string - - description: Taint ID (UUID) - in: path - name: taintId - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: detach failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Detach one taint from a node pool (org scoped) - tags: - - NodePools - /orgs: - get: - operationId: listMyOrgs - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/models.Organization' - type: array - "401": - description: Unauthorized - schema: - $ref: '#/definitions/utils.ErrorResponse' - security: - - BearerAuth: [] - summary: List organizations I belong to - tags: - - Orgs - post: - consumes: - - application/json - operationId: createOrg - parameters: - - description: Org payload - in: body - name: body - required: true - schema: - $ref: '#/definitions/handlers.orgCreateReq' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/models.Organization' - "400": - description: Bad Request - schema: - $ref: '#/definitions/utils.ErrorResponse' - "401": - description: Unauthorized - schema: - $ref: '#/definitions/utils.ErrorResponse' - "409": - description: Conflict - schema: - $ref: '#/definitions/utils.ErrorResponse' - security: - - BearerAuth: [] - summary: Create organization - tags: - - Orgs - /orgs/{id}: - delete: - operationId: deleteOrg - parameters: - - description: Org ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "204": - description: Deleted - "401": - description: Unauthorized - schema: - $ref: '#/definitions/utils.ErrorResponse' - "404": - description: Not Found - schema: - $ref: '#/definitions/utils.ErrorResponse' - security: - - BearerAuth: [] - summary: Delete organization (owner) - tags: - - Orgs - get: - operationId: getOrg - parameters: - - description: Org ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/models.Organization' - "401": - description: Unauthorized - schema: - $ref: '#/definitions/utils.ErrorResponse' - "404": - description: Not Found - schema: - $ref: '#/definitions/utils.ErrorResponse' - security: - - BearerAuth: [] - summary: Get organization - tags: - - Orgs - patch: - consumes: - - application/json - operationId: updateOrg - parameters: - - description: Org ID (UUID) - in: path - name: id - required: true - type: string - - description: Update payload - in: body - name: body - required: true - schema: - $ref: '#/definitions/handlers.orgUpdateReq' - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/models.Organization' - "401": - description: Unauthorized - schema: - $ref: '#/definitions/utils.ErrorResponse' - "404": - description: Not Found - schema: - $ref: '#/definitions/utils.ErrorResponse' - security: - - BearerAuth: [] - summary: Update organization (owner/admin) - tags: - - Orgs - /orgs/{id}/api-keys: - get: - operationId: listOrgKeys - parameters: - - description: Org ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/models.APIKey' - type: array - "401": - description: Unauthorized - schema: - $ref: '#/definitions/utils.ErrorResponse' - security: - - BearerAuth: [] - summary: List org-scoped API keys (no secrets) - tags: - - Orgs - post: - consumes: - - application/json - operationId: createOrgKey - parameters: - - description: Org ID (UUID) - in: path - name: id - required: true - type: string - - description: Key name + optional expiry - in: body - name: body - required: true - schema: - $ref: '#/definitions/handlers.orgKeyCreateReq' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/handlers.orgKeyCreateResp' - "401": - description: Unauthorized - schema: - $ref: '#/definitions/utils.ErrorResponse' - security: - - BearerAuth: [] - summary: Create org key/secret pair (owner/admin) - tags: - - Orgs - /orgs/{id}/api-keys/{key_id}: - delete: - operationId: deleteOrgKey - parameters: - - description: Org ID (UUID) - in: path - name: id - required: true - type: string - - description: Key ID (UUID) - in: path - name: key_id - required: true - type: string - produces: - - application/json - responses: - "204": - description: Deleted - "401": - description: Unauthorized - schema: - $ref: '#/definitions/utils.ErrorResponse' - security: - - BearerAuth: [] - summary: Delete org key (owner/admin) - tags: - - Orgs - /orgs/{id}/members: - get: - operationId: listMembers - parameters: - - description: Org ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/handlers.memberOut' - type: array - "401": - description: Unauthorized - schema: - $ref: '#/definitions/utils.ErrorResponse' - security: - - BearerAuth: [] - summary: List members in org - tags: - - Orgs - post: - consumes: - - application/json - operationId: addOrUpdateMember - parameters: - - description: Org ID (UUID) - in: path - name: id - required: true - type: string - - description: User & role - in: body - name: body - required: true - schema: - $ref: '#/definitions/handlers.memberUpsertReq' - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/handlers.memberOut' - "401": - description: Unauthorized - schema: - $ref: '#/definitions/utils.ErrorResponse' - security: - - BearerAuth: [] - summary: Add or update a member (owner/admin) - tags: - - Orgs - /orgs/{id}/members/{user_id}: - delete: - operationId: removeMember - parameters: - - description: Org ID (UUID) - in: path - name: id - required: true - type: string - - description: User ID (UUID) - in: path - name: user_id - required: true - type: string - produces: - - application/json - responses: - "204": - description: Removed - "401": - description: Unauthorized - schema: - $ref: '#/definitions/utils.ErrorResponse' - security: - - BearerAuth: [] - summary: Remove a member (owner/admin) - tags: - - Orgs - /servers: - get: - consumes: - - application/json - description: 'Returns servers for the organization in X-Org-ID. Optional filters: - status, role.' - operationId: ListServers - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Filter by status (pending|provisioning|ready|failed) - in: query - name: status - type: string - - description: Filter by role - in: query - name: role - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/dto.ServerResponse' - type: array - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: failed to list servers - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: List servers (org scoped) - tags: - - Servers - post: - consumes: - - application/json - description: Creates a server bound to the org in X-Org-ID. Validates that ssh_key_id - belongs to the org. - operationId: CreateServer - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Server payload - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.CreateServerRequest' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/dto.ServerResponse' - "400": - description: invalid json / missing fields / invalid status / invalid ssh_key_id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: create failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Create server (org scoped) - tags: - - Servers - /servers/{id}: - delete: - consumes: - - application/json - description: Permanently deletes the server. - operationId: DeleteServer - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Server ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: delete failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Delete server (org scoped) - tags: - - Servers - get: - consumes: - - application/json - description: Returns one server in the given organization. - operationId: GetServer - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Server ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.ServerResponse' - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: fetch failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Get server by ID (org scoped) - tags: - - Servers - patch: - consumes: - - application/json - description: Partially update fields; changing ssh_key_id validates ownership. - operationId: UpdateServer - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Server ID (UUID) - in: path - name: id - required: true - type: string - - description: Fields to update - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.UpdateServerRequest' - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.ServerResponse' - "400": - description: invalid id / invalid json / invalid status / invalid ssh_key_id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: update failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Update server (org scoped) - tags: - - Servers - /ssh: - get: - consumes: - - application/json - description: Returns ssh keys for the organization in X-Org-ID. - operationId: ListPublicSshKeys - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/dto.SshResponse' - type: array - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: failed to list keys - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: List ssh keys (org scoped) - tags: - - Ssh - post: - consumes: - - application/json - description: Generates an RSA or ED25519 keypair, saves it, and returns metadata. - For RSA you may set bits (2048/3072/4096). Default is 4096. ED25519 ignores - bits. - operationId: CreateSSHKey - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Key generation options - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.CreateSSHRequest' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/dto.SshResponse' - "400": - description: invalid json / invalid bits - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: generation/create failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Create ssh keypair (org scoped) - tags: - - Ssh - /ssh/{id}: - delete: - consumes: - - application/json - description: Permanently deletes a keypair. - operationId: DeleteSSHKey - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: SSH Key ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: delete failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Delete ssh keypair (org scoped) - tags: - - Ssh - get: - consumes: - - application/json - description: Returns public key fields. Append `?reveal=true` to include the - private key PEM. - operationId: GetSSHKey - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: SSH Key ID (UUID) - in: path - name: id - required: true - type: string - - description: Reveal private key PEM - in: query - name: reveal - type: boolean - produces: - - application/json - responses: - "200": - description: When reveal=true - schema: - $ref: '#/definitions/dto.SshRevealResponse' - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: fetch failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Get ssh key by ID (org scoped) - tags: - - Ssh - /ssh/{id}/download: - get: - description: Download `part=public|private|both` of the keypair. `both` returns - a zip file. - operationId: DownloadSSHKey - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - required: true - type: string - - description: SSH Key ID (UUID) - in: path - name: id - required: true - type: string - - description: Which part to download - enum: - - public - - private - - both - in: query - name: part - required: true - type: string - produces: - - application/json - responses: - "200": - description: file content - schema: - type: string - "400": - description: invalid id / invalid part - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: download failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Download ssh key files by ID (org scoped) - tags: - - Ssh - /taints: - get: - consumes: - - application/json - description: 'Returns node taints for the organization in X-Org-ID. Filters: - `key`, `value`, and `q` (key contains). Add `include=node_pools` to include - linked node pools.' - operationId: ListTaints - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Exact key - in: query - name: key - type: string - - description: Exact value - in: query - name: value - type: string - - description: key contains (case-insensitive) - in: query - name: q - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/dto.TaintResponse' - type: array - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: failed to list node taints - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: List node pool taints (org scoped) - tags: - - Taints - post: - consumes: - - application/json - description: Creates a taint. - operationId: CreateTaint - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Taint payload - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.CreateTaintRequest' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/dto.TaintResponse' - "400": - description: invalid json / missing fields / invalid node_pool_ids - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: create failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Create node taint (org scoped) - tags: - - Taints - /taints/{id}: - delete: - consumes: - - application/json - description: Permanently deletes the taint. - operationId: DeleteTaint - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Taint ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "500": - description: delete failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Delete taint (org scoped) - tags: - - Taints - get: - consumes: - - application/json - operationId: GetTaint - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Taint ID (UUID) - in: path - name: id - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.TaintResponse' - "400": - description: invalid id - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: fetch failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Get node taint by ID (org scoped) - tags: - - Taints - patch: - consumes: - - application/json - description: Partially update taint fields. - operationId: UpdateTaint - parameters: - - description: Organization UUID - in: header - name: X-Org-ID - type: string - - description: Node Taint ID (UUID) - in: path - name: id - required: true - type: string - - description: Fields to update - in: body - name: body - required: true - schema: - $ref: '#/definitions/dto.UpdateTaintRequest' - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/dto.TaintResponse' - "400": - description: invalid id / invalid json - schema: - type: string - "401": - description: Unauthorized - schema: - type: string - "403": - description: organization required - schema: - type: string - "404": - description: not found - schema: - type: string - "500": - description: update failed - schema: - type: string - security: - - BearerAuth: [] - - OrgKeyAuth: [] - - OrgSecretAuth: [] - summary: Update node taint (org scoped) - tags: - - Taints - /version: - get: - consumes: - - application/json - description: Returns build/runtime metadata for the running service. - operationId: Version // operationId - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/handlers.VersionResponse' - summary: Service version information - tags: - - Meta -schemes: -- http -- https -securityDefinitions: - ApiKeyAuth: - description: User API key - in: header - name: X-API-KEY - type: apiKey - BearerAuth: - description: Bearer token authentication - in: header - name: Authorization - type: apiKey - OrgKeyAuth: - description: Org-level key/secret authentication - in: header - name: X-ORG-KEY - type: apiKey - OrgSecretAuth: - description: Org-level secret - in: header - name: X-ORG-SECRET - type: apiKey -swagger: "2.0" diff --git a/internal/web/dist/assets/index-CImaF4Hs.css b/internal/web/dist/assets/index-CImaF4Hs.css deleted file mode 100644 index 28fae22..0000000 --- a/internal/web/dist/assets/index-CImaF4Hs.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! tailwindcss v4.1.17 | 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-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction: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-duration:initial;--tw-ease:initial;--tw-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@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-100:#ffe2e2;--color-red-500:#fb2c36;--color-red-600:#e40014;--color-red-800:#9f0712;--color-orange-100:#ffedd5;--color-orange-800:#9f2d00;--color-amber-50:#fffbeb;--color-amber-100:#fef3c6;--color-amber-200:#fee685;--color-amber-800:#953d00;--color-amber-900:#7b3306;--color-emerald-100:#d0fae5;--color-emerald-800:#005f46;--color-sky-100:#dff2fe;--color-sky-800:#005986;--color-violet-100:#ede9fe;--color-violet-800:#5d0ec0;--color-zinc-200:#e4e4e7;--color-zinc-700:#3f3f46;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--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:calc(1.5/1);--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);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-2xl:1rem;--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;--aspect-video:16/9;--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);--color-border:var(--border)}@supports (color:lab(0% 0 0)){:root,:host{--color-red-100:lab(92.243% 10.2865 3.83865);--color-red-500:lab(55.4814% 75.0732 48.8528);--color-red-600:lab(48.4493% 77.4328 61.5452);--color-red-800:lab(33.7174% 55.8993 41.0293);--color-orange-100:lab(94.7127% 3.58394 14.3151);--color-orange-800:lab(37.1566% 46.6433 50.5562);--color-amber-50:lab(98.6252% -.635922 8.42309);--color-amber-100:lab(95.916% -1.21653 23.111);--color-amber-200:lab(91.7203% -.505269 49.9084);--color-amber-800:lab(37.8822% 37.1699 52.2718);--color-amber-900:lab(31.2288% 30.2627 40.0378);--color-emerald-100:lab(94.9004% -17.0769 5.63836);--color-emerald-800:lab(35.3675% -33.1188 8.04002);--color-sky-100:lab(94.3709% -4.56053 -8.23453);--color-sky-800:lab(35.164% -9.57692 -34.4068);--color-violet-100:lab(93.0838% 4.35197 -9.88284);--color-violet-800:lab(29.3188% 57.7986 -76.1493);--color-zinc-200:lab(90.6853% .399232 -1.45452);--color-zinc-700:lab(26.8019% 1.35387 -4.68303)}}}@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%;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;-webkit-text-decoration:inherit;-webkit-text-decoration: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}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::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}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}body{background-color:var(--background);color:var(--foreground)}}@layer components;@layer utilities{.\@container\/card-header{container:card-header/inline-size}.\@container\/field-group{container:field-group/inline-size}.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.sr-only{clip-path:inset(50%);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}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2\.5{top:calc(var(--spacing)*2.5)}.top-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-\[1px\]{top:1px}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-full{top:100%}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.bottom-0{bottom:calc(var(--spacing)*0)}.-left-12{left:calc(var(--spacing)*-12)}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-\[50\%\]{left:50%}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.order-last{order:9999}.col-span-2{grid-column:span 2/span 2}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.\!m-0{margin:calc(var(--spacing)*0)!important}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-auto{margin-inline:auto}.-my-2{margin-block:calc(var(--spacing)*-2)}.my-0{margin-block:calc(var(--spacing)*0)}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.-mt-4{margin-top:calc(var(--spacing)*-4)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.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-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.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)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.field-sizing-content{field-sizing:content}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-\(--cell-size\){width:var(--cell-size);height:var(--cell-size)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-auto{width:auto;height:auto}.size-full{width:100%;height:100%}.h-\(--cell-size\){height:var(--cell-size)}.h-1\.5{height:calc(var(--spacing)*1.5)}.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-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-64{height:calc(var(--spacing)*64)}.h-\[1\.15rem\]{height:1.15rem}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-\(--radix-context-menu-content-available-height\){max-height:var(--radix-context-menu-content-available-height)}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-\[50vh\]{max-height:50vh}.max-h-\[300px\]{max-height:300px}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.min-h-16{min-height:calc(var(--spacing)*16)}.min-h-\[120px\]{min-height:120px}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-\(--cell-size\){width:var(--cell-size)}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-\[48px\]{width:48px}.w-\[100px\]{width:100px}.w-\[120px\]{width:120px}.w-\[140px\]{width:140px}.w-\[160px\]{width:160px}.w-\[180px\]{width:180px}.w-\[220px\]{width:220px}.w-\[280px\]{width:280px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[70vw\]{max-width:70vw}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-max{max-width:max-content}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-\(--cell-size\){min-width:var(--cell-size)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-8{min-width:calc(var(--spacing)*8)}.min-w-9{min-width:calc(var(--spacing)*9)}.min-w-10{min-width:calc(var(--spacing)*10)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-\(--radix-context-menu-content-transform-origin\){transform-origin:var(--radix-context-menu-content-transform-origin)}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-hover-card-content-transform-origin\){transform-origin:var(--radix-hover-card-content-transform-origin)}.origin-\(--radix-menubar-content-transform-origin\){transform-origin:var(--radix-menubar-content-transform-origin)}.origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0\.5{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-caret-blink{animation:1.25s ease-out infinite caret-blink}.animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-text{cursor:text}.touch-none{touch-action:none}.resize-none{resize:none}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.scroll-py-1{scroll-padding-block:calc(var(--spacing)*1)}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-items-start{justify-items:start}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-7{gap:calc(var(--spacing)*7)}.gap-\[--spacing\(var\(--gap\)\)\]{gap:calc(var(--spacing)*var(--gap))}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*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-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)))}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[calc\(var\(--radius\)-5px\)\]{border-radius:calc(var(--radius) - 5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-l-md{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.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-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\(--color-border\){border-color:var(--color-border)}.border-amber-200{border-color:var(--color-amber-200)}.border-border,.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-destructive{border-color:var(--destructive)}.border-input{border-color:var(--input)}.border-primary{border-color:var(--primary)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\(--color-bg\){background-color:var(--color-bg)}.bg-accent{background-color:var(--accent)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-background{background-color:var(--background)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-destructive{background-color:var(--destructive)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-foreground{background-color:var(--foreground)}.bg-input{background-color:var(--input)}.bg-muted,.bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-orange-100{background-color:var(--color-orange-100)}.bg-popover{background-color:var(--popover)}.bg-primary,.bg-primary\/20{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/20{background-color:color-mix(in oklab,var(--primary)20%,transparent)}}.bg-red-100{background-color:var(--color-red-100)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-border{background-color:var(--sidebar-border)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-transparent{background-color:#0000}.bg-violet-100{background-color:var(--color-violet-100)}.bg-white{background-color:var(--color-white)}.bg-zinc-200{background-color:var(--color-zinc-200)}.fill-current{fill:currentColor}.fill-foreground{fill:var(--foreground)}.fill-primary{fill:var(--primary)}.p-0{padding:calc(var(--spacing)*0)}.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-6{padding:calc(var(--spacing)*6)}.p-\[3px\]{padding:3px}.p-px{padding:1px}.px-\(--cell-size\){padding-inline:var(--cell-size)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.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-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.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-4{padding-left:calc(var(--spacing)*4)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--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-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.8rem\]{font-size:.8rem}.leading-none{--tw-leading:1;line-height:1}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent-foreground{color:var(--accent-foreground)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-background{color:var(--background)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-emerald-800{color:var(--color-emerald-800)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.text-orange-800{color:var(--color-orange-800)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-800{color:var(--color-red-800)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\/70{color:color-mix(in oklab,var(--sidebar-foreground)70%,transparent)}}.text-sky-800{color:var(--color-sky-800)}.text-violet-800{color:var(--color-violet-800)}.text-white{color:var(--color-white)}.text-zinc-700{color:var(--color-zinc-700)}.capitalize{text-transform:capitalize}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.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-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));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-md{--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)}.shadow-none{--tw-shadow:0 0 #0000;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)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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-ring\/50{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.ring-ring\/50{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.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,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-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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))}.transition-none{transition-property:none}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.zoom-in-95{--tw-enter-scale:.95}.\[--cell-size\:--spacing\(8\)\]{--cell-size:calc(var(--spacing)*8)}.running{animation-play-state:running}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-has-\[\[data-orientation\=horizontal\]\]\/field\:text-balance:is(:where(.group\/field):has([data-orientation=horizontal]) *){text-wrap:balance}.group-has-\[\[data-slot\=item-description\]\]\/item\:translate-y-0\.5:is(:where(.group\/item):has([data-slot=item-description]) *){--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-slot\=item-description\]\]\/item\:self-start:is(:where(.group\/item):has([data-slot=item-description]) *){align-self:flex-start}.group-has-\[\>input\]\/input-group\:pt-2\.5:is(:where(.group\/input-group):has(>input) *){padding-top:calc(var(--spacing)*2.5)}.group-has-\[\>input\]\/input-group\:pb-2\.5:is(:where(.group\/input-group):has(>input) *){padding-bottom:calc(var(--spacing)*2.5)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)))}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)) + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *),.group-data-\[disabled\=true\]\/field\:opacity-50:is(:where(.group\/field)[data-disabled=true] *),.group-data-\[disabled\=true\]\/input-group\:opacity-50:is(:where(.group\/input-group)[data-disabled=true] *){opacity:.5}.group-data-\[focused\=true\]\/day\:relative:is(:where(.group\/day)[data-focused=true] *){position:relative}.group-data-\[focused\=true\]\/day\:z-10:is(:where(.group\/day)[data-focused=true] *){z-index:10}.group-data-\[focused\=true\]\/day\:border-ring:is(:where(.group\/day)[data-focused=true] *){border-color:var(--ring)}.group-data-\[focused\=true\]\/day\:ring-\[3px\]:is(:where(.group\/day)[data-focused=true] *){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + 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)}.group-data-\[focused\=true\]\/day\:ring-ring\/50:is(:where(.group\/day)[data-focused=true] *){--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.group-data-\[focused\=true\]\/day\:ring-ring\/50:is(:where(.group\/day)[data-focused=true] *){--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.group)[data-variant=floating] *){border-color:var(--sidebar-border)}.group-data-\[variant\=floating\]\:shadow-sm:is(:where(.group)[data-variant=floating] *){--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)}.group-data-\[variant\=outline\]\/field-group\:-mb-2:is(:where(.group\/field-group)[data-variant=outline] *){margin-bottom:calc(var(--spacing)*-2)}.group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block:is(:where(.group\/drawer-content)[data-vaul-drawer-direction=bottom] *){display:block}.group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:text-center:is(:where(.group\/drawer-content)[data-vaul-drawer-direction=bottom] *),.group-data-\[vaul-drawer-direction\=top\]\/drawer-content\:text-center:is(:where(.group\/drawer-content)[data-vaul-drawer-direction=top] *){text-align:center}.group-data-\[viewport\=false\]\/navigation-menu\:top-full:is(:where(.group\/navigation-menu)[data-viewport=false] *){top:100%}.group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5:is(:where(.group\/navigation-menu)[data-viewport=false] *){margin-top:calc(var(--spacing)*1.5)}.group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden:is(:where(.group\/navigation-menu)[data-viewport=false] *){overflow:hidden}.group-data-\[viewport\=false\]\/navigation-menu\:rounded-md:is(:where(.group\/navigation-menu)[data-viewport=false] *){border-radius:calc(var(--radius) - 2px)}.group-data-\[viewport\=false\]\/navigation-menu\:border:is(:where(.group\/navigation-menu)[data-viewport=false] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[viewport\=false\]\/navigation-menu\:bg-popover:is(:where(.group\/navigation-menu)[data-viewport=false] *){background-color:var(--popover)}.group-data-\[viewport\=false\]\/navigation-menu\:text-popover-foreground:is(:where(.group\/navigation-menu)[data-viewport=false] *){color:var(--popover-foreground)}.group-data-\[viewport\=false\]\/navigation-menu\:shadow:is(:where(.group\/navigation-menu)[data-viewport=false] *){--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)}.group-data-\[viewport\=false\]\/navigation-menu\:duration-200:is(:where(.group\/navigation-menu)[data-viewport=false] *){--tw-duration:.2s;transition-duration:.2s}@media (hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.selection\:bg-primary ::selection,.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection,.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:mt-0:last-child{margin-top:calc(var(--spacing)*0)}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\:bg-muted:hover,.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}.hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-muted-foreground:hover{color:var(--muted-foreground)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-4:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + 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)}.hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--sidebar-border)}}.focus\:z-10:focus{z-index:10}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:text-red-600:focus{color:var(--color-red-600)}.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-ring:focus{--tw-ring-color:var(--ring)}.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-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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-visible\:ring-1:focus-visible{--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-visible\:ring-2:focus-visible{--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-visible\:ring-4:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + 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-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + 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-visible\:ring-destructive:focus-visible,.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--ring)}.active\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.active\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.has-focus\:border-ring:has(:focus){border-color:var(--ring)}.has-focus\:ring-\[3px\]:has(:focus){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + 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)}.has-focus\:ring-ring\/50:has(:focus){--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.has-focus\:ring-ring\/50:has(:focus){--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.has-disabled\:opacity-50:has(:disabled){opacity:.5}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[state\=checked\]\:border-primary:has([data-state=checked]){border-color:var(--primary)}.has-data-\[state\=checked\]\:bg-primary\/5:has([data-state=checked]){background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.has-data-\[state\=checked\]\:bg-primary\/5:has([data-state=checked]){background-color:color-mix(in oklab,var(--primary)5%,transparent)}}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:border-ring:has([data-slot=input-group-control]:focus-visible){border-color:var(--ring)}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-\[3px\]:has([data-slot=input-group-control]:focus-visible){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + 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)}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-ring\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-ring\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:border-destructive:has([data-slot][aria-invalid=true]){border-color:var(--destructive)}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/20:has([data-slot][aria-invalid=true]){--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/20:has([data-slot][aria-invalid=true]){--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.has-\[\>\[data-align\=block-end\]\]\:h-auto:has(>[data-align=block-end]){height:auto}.has-\[\>\[data-align\=block-end\]\]\:flex-col:has(>[data-align=block-end]){flex-direction:column}.has-\[\>\[data-align\=block-start\]\]\:h-auto:has(>[data-align=block-start]){height:auto}.has-\[\>\[data-align\=block-start\]\]\:flex-col:has(>[data-align=block-start]){flex-direction:column}.has-\[\>\[data-slot\=button-group\]\]\:gap-2:has(>[data-slot=button-group]){gap:calc(var(--spacing)*2)}.has-\[\>\[data-slot\=checkbox-group\]\]\:gap-3:has(>[data-slot=checkbox-group]){gap:calc(var(--spacing)*3)}.has-\[\>\[data-slot\=field-content\]\]\:items-start:has(>[data-slot=field-content]){align-items:flex-start}.has-\[\>\[data-slot\=field\]\]\:w-full:has(>[data-slot=field]){width:100%}.has-\[\>\[data-slot\=field\]\]\:flex-col:has(>[data-slot=field]){flex-direction:column}.has-\[\>\[data-slot\=field\]\]\:rounded-md:has(>[data-slot=field]){border-radius:calc(var(--radius) - 2px)}.has-\[\>\[data-slot\=field\]\]\:border:has(>[data-slot=field]){border-style:var(--tw-border-style);border-width:1px}.has-\[\>\[data-slot\=radio-group\]\]\:gap-3:has(>[data-slot=radio-group]){gap:calc(var(--spacing)*3)}.has-\[\>button\]\:mr-\[-0\.45rem\]:has(>button){margin-right:-.45rem}.has-\[\>button\]\:ml-\[-0\.45rem\]:has(>button){margin-left:-.45rem}.has-\[\>kbd\]\:mr-\[-0\.35rem\]:has(>kbd){margin-right:-.35rem}.has-\[\>kbd\]\:ml-\[-0\.35rem\]:has(>kbd){margin-left:-.35rem}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing)*4)1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--spacing)*3)}.has-\[\>svg\]\:p-0:has(>svg){padding:calc(var(--spacing)*0)}.has-\[\>svg\]\:px-2:has(>svg){padding-inline:calc(var(--spacing)*2)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.has-\[\>textarea\]\:h-auto:has(>textarea){height:auto}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.aria-selected\:text-muted-foreground[aria-selected=true]{color:var(--muted-foreground)}.data-\[active\=true\]\:z-10[data-active=true]{z-index:10}.data-\[active\=true\]\:border-ring[data-active=true]{border-color:var(--ring)}.data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--sidebar-accent)}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-accent-foreground[data-active=true]{color:var(--accent-foreground)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\[active\=true\]\:ring-\[3px\][data-active=true]{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + 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)}.data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}@media (hover:hover){.data-\[active\=true\]\:hover\:bg-accent[data-active=true]:hover{background-color:var(--accent)}}.data-\[active\=true\]\:focus\:bg-accent[data-active=true]:focus{background-color:var(--accent)}.data-\[active\=true\]\:aria-invalid\:border-destructive[data-active=true][aria-invalid=true]{border-color:var(--destructive)}.data-\[active\=true\]\:aria-invalid\:ring-destructive\/20[data-active=true][aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.data-\[active\=true\]\:aria-invalid\:ring-destructive\/20[data-active=true][aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--destructive)}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.data-\[invalid\=true\]\:text-destructive[data-invalid=true]{color:var(--destructive)}.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x:calc(52*var(--spacing))}.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x:calc(52*var(--spacing)*-1)}.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x:calc(52*var(--spacing))}.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x:calc(52*var(--spacing)*-1)}.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity:0}.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-]{--tw-exit-opacity:0}.data-\[orientation\=horizontal\]\:h-1\.5[data-orientation=horizontal]{height:calc(var(--spacing)*1.5)}.data-\[orientation\=horizontal\]\:h-full[data-orientation=horizontal]{height:100%}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-auto[data-orientation=vertical]{height:auto}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:min-h-44[data-orientation=vertical]{min-height:calc(var(--spacing)*44)}.data-\[orientation\=vertical\]\:w-1\.5[data-orientation=vertical]{width:calc(var(--spacing)*1.5)}.data-\[orientation\=vertical\]\:w-auto[data-orientation=vertical]{width:auto}.data-\[orientation\=vertical\]\:w-full[data-orientation=vertical]{width:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[range-end\=true\]\:rounded-md[data-range-end=true]{border-radius:calc(var(--radius) - 2px)}.data-\[range-end\=true\]\:rounded-r-md[data-range-end=true]{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.data-\[range-end\=true\]\:bg-primary[data-range-end=true]{background-color:var(--primary)}.data-\[range-end\=true\]\:text-primary-foreground[data-range-end=true]{color:var(--primary-foreground)}.data-\[range-middle\=true\]\:rounded-none[data-range-middle=true]{border-radius:0}.data-\[range-middle\=true\]\:bg-accent[data-range-middle=true]{background-color:var(--accent)}.data-\[range-middle\=true\]\:text-accent-foreground[data-range-middle=true]{color:var(--accent-foreground)}.data-\[range-start\=true\]\:rounded-md[data-range-start=true]{border-radius:calc(var(--radius) - 2px)}.data-\[range-start\=true\]\:rounded-l-md[data-range-start=true]{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.data-\[range-start\=true\]\:bg-primary[data-range-start=true]{background-color:var(--primary)}.data-\[range-start\=true\]\:text-primary-foreground[data-range-start=true]{color:var(--primary-foreground)}.data-\[selected-single\=true\]\:bg-primary[data-selected-single=true]{background-color:var(--primary)}.data-\[selected-single\=true\]\:text-primary-foreground[data-selected-single=true]{color:var(--primary-foreground)}.data-\[selected\=true\]\:rounded-none[data-selected=true]{border-radius:0}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing)*9)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing)*8)}:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:color-mix(in oklab,var(--destructive)90%,transparent)}}.data-\[slot\=checkbox-group\]\:gap-3[data-slot=checkbox-group]{gap:calc(var(--spacing)*3)}:is(.\*\*\:data-\[slot\=command-input-wrapper\]\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--spacing)*12)}:is(.\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:ring-0 *)[data-slot=navigation-menu-link]:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}:is(.\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:outline-none *)[data-slot=navigation-menu-link]:focus{--tw-outline-style:none;outline-style:none}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing)*2)}.data-\[spacing\=0\]\:rounded-none[data-spacing="0"]{border-radius:0}.data-\[spacing\=0\]\:shadow-none[data-spacing="0"]{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[spacing\=0\]\:first\:rounded-l-md[data-spacing="0"]:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.data-\[spacing\=0\]\:last\:rounded-r-md[data-spacing="0"]:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x:calc(100% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-opacity:0}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity:0}.data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--accent)}.data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--accent-foreground)}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:bg-accent[data-state=open],.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:var(--secondary)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale:.9}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-opacity:0}.group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95:is(:where(.group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-scale:.95}@media (hover:hover){.data-\[state\=open\]\:hover\:bg-accent[data-state=open]:hover{background-color:var(--accent)}.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}}.data-\[state\=open\]\:focus\:bg-accent[data-state=open]:focus{background-color:var(--accent)}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}.data-\[state\=visible\]\:animate-in[data-state=visible]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity:0}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--destructive)}.data-\[variant\=label\]\:text-sm[data-variant=label]{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.data-\[variant\=legend\]\:text-base[data-variant=legend]{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.data-\[spacing\=0\]\:data-\[variant\=outline\]\:border-l-0[data-spacing="0"][data-variant=outline]{border-left-style:var(--tw-border-style);border-left-width:0}.data-\[spacing\=0\]\:data-\[variant\=outline\]\:first\:border-l[data-spacing="0"][data-variant=outline]:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.data-\[spacing\=default\]\:data-\[variant\=outline\]\:shadow-xs[data-spacing=default][data-variant=outline]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{inset-inline:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:calc(var(--spacing)*24)}.data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom]{max-height:80vh}.data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-style:var(--tw-border-style);border-top-width:1px}.data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left]{inset-block:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=left\]\:left-0[data-vaul-drawer-direction=left]{left:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left]{width:75%}.data-\[vaul-drawer-direction\=left\]\:border-r[data-vaul-drawer-direction=left]{border-right-style:var(--tw-border-style);border-right-width:1px}.data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{inset-block:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=right\]\:right-0[data-vaul-drawer-direction=right]{right:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.data-\[vaul-drawer-direction\=right\]\:border-l[data-vaul-drawer-direction=right]{border-left-style:var(--tw-border-style);border-left-width:1px}.data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{inset-inline:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:calc(var(--spacing)*24)}.data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.nth-last-2\:-mt-1:nth-last-child(2){margin-top:calc(var(--spacing)*-1)}@media (min-width:40rem){.sm\:block{display:block}.sm\:flex{display:flex}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-3xl{max-width:var(--container-3xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.sm\:pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.sm\:text-left{text-align:left}.data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:var(--container-sm)}}@media (min-width:48rem){.md\:absolute{position:absolute}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-6{grid-column:span 6/span 6}.md\:block{display:block}.md\:flex{display:flex}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:gap-1\.5{gap:calc(var(--spacing)*1.5)}.md\:p-12{padding:calc(var(--spacing)*12)}.md\:text-left{text-align:left}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:calc(var(--radius) + 4px)}.md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.peer)[data-variant=inset]~*):is(:where(.peer)[data-state=collapsed]~*){margin-left:calc(var(--spacing)*2)}.md\:after\:hidden:after{content:var(--tw-content);display:none}}@media (min-width:64rem){.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@container field-group (width>=28rem){.\@md\/field-group\:flex-row{flex-direction:row}.\@md\/field-group\:items-center{align-items:center}.\@md\/field-group\:has-\[\>\[data-slot\=field-content\]\]\:items-start:has(>[data-slot=field-content]){align-items:flex-start}}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:bg-amber-900:is(.dark *){background-color:var(--color-amber-900)}.dark\:bg-destructive\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-destructive\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:bg-transparent:is(.dark *){background-color:#0000}.dark\:text-muted-foreground:is(.dark *){color:var(--muted-foreground)}@media (hover:hover){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}.dark\:hover\:text-accent-foreground:is(.dark *):hover{color:var(--accent-foreground)}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:has-data-\[state\=checked\]\:bg-primary\/10:is(.dark *):has([data-state=checked]){background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.dark\:has-data-\[state\=checked\]\:bg-primary\/10:is(.dark *):has([data-state=checked]){background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40:is(.dark *):has([data-slot][aria-invalid=true]){--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40:is(.dark *):has([data-slot][aria-invalid=true]){--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/40:is(.dark *)[data-active=true][aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/40:is(.dark *)[data-active=true][aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:data-\[state\=active\]\:border-input:is(.dark *)[data-state=active]{border-color:var(--input)}.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:data-\[state\=active\]\:text-foreground:is(.dark *)[data-state=active]{color:var(--foreground)}.dark\:data-\[state\=checked\]\:bg-primary:is(.dark *)[data-state=checked]{background-color:var(--primary)}.dark\:data-\[state\=checked\]\:bg-primary-foreground:is(.dark *)[data-state=checked]{background-color:var(--primary-foreground)}.dark\:data-\[state\=unchecked\]\:bg-foreground:is(.dark *)[data-state=unchecked]{background-color:var(--foreground)}.dark\:data-\[state\=unchecked\]\:bg-input\/80:is(.dark *)[data-state=unchecked]{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[state\=unchecked\]\:bg-input\/80:is(.dark *)[data-state=unchecked]{background-color:color-mix(in oklab,var(--input)80%,transparent)}}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-muted-foreground .recharts-cartesian-axis-tick text{fill:var(--muted-foreground)}.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke=\#ccc]{stroke:var(--border)}@supports (color:color-mix(in lab, red, red)){.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke=\#ccc]{stroke:color-mix(in oklab,var(--border)50%,transparent)}}.\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:var(--border)}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke=\#fff]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-hidden .recharts-layer{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.\[\&_\.recharts-layer\]\:outline-hidden .recharts-layer{outline-offset:2px;outline:2px solid #0000}}.\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-polar-grid [stroke=\#ccc]{stroke:var(--border)}.\[\&_\.recharts-radial-bar-background-sector\]\:fill-muted .recharts-radial-bar-background-sector,.\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-muted .recharts-rectangle.recharts-tooltip-cursor{fill:var(--muted)}.\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-reference-line [stroke=\#ccc]{stroke:var(--border)}.\[\&_\.recharts-sector\]\:outline-hidden .recharts-sector{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.\[\&_\.recharts-sector\]\:outline-hidden .recharts-sector{outline-offset:2px;outline:2px solid #0000}}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke=\#fff]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-hidden .recharts-surface{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.\[\&_\.recharts-surface\]\:outline-hidden .recharts-surface{outline-offset:2px;outline:2px solid #0000}}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_img\]\:size-full img{width:100%;height:100%}.\[\&_img\]\:object-cover img{object-fit:cover}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 svg:not([class*=size-]){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\+\[data-slot\=item-content\]\]\:flex-none+[data-slot=item-content]{flex:none}.\[\&\:first-child\[data-selected\=true\]_button\]\:rounded-l-md:first-child[data-selected=true] button{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\.border-b\]\:pb-3.border-b{padding-bottom:calc(var(--spacing)*3)}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-3.border-t{padding-top:calc(var(--spacing)*3)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}:is(.rtl\:\*\*\:\[\.rdp-button\\_next\>svg\]\:rotate-180:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *) *):is(.rdp-button_next>svg),:is(.rtl\:\*\*\:\[\.rdp-button\\_previous\>svg\]\:rotate-180:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *) *):is(.rdp-button_previous>svg){rotate:180deg}.\[a\]\:transition-colors:is(a){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))}@media (hover:hover){.\[a\]\:hover\:bg-accent\/50:is(a):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.\[a\]\:hover\:bg-accent\/50:is(a):hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing)*2)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--destructive)!important}.\[\&\:last-child\[data-selected\=true\]_button\]\:rounded-r-md:last-child[data-selected=true] button{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:nth-child\(2\)\[data-selected\=true\]_button\]\:rounded-l-md:nth-child(2)[data-selected=true] button{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\>\*\]\:w-full>*{width:100%}.\[\&\>\*\]\:focus-visible\:relative>:focus-visible{position:relative}.\[\&\>\*\]\:focus-visible\:z-10>:focus-visible{z-index:10}.\[\&\>\*\]\:data-\[slot\=field\]\:p-4>[data-slot=field]{padding:calc(var(--spacing)*4)}@container field-group (width>=28rem){.\@md\/field-group\:\[\&\>\*\]\:w-auto>*{width:auto}}.\[\&\>\*\:not\(\:first-child\)\]\:rounded-t-none>:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:rounded-l-none>:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:border-t-0>:not(:first-child){border-top-style:var(--tw-border-style);border-top-width:0}.\[\&\>\*\:not\(\:first-child\)\]\:border-l-0>:not(:first-child){border-left-style:var(--tw-border-style);border-left-width:0}.\[\&\>\*\:not\(\:last-child\)\]\:rounded-r-none>:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.\[\&\>\*\:not\(\:last-child\)\]\:rounded-b-none>:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.\[\&\>\.sr-only\]\:w-auto>.sr-only{width:auto}.\[\&\>\[data-slot\=field-group\]\]\:gap-4>[data-slot=field-group]{gap:calc(var(--spacing)*4)}.\[\&\>\[data-slot\=field-label\]\]\:flex-auto>[data-slot=field-label]{flex:auto}@container field-group (width>=28rem){.\@md\/field-group\:\[\&\>\[data-slot\=field-label\]\]\:flex-auto>[data-slot=field-label]{flex:auto}}.has-\[select\[aria-hidden\=true\]\:last-child\]\:\[\&\>\[data-slot\=select-trigger\]\:last-of-type\]\:rounded-r-md:has(:is(select[aria-hidden=true]:last-child))>[data-slot=select-trigger]:last-of-type{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\>\[data-slot\=select-trigger\]\:not\(\[class\*\=\'w-\'\]\)\]\:w-fit>[data-slot=select-trigger]:not([class*=w-]){width:fit-content}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.has-\[\>\[data-slot\=field-content\]\]\:\[\&\>\[role\=checkbox\]\,\[role\=radio\]\]\:mt-px:has(>[data-slot=field-content])>[role=checkbox],.has-\[\>\[data-slot\=field-content\]\]\:\[\&\>\[role\=checkbox\]\,\[role\=radio\]\]\:mt-px:has(>[data-slot=field-content]) [role=radio]){margin-top:1px}@container field-group (width>=28rem){:is(.\@md\/field-group\:has-\[\>\[data-slot\=field-content\]\]\:\[\&\>\[role\=checkbox\]\,\[role\=radio\]\]\:mt-px:has(>[data-slot=field-content])>[role=checkbox],.\@md\/field-group\:has-\[\>\[data-slot\=field-content\]\]\:\[\&\>\[role\=checkbox\]\,\[role\=radio\]\]\:mt-px:has(>[data-slot=field-content]) [role=radio]){margin-top:1px}}.\[\&\>a\]\:underline>a{text-decoration-line:underline}.\[\&\>a\]\:underline-offset-4>a{text-underline-offset:4px}.\[\&\>a\:hover\]\:text-primary>a:hover{color:var(--primary)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>input\]\:flex-1>input{flex:1}.has-\[\>\[data-align\=block-end\]\]\:\[\&\>input\]\:pt-3:has(>[data-align=block-end])>input{padding-top:calc(var(--spacing)*3)}.has-\[\>\[data-align\=block-start\]\]\:\[\&\>input\]\:pb-3:has(>[data-align=block-start])>input{padding-bottom:calc(var(--spacing)*3)}.has-\[\>\[data-align\=inline-end\]\]\:\[\&\>input\]\:pr-2:has(>[data-align=inline-end])>input{padding-right:calc(var(--spacing)*2)}.has-\[\>\[data-align\=inline-start\]\]\:\[\&\>input\]\:pl-2:has(>[data-align=inline-start])>input{padding-left:calc(var(--spacing)*2)}.\[\&\>kbd\]\:rounded-\[calc\(var\(--radius\)-5px\)\]>kbd{border-radius:calc(var(--radius) - 5px)}.\[\&\>span\]\:text-xs>span{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&\>span\]\:opacity-70>span{opacity:.7}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-muted-foreground>svg{color:var(--muted-foreground)}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5>svg:not([class*=size-]){width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4>svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-slot=card-content] .\[\[data-slot\=card-content\]_\&\]\:bg-transparent,[data-slot=popover-content] .\[\[data-slot\=popover-content\]_\&\]\:bg-transparent{background-color:#0000}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/20{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/20{background-color:color-mix(in oklab,var(--background)20%,transparent)}}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:text-background{color:var(--background)}[data-slot=tooltip-content] .dark\:\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/10:is(.dark *){background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){[data-slot=tooltip-content] .dark\:\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/10:is(.dark *){background-color:color-mix(in oklab,var(--background)10%,transparent)}}[data-variant=legend]+.\[\[data-variant\=legend\]\+\&\]\:-mt-1\.5{margin-top:calc(var(--spacing)*-1.5)}@media (hover:hover){a.\[a\&\]\:hover\:bg-accent:hover{background-color:var(--accent)}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--secondary)90%,transparent)}}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--radius:.625rem;--background:#fff;--foreground:#09090b;--card:#fff;--card-foreground:#09090b;--popover:#fff;--popover-foreground:#09090b;--primary:#18181b;--primary-foreground:#fafafa;--secondary:#f4f4f5;--secondary-foreground:#18181b;--muted:#f4f4f5;--muted-foreground:#71717b;--accent:#f4f4f5;--accent-foreground:#18181b;--destructive:#e40014;--border:#e4e4e7;--input:#e4e4e7;--ring:#9f9fa9;--chart-1:#f05100;--chart-2:#009588;--chart-3:#104e64;--chart-4:#fcbb00;--chart-5:#f99c00;--sidebar:#fafafa;--sidebar-foreground:#09090b;--sidebar-primary:#18181b;--sidebar-primary-foreground:#fafafa;--sidebar-accent:#f4f4f5;--sidebar-accent-foreground:#18181b;--sidebar-border:#e4e4e7;--sidebar-ring:#9f9fa9}@supports (color:lab(0% 0 0)){:root{--background:lab(100% 0 0);--foreground:lab(2.51107% .242703 -.886115);--card:lab(100% 0 0);--card-foreground:lab(2.51107% .242703 -.886115);--popover:lab(100% 0 0);--popover-foreground:lab(2.51107% .242703 -.886115);--primary:lab(8.30603% .618205 -2.16572);--primary-foreground:lab(98.26% 0 0);--secondary:lab(96.1634% .0993311 -.364041);--secondary-foreground:lab(8.30603% .618205 -2.16572);--muted:lab(96.1634% .0993311 -.364041);--muted-foreground:lab(47.8878% 1.65477 -5.77283);--accent:lab(96.1634% .0993311 -.364041);--accent-foreground:lab(8.30603% .618205 -2.16572);--destructive:lab(48.4493% 77.4328 61.5452);--border:lab(90.6853% .399232 -1.45452);--input:lab(90.6853% .399232 -1.45452);--ring:lab(65.6464% 1.53497 -5.42429);--chart-1:lab(57.1026% 64.2584 89.8886);--chart-2:lab(55.0223% -41.0774 -3.90277);--chart-3:lab(30.372% -13.1853 -18.7887);--chart-4:lab(80.1641% 16.6016 99.2089);--chart-5:lab(72.7183% 31.8672 97.9407);--sidebar:lab(98.26% 0 0);--sidebar-foreground:lab(2.51107% .242703 -.886115);--sidebar-primary:lab(8.30603% .618205 -2.16572);--sidebar-primary-foreground:lab(98.26% 0 0);--sidebar-accent:lab(96.1634% .0993311 -.364041);--sidebar-accent-foreground:lab(8.30603% .618205 -2.16572);--sidebar-border:lab(90.6853% .399232 -1.45452);--sidebar-ring:lab(65.6464% 1.53497 -5.42429)}}.dark{--background:#09090b;--foreground:#fafafa;--card:#18181b;--card-foreground:#fafafa;--popover:#18181b;--popover-foreground:#fafafa;--primary:#e4e4e7;--primary-foreground:#18181b;--secondary:#27272a;--secondary-foreground:#fafafa;--muted:#27272a;--muted-foreground:#9f9fa9;--accent:#27272a;--accent-foreground:#fafafa;--destructive:#ff6568;--border:#ffffff1a;--input:#ffffff26;--ring:#71717b;--chart-1:#1447e6;--chart-2:#00bb7f;--chart-3:#f99c00;--chart-4:#ac4bff;--chart-5:#ff2357;--sidebar:#18181b;--sidebar-foreground:#fafafa;--sidebar-primary:#1447e6;--sidebar-primary-foreground:#fafafa;--sidebar-accent:#27272a;--sidebar-accent-foreground:#fafafa;--sidebar-border:#ffffff1a;--sidebar-ring:#71717b}@supports (color:lab(0% 0 0)){.dark{--background:lab(2.51107% .242703 -.886115);--foreground:lab(98.26% 0 0);--card:lab(8.30603% .618205 -2.16572);--card-foreground:lab(98.26% 0 0);--popover:lab(8.30603% .618205 -2.16572);--popover-foreground:lab(98.26% 0 0);--primary:lab(90.6853% .399232 -1.45452);--primary-foreground:lab(8.30603% .618205 -2.16572);--secondary:lab(15.7305% .613764 -2.16959);--secondary-foreground:lab(98.26% 0 0);--muted:lab(15.7305% .613764 -2.16959);--muted-foreground:lab(65.6464% 1.53497 -5.42429);--accent:lab(15.7305% .613764 -2.16959);--accent-foreground:lab(98.26% 0 0);--destructive:lab(63.7053% 60.745 31.3109);--border:lab(100% 0 0/.1);--input:lab(100% 0 0/.15);--ring:lab(47.8878% 1.65477 -5.77283);--chart-1:lab(36.9089% 35.0961 -85.6872);--chart-2:lab(66.9756% -58.27 19.5419);--chart-3:lab(72.7183% 31.8672 97.9407);--chart-4:lab(52.0183% 66.11 -78.2316);--chart-5:lab(56.101% 79.4328 31.4532);--sidebar:lab(8.30603% .618205 -2.16572);--sidebar-foreground:lab(98.26% 0 0);--sidebar-primary:lab(36.9089% 35.0961 -85.6872);--sidebar-primary-foreground:lab(98.26% 0 0);--sidebar-accent:lab(15.7305% .613764 -2.16959);--sidebar-accent-foreground:lab(98.26% 0 0);--sidebar-border:lab(100% 0 0/.1);--sidebar-ring:lab(47.8878% 1.65477 -5.77283)}}@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-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{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-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto)))))}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto)))))}to{height:0}}@keyframes caret-blink{0%,70%,to{opacity:1}20%,50%{opacity:0}} diff --git a/internal/web/dist/assets/index-CImaF4Hs.css.br b/internal/web/dist/assets/index-CImaF4Hs.css.br deleted file mode 100644 index aed82dd..0000000 Binary files a/internal/web/dist/assets/index-CImaF4Hs.css.br and /dev/null differ diff --git a/internal/web/dist/assets/index-CImaF4Hs.css.gz b/internal/web/dist/assets/index-CImaF4Hs.css.gz deleted file mode 100644 index 2d7ddcd..0000000 Binary files a/internal/web/dist/assets/index-CImaF4Hs.css.gz and /dev/null differ diff --git a/internal/web/dist/assets/index-DCrfJ1uu.js b/internal/web/dist/assets/index-DCrfJ1uu.js deleted file mode 100644 index 8936cef..0000000 --- a/internal/web/dist/assets/index-DCrfJ1uu.js +++ /dev/null @@ -1,79 +0,0 @@ -import{r as p,R as Q,a as U0,b as q0,c as PR,d as kp,e as Ed,u as Pp,L as xm,N as Cu,O as F0,f as KR,g as IR,h as LR,i as Nn,B as UR}from"./react-B75e6Si-.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const u of s)if(u.type==="childList")for(const d of u.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&i(d)}).observe(document,{childList:!0,subtree:!0});function r(s){const u={};return s.integrity&&(u.integrity=s.integrity),s.referrerPolicy&&(u.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?u.credentials="include":s.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function i(s){if(s.ep)return;s.ep=!0;const u=r(s);fetch(s.href,u)}})();var bm={exports:{}},bl={};var Db;function qR(){if(Db)return bl;Db=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function r(i,s,u){var d=null;if(u!==void 0&&(d=""+u),s.key!==void 0&&(d=""+s.key),"key"in s){u={};for(var h in s)h!=="key"&&(u[h]=s[h])}else u=s;return s=u.ref,{$$typeof:e,type:i,key:d,ref:s!==void 0?s:null,props:u}}return bl.Fragment=t,bl.jsx=r,bl.jsxs=r,bl}var Mb;function FR(){return Mb||(Mb=1,bm.exports=qR()),bm.exports}var l=FR(),$R=(e,t,r,i,s,u,d,h)=>{let g=document.documentElement,y=["light","dark"];function x(E){(Array.isArray(e)?e:[e]).forEach(j=>{let S=j==="class",N=S&&u?s.map(D=>u[D]||D):s;S?(g.classList.remove(...N),g.classList.add(u&&u[E]?u[E]:E)):g.setAttribute(j,E)}),v(E)}function v(E){h&&y.includes(E)&&(g.style.colorScheme=E)}function w(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(i)x(i);else try{let E=localStorage.getItem(t)||r,j=d&&E==="system"?w():E;x(j)}catch{}},zb=["light","dark"],$0="(prefers-color-scheme: dark)",VR=typeof window>"u",Kp=p.createContext(void 0),HR={setTheme:e=>{},themes:[]},BR=()=>{var e;return(e=p.useContext(Kp))!=null?e:HR},GR=e=>p.useContext(Kp)?p.createElement(p.Fragment,null,e.children):p.createElement(ZR,{...e}),XR=["light","dark"],ZR=({forcedTheme:e,disableTransitionOnChange:t=!1,enableSystem:r=!0,enableColorScheme:i=!0,storageKey:s="theme",themes:u=XR,defaultTheme:d=r?"system":"light",attribute:h="data-theme",value:g,children:y,nonce:x,scriptProps:v})=>{let[w,E]=p.useState(()=>QR(s,d)),[j,S]=p.useState(()=>w==="system"?wm():w),N=g?Object.values(g):u,D=p.useCallback(T=>{let U=T;if(!U)return;T==="system"&&r&&(U=wm());let L=g?g[U]:U,V=t?JR(x):null,fe=document.documentElement,ge=pe=>{pe==="class"?(fe.classList.remove(...N),L&&fe.classList.add(L)):pe.startsWith("data-")&&(L?fe.setAttribute(pe,L):fe.removeAttribute(pe))};if(Array.isArray(h)?h.forEach(ge):ge(h),i){let pe=zb.includes(d)?d:null,ae=zb.includes(U)?U:pe;fe.style.colorScheme=ae}V?.()},[x]),A=p.useCallback(T=>{let U=typeof T=="function"?T(w):T;E(U);try{localStorage.setItem(s,U)}catch{}},[w]),O=p.useCallback(T=>{let U=wm(T);S(U),w==="system"&&r&&!e&&D("system")},[w,e]);p.useEffect(()=>{let T=window.matchMedia($0);return T.addListener(O),O(T),()=>T.removeListener(O)},[O]),p.useEffect(()=>{let T=U=>{U.key===s&&(U.newValue?E(U.newValue):A(d))};return window.addEventListener("storage",T),()=>window.removeEventListener("storage",T)},[A]),p.useEffect(()=>{D(e??w)},[e,w]);let C=p.useMemo(()=>({theme:w,setTheme:A,forcedTheme:e,resolvedTheme:w==="system"?j:w,themes:r?[...u,"system"]:u,systemTheme:r?j:void 0}),[w,A,e,j,r,u]);return p.createElement(Kp.Provider,{value:C},p.createElement(YR,{forcedTheme:e,storageKey:s,attribute:h,enableSystem:r,enableColorScheme:i,defaultTheme:d,value:g,themes:u,nonce:x,scriptProps:v}),y)},YR=p.memo(({forcedTheme:e,storageKey:t,attribute:r,enableSystem:i,enableColorScheme:s,defaultTheme:u,value:d,themes:h,nonce:g,scriptProps:y})=>{let x=JSON.stringify([r,t,u,e,h,d,i,s]).slice(1,-1);return p.createElement("script",{...y,suppressHydrationWarning:!0,nonce:typeof window>"u"?g:"",dangerouslySetInnerHTML:{__html:`(${$R.toString()})(${x})`}})}),QR=(e,t)=>{if(VR)return;let r;try{r=localStorage.getItem(e)||void 0}catch{}return r||t},JR=e=>{let t=document.createElement("style");return e&&t.setAttribute("nonce",e),t.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(t),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(t)},1)}},wm=e=>(e||(e=window.matchMedia($0)),e.matches?"dark":"light");function WR({children:e,defaultTheme:t="system",storageKey:r="vite-ui-theme"}){return l.jsx(GR,{attribute:"class",defaultTheme:t,enableSystem:!0,storageKey:r,disableTransitionOnChange:!0,children:e})}var bs=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},eO={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},tO=class{#e=eO;#t=!1;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}},Hi=new tO;function nO(e){setTimeout(e,0)}var Xi=typeof window>"u"||"Deno"in globalThis;function Dn(){}function aO(e,t){return typeof e=="function"?e(t):e}function Qm(e){return typeof e=="number"&&e>=0&&e!==1/0}function V0(e,t){return Math.max(e+(t||0)-Date.now(),0)}function fi(e,t){return typeof e=="function"?e(t):e}function Ea(e,t){return typeof e=="function"?e(t):e}function kb(e,t){const{type:r="all",exact:i,fetchStatus:s,predicate:u,queryKey:d,stale:h}=e;if(d){if(i){if(t.queryHash!==Ip(d,t.options))return!1}else if(!Hl(t.queryKey,d))return!1}if(r!=="all"){const g=t.isActive();if(r==="active"&&!g||r==="inactive"&&g)return!1}return!(typeof h=="boolean"&&t.isStale()!==h||s&&s!==t.state.fetchStatus||u&&!u(t))}function Pb(e,t){const{exact:r,status:i,predicate:s,mutationKey:u}=e;if(u){if(!t.options.mutationKey)return!1;if(r){if(Zi(t.options.mutationKey)!==Zi(u))return!1}else if(!Hl(t.options.mutationKey,u))return!1}return!(i&&t.state.status!==i||s&&!s(t))}function Ip(e,t){return(t?.queryKeyHashFn||Zi)(e)}function Zi(e){return JSON.stringify(e,(t,r)=>Jm(r)?Object.keys(r).sort().reduce((i,s)=>(i[s]=r[s],i),{}):r)}function Hl(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(t).every(r=>Hl(e[r],t[r])):!1}var rO=Object.prototype.hasOwnProperty;function H0(e,t){if(e===t)return e;const r=Kb(e)&&Kb(t);if(!r&&!(Jm(e)&&Jm(t)))return t;const s=(r?e:Object.keys(e)).length,u=r?t:Object.keys(t),d=u.length,h=r?new Array(d):{};let g=0;for(let y=0;y{Hi.setTimeout(t,e)})}function Wm(e,t,r){return typeof r.structuralSharing=="function"?r.structuralSharing(e,t):r.structuralSharing!==!1?H0(e,t):t}function oO(e,t,r=0){const i=[...e,t];return r&&i.length>r?i.slice(1):i}function sO(e,t,r=0){const i=[t,...e];return r&&i.length>r?i.slice(0,-1):i}var Lp=Symbol();function B0(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===Lp?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function G0(e,t){return typeof e=="function"?e(...t):!!e}var lO=class extends bs{#e;#t;#n;constructor(){super(),this.#n=e=>{if(!Xi&&window.addEventListener){const t=()=>e();return window.addEventListener("visibilitychange",t,!1),()=>{window.removeEventListener("visibilitychange",t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(t=>{typeof t=="boolean"?this.setFocused(t):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){const e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e=="boolean"?this.#e:globalThis.document?.visibilityState!=="hidden"}},Up=new lO;function ep(){let e,t;const r=new Promise((s,u)=>{e=s,t=u});r.status="pending",r.catch(()=>{});function i(s){Object.assign(r,s),delete r.resolve,delete r.reject}return r.resolve=s=>{i({status:"fulfilled",value:s}),e(s)},r.reject=s=>{i({status:"rejected",reason:s}),t(s)},r}var cO=nO;function uO(){let e=[],t=0,r=h=>{h()},i=h=>{h()},s=cO;const u=h=>{t?e.push(h):s(()=>{r(h)})},d=()=>{const h=e;e=[],h.length&&s(()=>{i(()=>{h.forEach(g=>{r(g)})})})};return{batch:h=>{let g;t++;try{g=h()}finally{t--,t||d()}return g},batchCalls:h=>(...g)=>{u(()=>{h(...g)})},schedule:u,setNotifyFunction:h=>{r=h},setBatchNotifyFunction:h=>{i=h},setScheduler:h=>{s=h}}}var an=uO(),dO=class extends bs{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(!Xi&&window.addEventListener){const t=()=>e(!0),r=()=>e(!1);return window.addEventListener("online",t,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",t),window.removeEventListener("offline",r)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(r=>{r(e)}))}isOnline(){return this.#e}},rd=new dO;function fO(e){return Math.min(1e3*2**e,3e4)}function X0(e){return(e??"online")==="online"?rd.isOnline():!0}var tp=class extends Error{constructor(e){super("CancelledError"),this.revert=e?.revert,this.silent=e?.silent}};function Z0(e){let t=!1,r=0,i;const s=ep(),u=()=>s.status!=="pending",d=S=>{if(!u()){const N=new tp(S);w(N),e.onCancel?.(N)}},h=()=>{t=!0},g=()=>{t=!1},y=()=>Up.isFocused()&&(e.networkMode==="always"||rd.isOnline())&&e.canRun(),x=()=>X0(e.networkMode)&&e.canRun(),v=S=>{u()||(i?.(),s.resolve(S))},w=S=>{u()||(i?.(),s.reject(S))},E=()=>new Promise(S=>{i=N=>{(u()||y())&&S(N)},e.onPause?.()}).then(()=>{i=void 0,u()||e.onContinue?.()}),j=()=>{if(u())return;let S;const N=r===0?e.initialPromise:void 0;try{S=N??e.fn()}catch(D){S=Promise.reject(D)}Promise.resolve(S).then(v).catch(D=>{if(u())return;const A=e.retry??(Xi?0:3),O=e.retryDelay??fO,C=typeof O=="function"?O(r,D):O,T=A===!0||typeof A=="number"&&ry()?void 0:E()).then(()=>{t?w(D):j()})})};return{promise:s,status:()=>s.status,cancel:d,continue:()=>(i?.(),s),cancelRetry:h,continueRetry:g,canStart:x,start:()=>(x()?j():E().then(j),s)}}var Y0=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),Qm(this.gcTime)&&(this.#e=Hi.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(Xi?1/0:300*1e3))}clearGcTimeout(){this.#e&&(Hi.clearTimeout(this.#e),this.#e=void 0)}},hO=class extends Y0{#e;#t;#n;#r;#a;#o;#s;constructor(e){super(),this.#s=!1,this.#o=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#r=e.client,this.#n=this.#r.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#e=Ub(this.options),this.state=e.state??this.#e,this.scheduleGc()}get meta(){return this.options.meta}get promise(){return this.#a?.promise}setOptions(e){if(this.options={...this.#o,...e},this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const t=Ub(this.options);t.data!==void 0&&(this.setState(Lb(t.data,t.dataUpdatedAt)),this.#e=t)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&this.#n.remove(this)}setData(e,t){const r=Wm(this.state.data,e,this.options);return this.#i({data:r,type:"success",dataUpdatedAt:t?.updatedAt,manual:t?.manual}),r}setState(e,t){this.#i({type:"setState",state:e,setStateOptions:t})}cancel(e){const t=this.#a?.promise;return this.#a?.cancel(e),t?t.then(Dn).catch(Dn):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(this.#e)}isActive(){return this.observers.some(e=>Ea(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===Lp||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStatic(){return this.getObserversCount()>0?this.observers.some(e=>fi(e.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e==="static"?!1:this.state.isInvalidated?!0:!V0(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(t=>t.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(t=>t.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#n.notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#a&&(this.#s?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#n.notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||this.#i({type:"invalidate"})}async fetch(e,t){if(this.state.fetchStatus!=="idle"&&this.#a?.status()!=="rejected"){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(e&&this.setOptions(e),!this.options.queryFn){const h=this.observers.find(g=>g.options.queryFn);h&&this.setOptions(h.options)}const r=new AbortController,i=h=>{Object.defineProperty(h,"signal",{enumerable:!0,get:()=>(this.#s=!0,r.signal)})},s=()=>{const h=B0(this.options,t),y=(()=>{const x={client:this.#r,queryKey:this.queryKey,meta:this.meta};return i(x),x})();return this.#s=!1,this.options.persister?this.options.persister(h,y,this):h(y)},d=(()=>{const h={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#r,state:this.state,fetchFn:s};return i(h),h})();this.options.behavior?.onFetch(d,this),this.#t=this.state,(this.state.fetchStatus==="idle"||this.state.fetchMeta!==d.fetchOptions?.meta)&&this.#i({type:"fetch",meta:d.fetchOptions?.meta}),this.#a=Z0({initialPromise:t?.initialPromise,fn:d.fetchFn,onCancel:h=>{h instanceof tp&&h.revert&&this.setState({...this.#t,fetchStatus:"idle"}),r.abort()},onFail:(h,g)=>{this.#i({type:"failed",failureCount:h,error:g})},onPause:()=>{this.#i({type:"pause"})},onContinue:()=>{this.#i({type:"continue"})},retry:d.options.retry,retryDelay:d.options.retryDelay,networkMode:d.options.networkMode,canRun:()=>!0});try{const h=await this.#a.start();if(h===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(h),this.#n.config.onSuccess?.(h,this),this.#n.config.onSettled?.(h,this.state.error,this),h}catch(h){if(h instanceof tp){if(h.silent)return this.#a.promise;if(h.revert){if(this.state.data===void 0)throw h;return this.state.data}}throw this.#i({type:"error",error:h}),this.#n.config.onError?.(h,this),this.#n.config.onSettled?.(this.state.data,h,this),h}finally{this.scheduleGc()}}#i(e){const t=r=>{switch(e.type){case"failed":return{...r,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...Q0(r.data,this.options),fetchMeta:e.meta??null};case"success":const i={...r,...Lb(e.data,e.dataUpdatedAt),dataUpdateCount:r.dataUpdateCount+1,...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return this.#t=e.manual?i:void 0,i;case"error":const s=e.error;return{...r,error:s,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:s,fetchStatus:"idle",status:"error"};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...e.state}}};this.state=t(this.state),an.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),this.#n.notify({query:this,type:"updated",action:e})})}};function Q0(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:X0(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function Lb(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:"success"}}function Ub(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,r=t!==void 0,i=r?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:r?i??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:r?"success":"pending",fetchStatus:"idle"}}var mO=class extends bs{constructor(e,t){super(),this.options=t,this.#e=e,this.#i=null,this.#s=ep(),this.bindMethods(),this.setOptions(t)}#e;#t=void 0;#n=void 0;#r=void 0;#a;#o;#s;#i;#p;#f;#h;#c;#u;#l;#m=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),qb(this.#t,this.options)?this.#d():this.updateResult(),this.#x())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return np(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return np(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#w(),this.#t.removeObserver(this)}setOptions(e){const t=this.options,r=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof Ea(this.options.enabled,this.#t)!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");this.#S(),this.#t.setOptions(this.options),t._defaulted&&!ad(this.options,t)&&this.#e.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#t,observer:this});const i=this.hasListeners();i&&Fb(this.#t,r,this.options,t)&&this.#d(),this.updateResult(),i&&(this.#t!==r||Ea(this.options.enabled,this.#t)!==Ea(t.enabled,this.#t)||fi(this.options.staleTime,this.#t)!==fi(t.staleTime,this.#t))&&this.#g();const s=this.#y();i&&(this.#t!==r||Ea(this.options.enabled,this.#t)!==Ea(t.enabled,this.#t)||s!==this.#l)&&this.#v(s)}getOptimisticResult(e){const t=this.#e.getQueryCache().build(this.#e,e),r=this.createResult(t,e);return gO(this,r)&&(this.#r=r,this.#o=this.options,this.#a=this.#t.state),r}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(r,i)=>(this.trackProp(i),t?.(i),i==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&this.#s.status==="pending"&&this.#s.reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(r,i))})}trackProp(e){this.#m.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){const t=this.#e.defaultQueryOptions(e),r=this.#e.getQueryCache().build(this.#e,t);return r.fetch().then(()=>this.createResult(r,t))}fetch(e){return this.#d({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#d(e){this.#S();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(Dn)),t}#g(){this.#b();const e=fi(this.options.staleTime,this.#t);if(Xi||this.#r.isStale||!Qm(e))return;const r=V0(this.#r.dataUpdatedAt,e)+1;this.#c=Hi.setTimeout(()=>{this.#r.isStale||this.updateResult()},r)}#y(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#v(e){this.#w(),this.#l=e,!(Xi||Ea(this.options.enabled,this.#t)===!1||!Qm(this.#l)||this.#l===0)&&(this.#u=Hi.setInterval(()=>{(this.options.refetchIntervalInBackground||Up.isFocused())&&this.#d()},this.#l))}#x(){this.#g(),this.#v(this.#y())}#b(){this.#c&&(Hi.clearTimeout(this.#c),this.#c=void 0)}#w(){this.#u&&(Hi.clearInterval(this.#u),this.#u=void 0)}createResult(e,t){const r=this.#t,i=this.options,s=this.#r,u=this.#a,d=this.#o,g=e!==r?e.state:this.#n,{state:y}=e;let x={...y},v=!1,w;if(t._optimisticResults){const V=this.hasListeners(),fe=!V&&qb(e,t),ge=V&&Fb(e,r,t,i);(fe||ge)&&(x={...x,...Q0(y.data,e.options)}),t._optimisticResults==="isRestoring"&&(x.fetchStatus="idle")}let{error:E,errorUpdatedAt:j,status:S}=x;w=x.data;let N=!1;if(t.placeholderData!==void 0&&w===void 0&&S==="pending"){let V;s?.isPlaceholderData&&t.placeholderData===d?.placeholderData?(V=s.data,N=!0):V=typeof t.placeholderData=="function"?t.placeholderData(this.#h?.state.data,this.#h):t.placeholderData,V!==void 0&&(S="success",w=Wm(s?.data,V,t),v=!0)}if(t.select&&w!==void 0&&!N)if(s&&w===u?.data&&t.select===this.#p)w=this.#f;else try{this.#p=t.select,w=t.select(w),w=Wm(s?.data,w,t),this.#f=w,this.#i=null}catch(V){this.#i=V}this.#i&&(E=this.#i,w=this.#f,j=Date.now(),S="error");const D=x.fetchStatus==="fetching",A=S==="pending",O=S==="error",C=A&&D,T=w!==void 0,L={status:S,fetchStatus:x.fetchStatus,isPending:A,isSuccess:S==="success",isError:O,isInitialLoading:C,isLoading:C,data:w,dataUpdatedAt:x.dataUpdatedAt,error:E,errorUpdatedAt:j,failureCount:x.fetchFailureCount,failureReason:x.fetchFailureReason,errorUpdateCount:x.errorUpdateCount,isFetched:x.dataUpdateCount>0||x.errorUpdateCount>0,isFetchedAfterMount:x.dataUpdateCount>g.dataUpdateCount||x.errorUpdateCount>g.errorUpdateCount,isFetching:D,isRefetching:D&&!A,isLoadingError:O&&!T,isPaused:x.fetchStatus==="paused",isPlaceholderData:v,isRefetchError:O&&T,isStale:qp(e,t),refetch:this.refetch,promise:this.#s,isEnabled:Ea(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){const V=pe=>{L.status==="error"?pe.reject(L.error):L.data!==void 0&&pe.resolve(L.data)},fe=()=>{const pe=this.#s=L.promise=ep();V(pe)},ge=this.#s;switch(ge.status){case"pending":e.queryHash===r.queryHash&&V(ge);break;case"fulfilled":(L.status==="error"||L.data!==ge.value)&&fe();break;case"rejected":(L.status!=="error"||L.error!==ge.reason)&&fe();break}}return L}updateResult(){const e=this.#r,t=this.createResult(this.#t,this.options);if(this.#a=this.#t.state,this.#o=this.options,this.#a.data!==void 0&&(this.#h=this.#t),ad(t,e))return;this.#r=t;const r=()=>{if(!e)return!0;const{notifyOnChangeProps:i}=this.options,s=typeof i=="function"?i():i;if(s==="all"||!s&&!this.#m.size)return!0;const u=new Set(s??this.#m);return this.options.throwOnError&&u.add("error"),Object.keys(this.#r).some(d=>{const h=d;return this.#r[h]!==e[h]&&u.has(h)})};this.#_({listeners:r()})}#S(){const e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;const t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#x()}#_(e){an.batch(()=>{e.listeners&&this.listeners.forEach(t=>{t(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:"observerResultsUpdated"})})}};function pO(e,t){return Ea(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status==="error"&&t.retryOnMount===!1)}function qb(e,t){return pO(e,t)||e.state.data!==void 0&&np(e,t,t.refetchOnMount)}function np(e,t,r){if(Ea(t.enabled,e)!==!1&&fi(t.staleTime,e)!=="static"){const i=typeof r=="function"?r(e):r;return i==="always"||i!==!1&&qp(e,t)}return!1}function Fb(e,t,r,i){return(e!==t||Ea(i.enabled,e)===!1)&&(!r.suspense||e.state.status!=="error")&&qp(e,r)}function qp(e,t){return Ea(t.enabled,e)!==!1&&e.isStaleByTime(fi(t.staleTime,e))}function gO(e,t){return!ad(e.getCurrentResult(),t)}function $b(e){return{onFetch:(t,r)=>{const i=t.options,s=t.fetchOptions?.meta?.fetchMore?.direction,u=t.state.data?.pages||[],d=t.state.data?.pageParams||[];let h={pages:[],pageParams:[]},g=0;const y=async()=>{let x=!1;const v=j=>{Object.defineProperty(j,"signal",{enumerable:!0,get:()=>(t.signal.aborted?x=!0:t.signal.addEventListener("abort",()=>{x=!0}),t.signal)})},w=B0(t.options,t.fetchOptions),E=async(j,S,N)=>{if(x)return Promise.reject();if(S==null&&j.pages.length)return Promise.resolve(j);const A=(()=>{const U={client:t.client,queryKey:t.queryKey,pageParam:S,direction:N?"backward":"forward",meta:t.options.meta};return v(U),U})(),O=await w(A),{maxPages:C}=t.options,T=N?sO:oO;return{pages:T(j.pages,O,C),pageParams:T(j.pageParams,S,C)}};if(s&&u.length){const j=s==="backward",S=j?yO:Vb,N={pages:u,pageParams:d},D=S(i,N);h=await E(N,D,j)}else{const j=e??u.length;do{const S=g===0?d[0]??i.initialPageParam:Vb(i,h);if(g>0&&S==null)break;h=await E(h,S),g++}while(gt.options.persister?.(y,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},r):t.fetchFn=y}}}function Vb(e,{pages:t,pageParams:r}){const i=t.length-1;return t.length>0?e.getNextPageParam(t[i],t,r[i],r):void 0}function yO(e,{pages:t,pageParams:r}){return t.length>0?e.getPreviousPageParam?.(t[0],t,r[0],r):void 0}var vO=class extends Y0{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||J0(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status==="pending"?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){const t=()=>{this.#a({type:"continue"})},r={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=Z0({fn:()=>this.options.mutationFn?this.options.mutationFn(e,r):Promise.reject(new Error("No mutationFn found")),onFail:(u,d)=>{this.#a({type:"failed",failureCount:u,error:d})},onPause:()=>{this.#a({type:"pause"})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});const i=this.state.status==="pending",s=!this.#r.canStart();try{if(i)t();else{this.#a({type:"pending",variables:e,isPaused:s}),await this.#n.config.onMutate?.(e,this,r);const d=await this.options.onMutate?.(e,r);d!==this.state.context&&this.#a({type:"pending",context:d,variables:e,isPaused:s})}const u=await this.#r.start();return await this.#n.config.onSuccess?.(u,e,this.state.context,this,r),await this.options.onSuccess?.(u,e,this.state.context,r),await this.#n.config.onSettled?.(u,null,this.state.variables,this.state.context,this,r),await this.options.onSettled?.(u,null,e,this.state.context,r),this.#a({type:"success",data:u}),u}catch(u){try{throw await this.#n.config.onError?.(u,e,this.state.context,this,r),await this.options.onError?.(u,e,this.state.context,r),await this.#n.config.onSettled?.(void 0,u,this.state.variables,this.state.context,this,r),await this.options.onSettled?.(void 0,u,e,this.state.context,r),u}finally{this.#a({type:"error",error:u})}}finally{this.#n.runNext(this)}}#a(e){const t=r=>{switch(e.type){case"failed":return{...r,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...r,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:e.error,failureCount:r.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}};this.state=t(this.state),an.batch(()=>{this.#t.forEach(r=>{r.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:"updated",action:e})})}};function J0(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var xO=class extends bs{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,r){const i=new vO({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:r});return this.add(i),i}add(e){this.#e.add(e);const t=ju(e);if(typeof t=="string"){const r=this.#t.get(t);r?r.push(e):this.#t.set(t,[e])}this.notify({type:"added",mutation:e})}remove(e){if(this.#e.delete(e)){const t=ju(e);if(typeof t=="string"){const r=this.#t.get(t);if(r)if(r.length>1){const i=r.indexOf(e);i!==-1&&r.splice(i,1)}else r[0]===e&&this.#t.delete(t)}}this.notify({type:"removed",mutation:e})}canRun(e){const t=ju(e);if(typeof t=="string"){const i=this.#t.get(t)?.find(s=>s.state.status==="pending");return!i||i===e}else return!0}runNext(e){const t=ju(e);return typeof t=="string"?this.#t.get(t)?.find(i=>i!==e&&i.state.isPaused)?.continue()??Promise.resolve():Promise.resolve()}clear(){an.batch(()=>{this.#e.forEach(e=>{this.notify({type:"removed",mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){const t={exact:!0,...e};return this.getAll().find(r=>Pb(t,r))}findAll(e={}){return this.getAll().filter(t=>Pb(e,t))}notify(e){an.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){const e=this.getAll().filter(t=>t.state.isPaused);return an.batch(()=>Promise.all(e.map(t=>t.continue().catch(Dn))))}};function ju(e){return e.options.scope?.id}var bO=class extends bs{#e;#t=void 0;#n;#r;constructor(t,r){super(),this.#e=t,this.setOptions(r),this.bindMethods(),this.#a()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(t){const r=this.options;this.options=this.#e.defaultMutationOptions(t),ad(this.options,r)||this.#e.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#n,observer:this}),r?.mutationKey&&this.options.mutationKey&&Zi(r.mutationKey)!==Zi(this.options.mutationKey)?this.reset():this.#n?.state.status==="pending"&&this.#n.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#n?.removeObserver(this)}onMutationUpdate(t){this.#a(),this.#o(t)}getCurrentResult(){return this.#t}reset(){this.#n?.removeObserver(this),this.#n=void 0,this.#a(),this.#o()}mutate(t,r){return this.#r=r,this.#n?.removeObserver(this),this.#n=this.#e.getMutationCache().build(this.#e,this.options),this.#n.addObserver(this),this.#n.execute(t)}#a(){const t=this.#n?.state??J0();this.#t={...t,isPending:t.status==="pending",isSuccess:t.status==="success",isError:t.status==="error",isIdle:t.status==="idle",mutate:this.mutate,reset:this.reset}}#o(t){an.batch(()=>{if(this.#r&&this.hasListeners()){const r=this.#t.variables,i=this.#t.context,s={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};t?.type==="success"?(this.#r.onSuccess?.(t.data,r,i,s),this.#r.onSettled?.(t.data,null,r,i,s)):t?.type==="error"&&(this.#r.onError?.(t.error,r,i,s),this.#r.onSettled?.(void 0,t.error,r,i,s))}this.listeners.forEach(r=>{r(this.#t)})})}},wO=class extends bs{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,r){const i=t.queryKey,s=t.queryHash??Ip(i,t);let u=this.get(s);return u||(u=new hO({client:e,queryKey:i,queryHash:s,options:e.defaultQueryOptions(t),state:r,defaultOptions:e.getQueryDefaults(i)}),this.add(u)),u}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){const t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){an.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){const t={exact:!0,...e};return this.getAll().find(r=>kb(t,r))}findAll(e={}){const t=this.getAll();return Object.keys(e).length>0?t.filter(r=>kb(e,r)):t}notify(e){an.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){an.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){an.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},SO=class{#e;#t;#n;#r;#a;#o;#s;#i;constructor(e={}){this.#e=e.queryCache||new wO,this.#t=e.mutationCache||new xO,this.#n=e.defaultOptions||{},this.#r=new Map,this.#a=new Map,this.#o=0}mount(){this.#o++,this.#o===1&&(this.#s=Up.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#i=rd.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#o--,this.#o===0&&(this.#s?.(),this.#s=void 0,this.#i?.(),this.#i=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return this.#t.findAll({...e,status:"pending"}).length}getQueryData(e){const t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),r=this.#e.build(this,t),i=r.state.data;return i===void 0?this.fetchQuery(e):(e.revalidateIfStale&&r.isStaleByTime(fi(t.staleTime,r))&&this.prefetchQuery(t),Promise.resolve(i))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:t,state:r})=>{const i=r.data;return[t,i]})}setQueryData(e,t,r){const i=this.defaultQueryOptions({queryKey:e}),u=this.#e.get(i.queryHash)?.state.data,d=aO(t,u);if(d!==void 0)return this.#e.build(this,i).setData(d,{...r,manual:!0})}setQueriesData(e,t,r){return an.batch(()=>this.#e.findAll(e).map(({queryKey:i})=>[i,this.setQueryData(i,t,r)]))}getQueryState(e){const t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){const t=this.#e;an.batch(()=>{t.findAll(e).forEach(r=>{t.remove(r)})})}resetQueries(e,t){const r=this.#e;return an.batch(()=>(r.findAll(e).forEach(i=>{i.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const r={revert:!0,...t},i=an.batch(()=>this.#e.findAll(e).map(s=>s.cancel(r)));return Promise.all(i).then(Dn).catch(Dn)}invalidateQueries(e,t={}){return an.batch(()=>(this.#e.findAll(e).forEach(r=>{r.invalidate()}),e?.refetchType==="none"?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??"active"},t)))}refetchQueries(e,t={}){const r={...t,cancelRefetch:t.cancelRefetch??!0},i=an.batch(()=>this.#e.findAll(e).filter(s=>!s.isDisabled()&&!s.isStatic()).map(s=>{let u=s.fetch(void 0,r);return r.throwOnError||(u=u.catch(Dn)),s.state.fetchStatus==="paused"?Promise.resolve():u}));return Promise.all(i).then(Dn)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const r=this.#e.build(this,t);return r.isStaleByTime(fi(t.staleTime,r))?r.fetch(t):Promise.resolve(r.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(Dn).catch(Dn)}fetchInfiniteQuery(e){return e.behavior=$b(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(Dn).catch(Dn)}ensureInfiniteQueryData(e){return e.behavior=$b(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return rd.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(Zi(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...this.#r.values()],r={};return t.forEach(i=>{Hl(e,i.queryKey)&&Object.assign(r,i.defaultOptions)}),r}setMutationDefaults(e,t){this.#a.set(Zi(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...this.#a.values()],r={};return t.forEach(i=>{Hl(e,i.mutationKey)&&Object.assign(r,i.defaultOptions)}),r}defaultQueryOptions(e){if(e._defaulted)return e;const t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=Ip(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===Lp&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},W0=p.createContext(void 0),da=e=>{const t=p.useContext(W0);if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},_O=({client:e,children:t})=>(p.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),l.jsx(W0.Provider,{value:e,children:t})),eS=p.createContext(!1),EO=()=>p.useContext(eS);eS.Provider;function CO(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var jO=p.createContext(CO()),RO=()=>p.useContext(jO),OO=(e,t)=>{(e.suspense||e.throwOnError||e.experimental_prefetchInRender)&&(t.isReset()||(e.retryOnMount=!1))},NO=e=>{p.useEffect(()=>{e.clearReset()},[e])},AO=({result:e,errorResetBoundary:t,throwOnError:r,query:i,suspense:s})=>e.isError&&!t.isReset()&&!e.isFetching&&i&&(s&&e.data===void 0||G0(r,[e.error,i])),TO=e=>{if(e.suspense){const r=s=>s==="static"?s:Math.max(s??1e3,1e3),i=e.staleTime;e.staleTime=typeof i=="function"?(...s)=>r(i(...s)):r(i),typeof e.gcTime=="number"&&(e.gcTime=Math.max(e.gcTime,1e3))}},DO=(e,t)=>e.isLoading&&e.isFetching&&!t,MO=(e,t)=>e?.suspense&&t.isPending,Hb=(e,t,r)=>t.fetchOptimistic(e).catch(()=>{r.clearReset()});function zO(e,t,r){const i=EO(),s=RO(),u=da(),d=u.defaultQueryOptions(e);u.getDefaultOptions().queries?._experimental_beforeQuery?.(d),d._optimisticResults=i?"isRestoring":"optimistic",TO(d),OO(d,s),NO(s);const h=!u.getQueryCache().get(d.queryHash),[g]=p.useState(()=>new t(u,d)),y=g.getOptimisticResult(d),x=!i&&e.subscribed!==!1;if(p.useSyncExternalStore(p.useCallback(v=>{const w=x?g.subscribe(an.batchCalls(v)):Dn;return g.updateResult(),w},[g,x]),()=>g.getCurrentResult(),()=>g.getCurrentResult()),p.useEffect(()=>{g.setOptions(d)},[d,g]),MO(d,y))throw Hb(d,g,s);if(AO({result:y,errorResetBoundary:s,throwOnError:d.throwOnError,query:u.getQueryCache().get(d.queryHash),suspense:d.suspense}))throw y.error;return u.getDefaultOptions().queries?._experimental_afterQuery?.(d,y),d.experimental_prefetchInRender&&!Xi&&DO(y,i)&&(h?Hb(d,g,s):u.getQueryCache().get(d.queryHash)?.promise)?.catch(Dn).finally(()=>{g.updateResult()}),d.notifyOnChangeProps?y:g.trackResult(y)}function rn(e,t){return zO(e,mO)}function mt(e,t){const r=da(),[i]=p.useState(()=>new bO(r,e));p.useEffect(()=>{i.setOptions(e)},[i,e]);const s=p.useSyncExternalStore(p.useCallback(d=>i.subscribe(an.batchCalls(d)),[i]),()=>i.getCurrentResult(),()=>i.getCurrentResult()),u=p.useCallback((d,h)=>{i.mutate(d,h).catch(Dn)},[i]);if(s.error&&G0(i.options.throwOnError,[s.error]))throw s.error;return{...s,mutate:u,mutateAsync:s.mutate}}const kO=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),PO=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,r,i)=>i?i.toUpperCase():r.toLowerCase()),Bb=e=>{const t=PO(e);return t.charAt(0).toUpperCase()+t.slice(1)},tS=(...e)=>e.filter((t,r,i)=>!!t&&t.trim()!==""&&i.indexOf(t)===r).join(" ").trim(),KO=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0};var IO={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const LO=p.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:i,className:s="",children:u,iconNode:d,...h},g)=>p.createElement("svg",{ref:g,...IO,width:t,height:t,stroke:e,strokeWidth:i?Number(r)*24/Number(t):r,className:tS("lucide",s),...!u&&!KO(h)&&{"aria-hidden":"true"},...h},[...d.map(([y,x])=>p.createElement(y,x)),...Array.isArray(u)?u:[u]]));const pt=(e,t)=>{const r=p.forwardRef(({className:i,...s},u)=>p.createElement(LO,{ref:u,iconNode:t,className:tS(`lucide-${kO(Bb(e))}`,`lucide-${e}`,i),...s}));return r.displayName=Bb(e),r};const UO=[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]],qO=pt("boxes",UO);const FO=[["path",{d:"M10 12h4",key:"a56b0p"}],["path",{d:"M10 8h4",key:"1sr2af"}],["path",{d:"M14 21v-3a2 2 0 0 0-4 0v3",key:"1rgiei"}],["path",{d:"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2",key:"secmi2"}],["path",{d:"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16",key:"16ra0t"}]],nS=pt("building-2",FO);const $O=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],aS=pt("check",$O);const VO=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],rS=pt("chevron-down",VO);const HO=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],BO=pt("chevron-right",HO);const GO=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],XO=pt("chevron-up",GO);const ZO=[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]],YO=pt("chevrons-up-down",ZO);const QO=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],JO=pt("circle-check",QO);const WO=[["path",{d:"M22 2 2 22",key:"y4kqgn"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],Fp=pt("circle-slash-2",WO);const e2=[["path",{d:"M15.536 11.293a1 1 0 0 0 0 1.414l2.376 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z",key:"1uwlt4"}],["path",{d:"M2.297 11.293a1 1 0 0 0 0 1.414l2.377 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414L6.088 8.916a1 1 0 0 0-1.414 0z",key:"10291m"}],["path",{d:"M8.916 17.912a1 1 0 0 0 0 1.415l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.415l-2.377-2.376a1 1 0 0 0-1.414 0z",key:"1tqoq1"}],["path",{d:"M8.916 4.674a1 1 0 0 0 0 1.414l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z",key:"1x6lto"}]],t2=pt("component",e2);const n2=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],a2=pt("download",n2);const r2=[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]],i2=pt("ellipsis",r2);const o2=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],s2=pt("eye",o2);const l2=[["path",{d:"M10.65 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v10.1",key:"1a2hbp"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"m10 15 1 1",key:"1h4vmv"}],["path",{d:"m11 14-4.586 4.586",key:"maylof"}],["circle",{cx:"5",cy:"20",r:"2",key:"860zyv"}]],c2=pt("file-key",l2);const u2=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],d2=pt("info",u2);const f2=[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]],h2=pt("key-round",f2);const m2=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]],Ru=pt("link",m2);const p2=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],ps=pt("loader-circle",p2);const g2=[["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z",key:"2d38gg"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],y2=pt("octagon-x",g2);const v2=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}]],x2=pt("panel-left",v2);const b2=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],Cd=pt("pencil",b2);const w2=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],ro=pt("plus",w2);const S2=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],_2=pt("refresh-cw",S2);const E2=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],zr=pt("search",E2);const C2=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],iS=pt("server",C2);const j2=[["path",{d:"M3 3h.01",key:"159qn6"}],["path",{d:"M7 5h.01",key:"1hq22a"}],["path",{d:"M11 7h.01",key:"1osv80"}],["path",{d:"M3 7h.01",key:"1xzrh3"}],["path",{d:"M7 9h.01",key:"19b3jx"}],["path",{d:"M3 11h.01",key:"1eifu7"}],["rect",{width:"4",height:"4",x:"15",y:"5",key:"mri9e4"}],["path",{d:"m19 9 2 2v10c0 .6-.4 1-1 1h-6c-.6 0-1-.4-1-1V11l2-2",key:"aib6hk"}],["path",{d:"m13 14 8-2",key:"1d7bmk"}],["path",{d:"m13 19 8-2",key:"1y2vml"}]],R2=pt("spray-can",j2);const O2=[["path",{d:"M13.172 2a2 2 0 0 1 1.414.586l6.71 6.71a2.4 2.4 0 0 1 0 3.408l-4.592 4.592a2.4 2.4 0 0 1-3.408 0l-6.71-6.71A2 2 0 0 1 6 9.172V3a1 1 0 0 1 1-1z",key:"16rjxf"}],["path",{d:"M2 7v6.172a2 2 0 0 0 .586 1.414l6.71 6.71a2.4 2.4 0 0 0 3.191.193",key:"178nd4"}],["circle",{cx:"10.5",cy:"6.5",r:".5",fill:"currentColor",key:"12ikhr"}]],jd=pt("tags",O2);const N2=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],oS=pt("trash-2",N2);const A2=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],T2=pt("triangle-alert",A2);const D2=[["circle",{cx:"12",cy:"8",r:"5",key:"1hypcn"}],["path",{d:"M20 21a8 8 0 0 0-16 0",key:"rfgkzh"}]],M2=pt("user-round",D2);const z2=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],sS=pt("users",z2);const k2=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],$p=pt("x",k2);function P2(e){if(typeof document>"u")return;let t=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",t.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}const K2=e=>{switch(e){case"success":return U2;case"info":return F2;case"warning":return q2;case"error":return $2;default:return null}},I2=Array(12).fill(0),L2=({visible:e,className:t})=>Q.createElement("div",{className:["sonner-loading-wrapper",t].filter(Boolean).join(" "),"data-visible":e},Q.createElement("div",{className:"sonner-spinner"},I2.map((r,i)=>Q.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${i}`})))),U2=Q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},Q.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),q2=Q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},Q.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),F2=Q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},Q.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),$2=Q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},Q.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),V2=Q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},Q.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),Q.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),H2=()=>{const[e,t]=Q.useState(document.hidden);return Q.useEffect(()=>{const r=()=>{t(document.hidden)};return document.addEventListener("visibilitychange",r),()=>window.removeEventListener("visibilitychange",r)},[]),e};let ap=1;class B2{constructor(){this.subscribe=t=>(this.subscribers.push(t),()=>{const r=this.subscribers.indexOf(t);this.subscribers.splice(r,1)}),this.publish=t=>{this.subscribers.forEach(r=>r(t))},this.addToast=t=>{this.publish(t),this.toasts=[...this.toasts,t]},this.create=t=>{var r;const{message:i,...s}=t,u=typeof t?.id=="number"||((r=t.id)==null?void 0:r.length)>0?t.id:ap++,d=this.toasts.find(g=>g.id===u),h=t.dismissible===void 0?!0:t.dismissible;return this.dismissedToasts.has(u)&&this.dismissedToasts.delete(u),d?this.toasts=this.toasts.map(g=>g.id===u?(this.publish({...g,...t,id:u,title:i}),{...g,...t,id:u,dismissible:h,title:i}):g):this.addToast({title:i,...s,dismissible:h,id:u}),u},this.dismiss=t=>(t?(this.dismissedToasts.add(t),requestAnimationFrame(()=>this.subscribers.forEach(r=>r({id:t,dismiss:!0})))):this.toasts.forEach(r=>{this.subscribers.forEach(i=>i({id:r.id,dismiss:!0}))}),t),this.message=(t,r)=>this.create({...r,message:t}),this.error=(t,r)=>this.create({...r,message:t,type:"error"}),this.success=(t,r)=>this.create({...r,type:"success",message:t}),this.info=(t,r)=>this.create({...r,type:"info",message:t}),this.warning=(t,r)=>this.create({...r,type:"warning",message:t}),this.loading=(t,r)=>this.create({...r,type:"loading",message:t}),this.promise=(t,r)=>{if(!r)return;let i;r.loading!==void 0&&(i=this.create({...r,promise:t,type:"loading",message:r.loading,description:typeof r.description!="function"?r.description:void 0}));const s=Promise.resolve(t instanceof Function?t():t);let u=i!==void 0,d;const h=s.then(async y=>{if(d=["resolve",y],Q.isValidElement(y))u=!1,this.create({id:i,type:"default",message:y});else if(X2(y)&&!y.ok){u=!1;const v=typeof r.error=="function"?await r.error(`HTTP error! status: ${y.status}`):r.error,w=typeof r.description=="function"?await r.description(`HTTP error! status: ${y.status}`):r.description,j=typeof v=="object"&&!Q.isValidElement(v)?v:{message:v};this.create({id:i,type:"error",description:w,...j})}else if(y instanceof Error){u=!1;const v=typeof r.error=="function"?await r.error(y):r.error,w=typeof r.description=="function"?await r.description(y):r.description,j=typeof v=="object"&&!Q.isValidElement(v)?v:{message:v};this.create({id:i,type:"error",description:w,...j})}else if(r.success!==void 0){u=!1;const v=typeof r.success=="function"?await r.success(y):r.success,w=typeof r.description=="function"?await r.description(y):r.description,j=typeof v=="object"&&!Q.isValidElement(v)?v:{message:v};this.create({id:i,type:"success",description:w,...j})}}).catch(async y=>{if(d=["reject",y],r.error!==void 0){u=!1;const x=typeof r.error=="function"?await r.error(y):r.error,v=typeof r.description=="function"?await r.description(y):r.description,E=typeof x=="object"&&!Q.isValidElement(x)?x:{message:x};this.create({id:i,type:"error",description:v,...E})}}).finally(()=>{u&&(this.dismiss(i),i=void 0),r.finally==null||r.finally.call(r)}),g=()=>new Promise((y,x)=>h.then(()=>d[0]==="reject"?x(d[1]):y(d[1])).catch(x));return typeof i!="string"&&typeof i!="number"?{unwrap:g}:Object.assign(i,{unwrap:g})},this.custom=(t,r)=>{const i=r?.id||ap++;return this.create({jsx:t(i),id:i,...r}),i},this.getActiveToasts=()=>this.toasts.filter(t=>!this.dismissedToasts.has(t.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}}const Bn=new B2,G2=(e,t)=>{const r=t?.id||ap++;return Bn.addToast({title:e,...t,id:r}),r},X2=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",Z2=G2,Y2=()=>Bn.toasts,Q2=()=>Bn.getActiveToasts(),Ee=Object.assign(Z2,{success:Bn.success,info:Bn.info,warning:Bn.warning,error:Bn.error,custom:Bn.custom,message:Bn.message,promise:Bn.promise,dismiss:Bn.dismiss,loading:Bn.loading},{getHistory:Y2,getToasts:Q2});P2("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function Ou(e){return e.label!==void 0}const J2=3,W2="24px",eN="16px",Gb=4e3,tN=356,nN=14,aN=45,rN=200;function tr(...e){return e.filter(Boolean).join(" ")}function iN(e){const[t,r]=e.split("-"),i=[];return t&&i.push(t),r&&i.push(r),i}const oN=e=>{var t,r,i,s,u,d,h,g,y;const{invert:x,toast:v,unstyled:w,interacting:E,setHeights:j,visibleToasts:S,heights:N,index:D,toasts:A,expanded:O,removeToast:C,defaultRichColors:T,closeButton:U,style:L,cancelButtonStyle:V,actionButtonStyle:fe,className:ge="",descriptionClassName:pe="",duration:ae,position:le,gap:he,expandByDefault:be,classNames:R,icons:P,closeButtonAriaLabel:I="Close toast"}=e,[ee,me]=Q.useState(null),[Re,G]=Q.useState(null),[Y,ie]=Q.useState(!1),[oe,ve]=Q.useState(!1),[W,xe]=Q.useState(!1),[Oe,Ue]=Q.useState(!1),[Ye,Ze]=Q.useState(!1),[Kt,B]=Q.useState(0),[qe,ke]=Q.useState(0),Qe=Q.useRef(v.duration||ae||Gb),Ga=Q.useRef(null),jn=Q.useRef(null),z=D===0,$=D+1<=S,Z=v.type,ye=v.dismissible!==!1,ce=v.className||"",ue=v.descriptionClassName||"",De=Q.useMemo(()=>N.findIndex(Ge=>Ge.toastId===v.id)||0,[N,v.id]),lt=Q.useMemo(()=>{var Ge;return(Ge=v.closeButton)!=null?Ge:U},[v.closeButton,U]),ct=Q.useMemo(()=>v.duration||ae||Gb,[v.duration,ae]),sn=Q.useRef(0),kn=Q.useRef(0),Zn=Q.useRef(0),Xa=Q.useRef(null),[Na,Jt]=le.split("-"),Yn=Q.useMemo(()=>N.reduce((Ge,Tt,ln)=>ln>=De?Ge:Ge+Tt.height,0),[N,De]),Wt=H2(),As=v.invert||x,Ir=Z==="loading";kn.current=Q.useMemo(()=>De*he+Yn,[De,Yn]),Q.useEffect(()=>{Qe.current=ct},[ct]),Q.useEffect(()=>{ie(!0)},[]),Q.useEffect(()=>{const Ge=jn.current;if(Ge){const Tt=Ge.getBoundingClientRect().height;return ke(Tt),j(ln=>[{toastId:v.id,height:Tt,position:v.position},...ln]),()=>j(ln=>ln.filter(Rn=>Rn.toastId!==v.id))}},[j,v.id]),Q.useLayoutEffect(()=>{if(!Y)return;const Ge=jn.current,Tt=Ge.style.height;Ge.style.height="auto";const ln=Ge.getBoundingClientRect().height;Ge.style.height=Tt,ke(ln),j(Rn=>Rn.find(kt=>kt.toastId===v.id)?Rn.map(kt=>kt.toastId===v.id?{...kt,height:ln}:kt):[{toastId:v.id,height:ln,position:v.position},...Rn])},[Y,v.title,v.description,j,v.id,v.jsx,v.action,v.cancel]);const Za=Q.useCallback(()=>{ve(!0),B(kn.current),j(Ge=>Ge.filter(Tt=>Tt.toastId!==v.id)),setTimeout(()=>{C(v)},rN)},[v,C,j,kn]);Q.useEffect(()=>{if(v.promise&&Z==="loading"||v.duration===1/0||v.type==="loading")return;let Ge;return O||E||Wt?(()=>{if(Zn.current{Qe.current!==1/0&&(sn.current=new Date().getTime(),Ge=setTimeout(()=>{v.onAutoClose==null||v.onAutoClose.call(v,v),Za()},Qe.current))})(),()=>clearTimeout(Ge)},[O,E,v,Z,Wt,Za]),Q.useEffect(()=>{v.delete&&(Za(),v.onDismiss==null||v.onDismiss.call(v,v))},[Za,v.delete]);function co(){var Ge;if(P?.loading){var Tt;return Q.createElement("div",{className:tr(R?.loader,v==null||(Tt=v.classNames)==null?void 0:Tt.loader,"sonner-loader"),"data-visible":Z==="loading"},P.loading)}return Q.createElement(L2,{className:tr(R?.loader,v==null||(Ge=v.classNames)==null?void 0:Ge.loader),visible:Z==="loading"})}const uo=v.icon||P?.[Z]||K2(Z);var Ei,Ya;return Q.createElement("li",{tabIndex:0,ref:jn,className:tr(ge,ce,R?.toast,v==null||(t=v.classNames)==null?void 0:t.toast,R?.default,R?.[Z],v==null||(r=v.classNames)==null?void 0:r[Z]),"data-sonner-toast":"","data-rich-colors":(Ei=v.richColors)!=null?Ei:T,"data-styled":!(v.jsx||v.unstyled||w),"data-mounted":Y,"data-promise":!!v.promise,"data-swiped":Ye,"data-removed":oe,"data-visible":$,"data-y-position":Na,"data-x-position":Jt,"data-index":D,"data-front":z,"data-swiping":W,"data-dismissible":ye,"data-type":Z,"data-invert":As,"data-swipe-out":Oe,"data-swipe-direction":Re,"data-expanded":!!(O||be&&Y),"data-testid":v.testId,style:{"--index":D,"--toasts-before":D,"--z-index":A.length-D,"--offset":`${oe?Kt:kn.current}px`,"--initial-height":be?"auto":`${qe}px`,...L,...v.style},onDragEnd:()=>{xe(!1),me(null),Xa.current=null},onPointerDown:Ge=>{Ge.button!==2&&(Ir||!ye||(Ga.current=new Date,B(kn.current),Ge.target.setPointerCapture(Ge.pointerId),Ge.target.tagName!=="BUTTON"&&(xe(!0),Xa.current={x:Ge.clientX,y:Ge.clientY})))},onPointerUp:()=>{var Ge,Tt,ln;if(Oe||!ye)return;Xa.current=null;const Rn=Number(((Ge=jn.current)==null?void 0:Ge.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Lr=Number(((Tt=jn.current)==null?void 0:Tt.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),kt=new Date().getTime()-((ln=Ga.current)==null?void 0:ln.getTime()),Pn=ee==="x"?Rn:Lr,Ci=Math.abs(Pn)/kt;if(Math.abs(Pn)>=aN||Ci>.11){B(kn.current),v.onDismiss==null||v.onDismiss.call(v,v),G(ee==="x"?Rn>0?"right":"left":Lr>0?"down":"up"),Za(),Ue(!0);return}else{var Kn,In;(Kn=jn.current)==null||Kn.style.setProperty("--swipe-amount-x","0px"),(In=jn.current)==null||In.style.setProperty("--swipe-amount-y","0px")}Ze(!1),xe(!1),me(null)},onPointerMove:Ge=>{var Tt,ln,Rn;if(!Xa.current||!ye||((Tt=window.getSelection())==null?void 0:Tt.toString().length)>0)return;const kt=Ge.clientY-Xa.current.y,Pn=Ge.clientX-Xa.current.x;var Ci;const Kn=(Ci=e.swipeDirections)!=null?Ci:iN(le);!ee&&(Math.abs(Pn)>1||Math.abs(kt)>1)&&me(Math.abs(Pn)>Math.abs(kt)?"x":"y");let In={x:0,y:0};const fo=Aa=>1/(1.5+Math.abs(Aa)/20);if(ee==="y"){if(Kn.includes("top")||Kn.includes("bottom"))if(Kn.includes("top")&&kt<0||Kn.includes("bottom")&&kt>0)In.y=kt;else{const Aa=kt*fo(kt);In.y=Math.abs(Aa)0)In.x=Pn;else{const Aa=Pn*fo(Pn);In.x=Math.abs(Aa)0||Math.abs(In.y)>0)&&Ze(!0),(ln=jn.current)==null||ln.style.setProperty("--swipe-amount-x",`${In.x}px`),(Rn=jn.current)==null||Rn.style.setProperty("--swipe-amount-y",`${In.y}px`)}},lt&&!v.jsx&&Z!=="loading"?Q.createElement("button",{"aria-label":I,"data-disabled":Ir,"data-close-button":!0,onClick:Ir||!ye?()=>{}:()=>{Za(),v.onDismiss==null||v.onDismiss.call(v,v)},className:tr(R?.closeButton,v==null||(i=v.classNames)==null?void 0:i.closeButton)},(Ya=P?.close)!=null?Ya:V2):null,(Z||v.icon||v.promise)&&v.icon!==null&&(P?.[Z]!==null||v.icon)?Q.createElement("div",{"data-icon":"",className:tr(R?.icon,v==null||(s=v.classNames)==null?void 0:s.icon)},v.promise||v.type==="loading"&&!v.icon?v.icon||co():null,v.type!=="loading"?uo:null):null,Q.createElement("div",{"data-content":"",className:tr(R?.content,v==null||(u=v.classNames)==null?void 0:u.content)},Q.createElement("div",{"data-title":"",className:tr(R?.title,v==null||(d=v.classNames)==null?void 0:d.title)},v.jsx?v.jsx:typeof v.title=="function"?v.title():v.title),v.description?Q.createElement("div",{"data-description":"",className:tr(pe,ue,R?.description,v==null||(h=v.classNames)==null?void 0:h.description)},typeof v.description=="function"?v.description():v.description):null),Q.isValidElement(v.cancel)?v.cancel:v.cancel&&Ou(v.cancel)?Q.createElement("button",{"data-button":!0,"data-cancel":!0,style:v.cancelButtonStyle||V,onClick:Ge=>{Ou(v.cancel)&&ye&&(v.cancel.onClick==null||v.cancel.onClick.call(v.cancel,Ge),Za())},className:tr(R?.cancelButton,v==null||(g=v.classNames)==null?void 0:g.cancelButton)},v.cancel.label):null,Q.isValidElement(v.action)?v.action:v.action&&Ou(v.action)?Q.createElement("button",{"data-button":!0,"data-action":!0,style:v.actionButtonStyle||fe,onClick:Ge=>{Ou(v.action)&&(v.action.onClick==null||v.action.onClick.call(v.action,Ge),!Ge.defaultPrevented&&Za())},className:tr(R?.actionButton,v==null||(y=v.classNames)==null?void 0:y.actionButton)},v.action.label):null)};function Xb(){if(typeof window>"u"||typeof document>"u")return"ltr";const e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function sN(e,t){const r={};return[e,t].forEach((i,s)=>{const u=s===1,d=u?"--mobile-offset":"--offset",h=u?eN:W2;function g(y){["top","right","bottom","left"].forEach(x=>{r[`${d}-${x}`]=typeof y=="number"?`${y}px`:y})}typeof i=="number"||typeof i=="string"?g(i):typeof i=="object"?["top","right","bottom","left"].forEach(y=>{i[y]===void 0?r[`${d}-${y}`]=h:r[`${d}-${y}`]=typeof i[y]=="number"?`${i[y]}px`:i[y]}):g(h)}),r}const lN=Q.forwardRef(function(t,r){const{id:i,invert:s,position:u="bottom-right",hotkey:d=["altKey","KeyT"],expand:h,closeButton:g,className:y,offset:x,mobileOffset:v,theme:w="light",richColors:E,duration:j,style:S,visibleToasts:N=J2,toastOptions:D,dir:A=Xb(),gap:O=nN,icons:C,containerAriaLabel:T="Notifications"}=t,[U,L]=Q.useState([]),V=Q.useMemo(()=>i?U.filter(Y=>Y.toasterId===i):U.filter(Y=>!Y.toasterId),[U,i]),fe=Q.useMemo(()=>Array.from(new Set([u].concat(V.filter(Y=>Y.position).map(Y=>Y.position)))),[V,u]),[ge,pe]=Q.useState([]),[ae,le]=Q.useState(!1),[he,be]=Q.useState(!1),[R,P]=Q.useState(w!=="system"?w:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),I=Q.useRef(null),ee=d.join("+").replace(/Key/g,"").replace(/Digit/g,""),me=Q.useRef(null),Re=Q.useRef(!1),G=Q.useCallback(Y=>{L(ie=>{var oe;return(oe=ie.find(ve=>ve.id===Y.id))!=null&&oe.delete||Bn.dismiss(Y.id),ie.filter(({id:ve})=>ve!==Y.id)})},[]);return Q.useEffect(()=>Bn.subscribe(Y=>{if(Y.dismiss){requestAnimationFrame(()=>{L(ie=>ie.map(oe=>oe.id===Y.id?{...oe,delete:!0}:oe))});return}setTimeout(()=>{U0.flushSync(()=>{L(ie=>{const oe=ie.findIndex(ve=>ve.id===Y.id);return oe!==-1?[...ie.slice(0,oe),{...ie[oe],...Y},...ie.slice(oe+1)]:[Y,...ie]})})})}),[U]),Q.useEffect(()=>{if(w!=="system"){P(w);return}if(w==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?P("dark"):P("light")),typeof window>"u")return;const Y=window.matchMedia("(prefers-color-scheme: dark)");try{Y.addEventListener("change",({matches:ie})=>{P(ie?"dark":"light")})}catch{Y.addListener(({matches:oe})=>{try{P(oe?"dark":"light")}catch(ve){console.error(ve)}})}},[w]),Q.useEffect(()=>{U.length<=1&&le(!1)},[U]),Q.useEffect(()=>{const Y=ie=>{var oe;if(d.every(xe=>ie[xe]||ie.code===xe)){var W;le(!0),(W=I.current)==null||W.focus()}ie.code==="Escape"&&(document.activeElement===I.current||(oe=I.current)!=null&&oe.contains(document.activeElement))&&le(!1)};return document.addEventListener("keydown",Y),()=>document.removeEventListener("keydown",Y)},[d]),Q.useEffect(()=>{if(I.current)return()=>{me.current&&(me.current.focus({preventScroll:!0}),me.current=null,Re.current=!1)}},[I.current]),Q.createElement("section",{ref:r,"aria-label":`${T} ${ee}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},fe.map((Y,ie)=>{var oe;const[ve,W]=Y.split("-");return V.length?Q.createElement("ol",{key:Y,dir:A==="auto"?Xb():A,tabIndex:-1,ref:I,className:y,"data-sonner-toaster":!0,"data-sonner-theme":R,"data-y-position":ve,"data-x-position":W,style:{"--front-toast-height":`${((oe=ge[0])==null?void 0:oe.height)||0}px`,"--width":`${tN}px`,"--gap":`${O}px`,...S,...sN(x,v)},onBlur:xe=>{Re.current&&!xe.currentTarget.contains(xe.relatedTarget)&&(Re.current=!1,me.current&&(me.current.focus({preventScroll:!0}),me.current=null))},onFocus:xe=>{xe.target instanceof HTMLElement&&xe.target.dataset.dismissible==="false"||Re.current||(Re.current=!0,me.current=xe.relatedTarget)},onMouseEnter:()=>le(!0),onMouseMove:()=>le(!0),onMouseLeave:()=>{he||le(!1)},onDragEnd:()=>le(!1),onPointerDown:xe=>{xe.target instanceof HTMLElement&&xe.target.dataset.dismissible==="false"||be(!0)},onPointerUp:()=>be(!1)},V.filter(xe=>!xe.position&&ie===0||xe.position===Y).map((xe,Oe)=>{var Ue,Ye;return Q.createElement(oN,{key:xe.id,icons:C,index:Oe,toast:xe,defaultRichColors:E,duration:(Ue=D?.duration)!=null?Ue:j,className:D?.className,descriptionClassName:D?.descriptionClassName,invert:s,visibleToasts:N,closeButton:(Ye=D?.closeButton)!=null?Ye:g,interacting:he,position:Y,style:D?.style,unstyled:D?.unstyled,classNames:D?.classNames,cancelButtonStyle:D?.cancelButtonStyle,actionButtonStyle:D?.actionButtonStyle,closeButtonAriaLabel:D?.closeButtonAriaLabel,removeToast:G,toasts:V.filter(Ze=>Ze.position==xe.position),heights:ge.filter(Ze=>Ze.position==xe.position),setHeights:pe,expandByDefault:h,gap:O,expanded:ae,swipeDirections:t.swipeDirections})})):null}))}),cN=({...e})=>{const{theme:t="system"}=BR();return l.jsx(lN,{theme:t,className:"toaster group",icons:{success:l.jsx(JO,{className:"size-4"}),info:l.jsx(d2,{className:"size-4"}),warning:l.jsx(T2,{className:"size-4"}),error:l.jsx(y2,{className:"size-4"}),loading:l.jsx(ps,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},...e})},uN=new SO,dN=({children:e})=>l.jsx(_O,{client:uN,children:l.jsxs(WR,{defaultTheme:"system",storageKey:"dragon-theme",children:[e,l.jsx(cN,{richColors:!0,expand:!0,position:"top-center"})]})});var Sm={exports:{}},wl={},_m={exports:{}},Em={};var Zb;function fN(){return Zb||(Zb=1,(function(e){function t(R,P){var I=R.length;R.push(P);e:for(;0>>1,me=R[ee];if(0>>1;ees(Y,I))ies(oe,Y)?(R[ee]=oe,R[ie]=I,ee=ie):(R[ee]=Y,R[G]=I,ee=G);else if(ies(oe,I))R[ee]=oe,R[ie]=I,ee=ie;else break e}}return P}function s(R,P){var I=R.sortIndex-P.sortIndex;return I!==0?I:R.id-P.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var u=performance;e.unstable_now=function(){return u.now()}}else{var d=Date,h=d.now();e.unstable_now=function(){return d.now()-h}}var g=[],y=[],x=1,v=null,w=3,E=!1,j=!1,S=!1,N=!1,D=typeof setTimeout=="function"?setTimeout:null,A=typeof clearTimeout=="function"?clearTimeout:null,O=typeof setImmediate<"u"?setImmediate:null;function C(R){for(var P=r(y);P!==null;){if(P.callback===null)i(y);else if(P.startTime<=R)i(y),P.sortIndex=P.expirationTime,t(g,P);else break;P=r(y)}}function T(R){if(S=!1,C(R),!j)if(r(g)!==null)j=!0,U||(U=!0,ae());else{var P=r(y);P!==null&&be(T,P.startTime-R)}}var U=!1,L=-1,V=5,fe=-1;function ge(){return N?!0:!(e.unstable_now()-feR&&ge());){var ee=v.callback;if(typeof ee=="function"){v.callback=null,w=v.priorityLevel;var me=ee(v.expirationTime<=R);if(R=e.unstable_now(),typeof me=="function"){v.callback=me,C(R),P=!0;break t}v===r(g)&&i(g),C(R)}else i(g);v=r(g)}if(v!==null)P=!0;else{var Re=r(y);Re!==null&&be(T,Re.startTime-R),P=!1}}break e}finally{v=null,w=I,E=!1}P=void 0}}finally{P?ae():U=!1}}}var ae;if(typeof O=="function")ae=function(){O(pe)};else if(typeof MessageChannel<"u"){var le=new MessageChannel,he=le.port2;le.port1.onmessage=pe,ae=function(){he.postMessage(null)}}else ae=function(){D(pe,0)};function be(R,P){L=D(function(){R(e.unstable_now())},P)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(R){R.callback=null},e.unstable_forceFrameRate=function(R){0>R||125ee?(R.sortIndex=I,t(y,R),r(g)===null&&R===r(y)&&(S?(A(L),L=-1):S=!0,be(T,I-ee))):(R.sortIndex=me,t(g,R),j||E||(j=!0,U||(U=!0,ae()))),R},e.unstable_shouldYield=ge,e.unstable_wrapCallback=function(R){var P=w;return function(){var I=w;w=P;try{return R.apply(this,arguments)}finally{w=I}}}})(Em)),Em}var Yb;function hN(){return Yb||(Yb=1,_m.exports=fN()),_m.exports}var Qb;function mN(){if(Qb)return wl;Qb=1;var e=hN(),t=q0(),r=PR();function i(n){var a="https://react.dev/errors/"+n;if(1me||(n.current=ee[me],ee[me]=null,me--)}function Y(n,a){me++,ee[me]=n.current,n.current=a}var ie=Re(null),oe=Re(null),ve=Re(null),W=Re(null);function xe(n,a){switch(Y(ve,a),Y(oe,n),Y(ie,null),a.nodeType){case 9:case 11:n=(n=a.documentElement)&&(n=n.namespaceURI)?tb(n):0;break;default:if(n=a.tagName,a=a.namespaceURI)a=tb(a),n=nb(a,n);else switch(n){case"svg":n=1;break;case"math":n=2;break;default:n=0}}G(ie),Y(ie,n)}function Oe(){G(ie),G(oe),G(ve)}function Ue(n){n.memoizedState!==null&&Y(W,n);var a=ie.current,o=nb(a,n.type);a!==o&&(Y(oe,n),Y(ie,o))}function Ye(n){oe.current===n&&(G(ie),G(oe)),W.current===n&&(G(W),gl._currentValue=I)}var Ze,Kt;function B(n){if(Ze===void 0)try{throw Error()}catch(o){var a=o.stack.trim().match(/\n( *(at )?)/);Ze=a&&a[1]||"",Kt=-1)":-1f||M[c]!==F[f]){var J=` -`+M[c].replace(" at new "," at ");return n.displayName&&J.includes("")&&(J=J.replace("",n.displayName)),J}while(1<=c&&0<=f);break}}}finally{qe=!1,Error.prepareStackTrace=o}return(o=n?n.displayName||n.name:"")?B(o):""}function Qe(n,a){switch(n.tag){case 26:case 27:case 5:return B(n.type);case 16:return B("Lazy");case 13:return n.child!==a&&a!==null?B("Suspense Fallback"):B("Suspense");case 19:return B("SuspenseList");case 0:case 15:return ke(n.type,!1);case 11:return ke(n.type.render,!1);case 1:return ke(n.type,!0);case 31:return B("Activity");default:return""}}function Ga(n){try{var a="",o=null;do a+=Qe(n,o),o=n,n=n.return;while(n);return a}catch(c){return` -Error generating stack: `+c.message+` -`+c.stack}}var jn=Object.prototype.hasOwnProperty,z=e.unstable_scheduleCallback,$=e.unstable_cancelCallback,Z=e.unstable_shouldYield,ye=e.unstable_requestPaint,ce=e.unstable_now,ue=e.unstable_getCurrentPriorityLevel,De=e.unstable_ImmediatePriority,lt=e.unstable_UserBlockingPriority,ct=e.unstable_NormalPriority,sn=e.unstable_LowPriority,kn=e.unstable_IdlePriority,Zn=e.log,Xa=e.unstable_setDisableYieldValue,Na=null,Jt=null;function Yn(n){if(typeof Zn=="function"&&Xa(n),Jt&&typeof Jt.setStrictMode=="function")try{Jt.setStrictMode(Na,n)}catch{}}var Wt=Math.clz32?Math.clz32:Za,As=Math.log,Ir=Math.LN2;function Za(n){return n>>>=0,n===0?32:31-(As(n)/Ir|0)|0}var co=256,uo=262144,Ei=4194304;function Ya(n){var a=n&42;if(a!==0)return a;switch(n&-n){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return n&261888;case 262144:case 524288:case 1048576:case 2097152:return n&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return n&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return n}}function Ge(n,a,o){var c=n.pendingLanes;if(c===0)return 0;var f=0,m=n.suspendedLanes,b=n.pingedLanes;n=n.warmLanes;var _=c&134217727;return _!==0?(c=_&~m,c!==0?f=Ya(c):(b&=_,b!==0?f=Ya(b):o||(o=_&~n,o!==0&&(f=Ya(o))))):(_=c&~m,_!==0?f=Ya(_):b!==0?f=Ya(b):o||(o=c&~n,o!==0&&(f=Ya(o)))),f===0?0:a!==0&&a!==f&&(a&m)===0&&(m=f&-f,o=a&-a,m>=o||m===32&&(o&4194048)!==0)?a:f}function Tt(n,a){return(n.pendingLanes&~(n.suspendedLanes&~n.pingedLanes)&a)===0}function ln(n,a){switch(n){case 1:case 2:case 4:case 8:case 64:return a+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Rn(){var n=Ei;return Ei<<=1,(Ei&62914560)===0&&(Ei=4194304),n}function Lr(n){for(var a=[],o=0;31>o;o++)a.push(n);return a}function kt(n,a){n.pendingLanes|=a,a!==268435456&&(n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0)}function Pn(n,a,o,c,f,m){var b=n.pendingLanes;n.pendingLanes=o,n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0,n.expiredLanes&=o,n.entangledLanes&=o,n.errorRecoveryDisabledLanes&=o,n.shellSuspendCounter=0;var _=n.entanglements,M=n.expirationTimes,F=n.hiddenUpdates;for(o=b&~o;0"u")return null;try{return n.activeElement||n.body}catch{return n.body}}var AC=/[\n"\\]/g;function ma(n){return n.replace(AC,function(a){return"\\"+a.charCodeAt(0).toString(16)+" "})}function hf(n,a,o,c,f,m,b,_){n.name="",b!=null&&typeof b!="function"&&typeof b!="symbol"&&typeof b!="boolean"?n.type=b:n.removeAttribute("type"),a!=null?b==="number"?(a===0&&n.value===""||n.value!=a)&&(n.value=""+ha(a)):n.value!==""+ha(a)&&(n.value=""+ha(a)):b!=="submit"&&b!=="reset"||n.removeAttribute("value"),a!=null?mf(n,b,ha(a)):o!=null?mf(n,b,ha(o)):c!=null&&n.removeAttribute("value"),f==null&&m!=null&&(n.defaultChecked=!!m),f!=null&&(n.checked=f&&typeof f!="function"&&typeof f!="symbol"),_!=null&&typeof _!="function"&&typeof _!="symbol"&&typeof _!="boolean"?n.name=""+ha(_):n.removeAttribute("name")}function Zg(n,a,o,c,f,m,b,_){if(m!=null&&typeof m!="function"&&typeof m!="symbol"&&typeof m!="boolean"&&(n.type=m),a!=null||o!=null){if(!(m!=="submit"&&m!=="reset"||a!=null)){ff(n);return}o=o!=null?""+ha(o):"",a=a!=null?""+ha(a):o,_||a===n.value||(n.value=a),n.defaultValue=a}c=c??f,c=typeof c!="function"&&typeof c!="symbol"&&!!c,n.checked=_?n.checked:!!c,n.defaultChecked=!!c,b!=null&&typeof b!="function"&&typeof b!="symbol"&&typeof b!="boolean"&&(n.name=b),ff(n)}function mf(n,a,o){a==="number"&&pc(n.ownerDocument)===n||n.defaultValue===""+o||(n.defaultValue=""+o)}function vo(n,a,o,c){if(n=n.options,a){a={};for(var f=0;f"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),xf=!1;if(mr)try{var zs={};Object.defineProperty(zs,"passive",{get:function(){xf=!0}}),window.addEventListener("test",zs,zs),window.removeEventListener("test",zs,zs)}catch{xf=!1}var qr=null,bf=null,yc=null;function ny(){if(yc)return yc;var n,a=bf,o=a.length,c,f="value"in qr?qr.value:qr.textContent,m=f.length;for(n=0;n=Ks),ly=" ",cy=!1;function uy(n,a){switch(n){case"keyup":return rj.indexOf(a.keyCode)!==-1;case"keydown":return a.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function dy(n){return n=n.detail,typeof n=="object"&&"data"in n?n.data:null}var So=!1;function oj(n,a){switch(n){case"compositionend":return dy(a);case"keypress":return a.which!==32?null:(cy=!0,ly);case"textInput":return n=a.data,n===ly&&cy?null:n;default:return null}}function sj(n,a){if(So)return n==="compositionend"||!Cf&&uy(n,a)?(n=ny(),yc=bf=qr=null,So=!1,n):null;switch(n){case"paste":return null;case"keypress":if(!(a.ctrlKey||a.altKey||a.metaKey)||a.ctrlKey&&a.altKey){if(a.char&&1=a)return{node:o,offset:a-n};n=c}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=xy(o)}}function wy(n,a){return n&&a?n===a?!0:n&&n.nodeType===3?!1:a&&a.nodeType===3?wy(n,a.parentNode):"contains"in n?n.contains(a):n.compareDocumentPosition?!!(n.compareDocumentPosition(a)&16):!1:!1}function Sy(n){n=n!=null&&n.ownerDocument!=null&&n.ownerDocument.defaultView!=null?n.ownerDocument.defaultView:window;for(var a=pc(n.document);a instanceof n.HTMLIFrameElement;){try{var o=typeof a.contentWindow.location.href=="string"}catch{o=!1}if(o)n=a.contentWindow;else break;a=pc(n.document)}return a}function Of(n){var a=n&&n.nodeName&&n.nodeName.toLowerCase();return a&&(a==="input"&&(n.type==="text"||n.type==="search"||n.type==="tel"||n.type==="url"||n.type==="password")||a==="textarea"||n.contentEditable==="true")}var pj=mr&&"documentMode"in document&&11>=document.documentMode,_o=null,Nf=null,qs=null,Af=!1;function _y(n,a,o){var c=o.window===o?o.document:o.nodeType===9?o:o.ownerDocument;Af||_o==null||_o!==pc(c)||(c=_o,"selectionStart"in c&&Of(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}),qs&&Us(qs,c)||(qs=c,c=uu(Nf,"onSelect"),0>=b,f-=b,Qa=1<<32-Wt(a)+f|o<We?(ot=Me,Me=null):ot=Me.sibling;var ht=H(K,Me,q[We],te);if(ht===null){Me===null&&(Me=ot);break}n&&Me&&ht.alternate===null&&a(K,Me),k=m(ht,k,We),ft===null?Ke=ht:ft.sibling=ht,ft=ht,Me=ot}if(We===q.length)return o(K,Me),st&&gr(K,We),Ke;if(Me===null){for(;WeWe?(ot=Me,Me=null):ot=Me.sibling;var ci=H(K,Me,ht.value,te);if(ci===null){Me===null&&(Me=ot);break}n&&Me&&ci.alternate===null&&a(K,Me),k=m(ci,k,We),ft===null?Ke=ci:ft.sibling=ci,ft=ci,Me=ot}if(ht.done)return o(K,Me),st&&gr(K,We),Ke;if(Me===null){for(;!ht.done;We++,ht=q.next())ht=ne(K,ht.value,te),ht!==null&&(k=m(ht,k,We),ft===null?Ke=ht:ft.sibling=ht,ft=ht);return st&&gr(K,We),Ke}for(Me=c(Me);!ht.done;We++,ht=q.next())ht=X(Me,K,We,ht.value,te),ht!==null&&(n&&ht.alternate!==null&&Me.delete(ht.key===null?We:ht.key),k=m(ht,k,We),ft===null?Ke=ht:ft.sibling=ht,ft=ht);return n&&Me.forEach(function(kR){return a(K,kR)}),st&&gr(K,We),Ke}function St(K,k,q,te){if(typeof q=="object"&&q!==null&&q.type===S&&q.key===null&&(q=q.props.children),typeof q=="object"&&q!==null){switch(q.$$typeof){case E:e:{for(var Ke=q.key;k!==null;){if(k.key===Ke){if(Ke=q.type,Ke===S){if(k.tag===7){o(K,k.sibling),te=f(k,q.props.children),te.return=K,K=te;break e}}else if(k.elementType===Ke||typeof Ke=="object"&&Ke!==null&&Ke.$$typeof===V&&Pi(Ke)===k.type){o(K,k.sibling),te=f(k,q.props),Gs(te,q),te.return=K,K=te;break e}o(K,k);break}else a(K,k);k=k.sibling}q.type===S?(te=Ti(q.props.children,K.mode,te,q.key),te.return=K,K=te):(te=Rc(q.type,q.key,q.props,null,K.mode,te),Gs(te,q),te.return=K,K=te)}return b(K);case j:e:{for(Ke=q.key;k!==null;){if(k.key===Ke)if(k.tag===4&&k.stateNode.containerInfo===q.containerInfo&&k.stateNode.implementation===q.implementation){o(K,k.sibling),te=f(k,q.children||[]),te.return=K,K=te;break e}else{o(K,k);break}else a(K,k);k=k.sibling}te=Kf(q,K.mode,te),te.return=K,K=te}return b(K);case V:return q=Pi(q),St(K,k,q,te)}if(be(q))return je(K,k,q,te);if(ae(q)){if(Ke=ae(q),typeof Ke!="function")throw Error(i(150));return q=Ke.call(q),Le(K,k,q,te)}if(typeof q.then=="function")return St(K,k,zc(q),te);if(q.$$typeof===O)return St(K,k,Ac(K,q),te);kc(K,q)}return typeof q=="string"&&q!==""||typeof q=="number"||typeof q=="bigint"?(q=""+q,k!==null&&k.tag===6?(o(K,k.sibling),te=f(k,q),te.return=K,K=te):(o(K,k),te=Pf(q,K.mode,te),te.return=K,K=te),b(K)):o(K,k)}return function(K,k,q,te){try{Bs=0;var Ke=St(K,k,q,te);return zo=null,Ke}catch(Me){if(Me===Mo||Me===Dc)throw Me;var ft=Jn(29,Me,null,K.mode);return ft.lanes=te,ft.return=K,ft}finally{}}}var Ii=By(!0),Gy=By(!1),Br=!1;function Zf(n){n.updateQueue={baseState:n.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Yf(n,a){n=n.updateQueue,a.updateQueue===n&&(a.updateQueue={baseState:n.baseState,firstBaseUpdate:n.firstBaseUpdate,lastBaseUpdate:n.lastBaseUpdate,shared:n.shared,callbacks:null})}function Gr(n){return{lane:n,tag:0,payload:null,callback:null,next:null}}function Xr(n,a,o){var c=n.updateQueue;if(c===null)return null;if(c=c.shared,(gt&2)!==0){var f=c.pending;return f===null?a.next=a:(a.next=f.next,f.next=a),c.pending=a,a=jc(n),Ay(n,null,o),a}return Cc(n,c,a,o),jc(n)}function Xs(n,a,o){if(a=a.updateQueue,a!==null&&(a=a.shared,(o&4194048)!==0)){var c=a.lanes;c&=n.pendingLanes,o|=c,a.lanes=o,Kn(n,o)}}function Qf(n,a){var o=n.updateQueue,c=n.alternate;if(c!==null&&(c=c.updateQueue,o===c)){var f=null,m=null;if(o=o.firstBaseUpdate,o!==null){do{var b={lane:o.lane,tag:o.tag,payload:o.payload,callback:null,next:null};m===null?f=m=b:m=m.next=b,o=o.next}while(o!==null);m===null?f=m=a:m=m.next=a}else f=m=a;o={baseState:c.baseState,firstBaseUpdate:f,lastBaseUpdate:m,shared:c.shared,callbacks:c.callbacks},n.updateQueue=o;return}n=o.lastBaseUpdate,n===null?o.firstBaseUpdate=a:n.next=a,o.lastBaseUpdate=a}var Jf=!1;function Zs(){if(Jf){var n=Do;if(n!==null)throw n}}function Ys(n,a,o,c){Jf=!1;var f=n.updateQueue;Br=!1;var m=f.firstBaseUpdate,b=f.lastBaseUpdate,_=f.shared.pending;if(_!==null){f.shared.pending=null;var M=_,F=M.next;M.next=null,b===null?m=F:b.next=F,b=M;var J=n.alternate;J!==null&&(J=J.updateQueue,_=J.lastBaseUpdate,_!==b&&(_===null?J.firstBaseUpdate=F:_.next=F,J.lastBaseUpdate=M))}if(m!==null){var ne=f.baseState;b=0,J=F=M=null,_=m;do{var H=_.lane&-536870913,X=H!==_.lane;if(X?(it&H)===H:(c&H)===H){H!==0&&H===To&&(Jf=!0),J!==null&&(J=J.next={lane:0,tag:_.tag,payload:_.payload,callback:null,next:null});e:{var je=n,Le=_;H=a;var St=o;switch(Le.tag){case 1:if(je=Le.payload,typeof je=="function"){ne=je.call(St,ne,H);break e}ne=je;break e;case 3:je.flags=je.flags&-65537|128;case 0:if(je=Le.payload,H=typeof je=="function"?je.call(St,ne,H):je,H==null)break e;ne=v({},ne,H);break e;case 2:Br=!0}}H=_.callback,H!==null&&(n.flags|=64,X&&(n.flags|=8192),X=f.callbacks,X===null?f.callbacks=[H]:X.push(H))}else X={lane:H,tag:_.tag,payload:_.payload,callback:_.callback,next:null},J===null?(F=J=X,M=ne):J=J.next=X,b|=H;if(_=_.next,_===null){if(_=f.shared.pending,_===null)break;X=_,_=X.next,X.next=null,f.lastBaseUpdate=X,f.shared.pending=null}}while(!0);J===null&&(M=ne),f.baseState=M,f.firstBaseUpdate=F,f.lastBaseUpdate=J,m===null&&(f.shared.lanes=0),Wr|=b,n.lanes=b,n.memoizedState=ne}}function Xy(n,a){if(typeof n!="function")throw Error(i(191,n));n.call(a)}function Zy(n,a){var o=n.callbacks;if(o!==null)for(n.callbacks=null,n=0;nm?m:8;var b=R.T,_={};R.T=_,yh(n,!1,a,o);try{var M=f(),F=R.S;if(F!==null&&F(_,M),M!==null&&typeof M=="object"&&typeof M.then=="function"){var J=Ej(M,c);Ws(n,a,J,aa(n))}else Ws(n,a,c,aa(n))}catch(ne){Ws(n,a,{then:function(){},status:"rejected",reason:ne},aa())}finally{P.p=m,b!==null&&_.types!==null&&(b.types=_.types),R.T=b}}function Aj(){}function ph(n,a,o,c){if(n.tag!==5)throw Error(i(476));var f=Rv(n).queue;jv(n,f,a,I,o===null?Aj:function(){return Ov(n),o(c)})}function Rv(n){var a=n.memoizedState;if(a!==null)return a;a={memoizedState:I,baseState:I,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:br,lastRenderedState:I},next:null};var o={};return a.next={memoizedState:o,baseState:o,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:br,lastRenderedState:o},next:null},n.memoizedState=a,n=n.alternate,n!==null&&(n.memoizedState=a),a}function Ov(n){var a=Rv(n);a.next===null&&(a=n.alternate.memoizedState),Ws(n,a.next.queue,{},aa())}function gh(){return yn(gl)}function Nv(){return Ft().memoizedState}function Av(){return Ft().memoizedState}function Tj(n){for(var a=n.return;a!==null;){switch(a.tag){case 24:case 3:var o=aa();n=Gr(o);var c=Xr(a,n,o);c!==null&&(Hn(c,a,o),Xs(c,a,o)),a={cache:Hf()},n.payload=a;return}a=a.return}}function Dj(n,a,o){var c=aa();o={lane:c,revertLane:0,gesture:null,action:o,hasEagerState:!1,eagerState:null,next:null},Hc(n)?Dv(a,o):(o=zf(n,a,o,c),o!==null&&(Hn(o,n,c),Mv(o,a,c)))}function Tv(n,a,o){var c=aa();Ws(n,a,o,c)}function Ws(n,a,o,c){var f={lane:c,revertLane:0,gesture:null,action:o,hasEagerState:!1,eagerState:null,next:null};if(Hc(n))Dv(a,f);else{var m=n.alternate;if(n.lanes===0&&(m===null||m.lanes===0)&&(m=a.lastRenderedReducer,m!==null))try{var b=a.lastRenderedState,_=m(b,o);if(f.hasEagerState=!0,f.eagerState=_,Qn(_,b))return Cc(n,a,f,0),_t===null&&Ec(),!1}catch{}finally{}if(o=zf(n,a,f,c),o!==null)return Hn(o,n,c),Mv(o,a,c),!0}return!1}function yh(n,a,o,c){if(c={lane:2,revertLane:Zh(),gesture:null,action:c,hasEagerState:!1,eagerState:null,next:null},Hc(n)){if(a)throw Error(i(479))}else a=zf(n,o,c,2),a!==null&&Hn(a,n,2)}function Hc(n){var a=n.alternate;return n===Je||a!==null&&a===Je}function Dv(n,a){Po=Ic=!0;var o=n.pending;o===null?a.next=a:(a.next=o.next,o.next=a),n.pending=a}function Mv(n,a,o){if((o&4194048)!==0){var c=a.lanes;c&=n.pendingLanes,o|=c,a.lanes=o,Kn(n,o)}}var el={readContext:yn,use:qc,useCallback:It,useContext:It,useEffect:It,useImperativeHandle:It,useLayoutEffect:It,useInsertionEffect:It,useMemo:It,useReducer:It,useRef:It,useState:It,useDebugValue:It,useDeferredValue:It,useTransition:It,useSyncExternalStore:It,useId:It,useHostTransitionStatus:It,useFormState:It,useActionState:It,useOptimistic:It,useMemoCache:It,useCacheRefresh:It};el.useEffectEvent=It;var zv={readContext:yn,use:qc,useCallback:function(n,a){return On().memoizedState=[n,a===void 0?null:a],n},useContext:yn,useEffect:yv,useImperativeHandle:function(n,a,o){o=o!=null?o.concat([n]):null,$c(4194308,4,wv.bind(null,a,n),o)},useLayoutEffect:function(n,a){return $c(4194308,4,n,a)},useInsertionEffect:function(n,a){$c(4,2,n,a)},useMemo:function(n,a){var o=On();a=a===void 0?null:a;var c=n();if(Li){Yn(!0);try{n()}finally{Yn(!1)}}return o.memoizedState=[c,a],c},useReducer:function(n,a,o){var c=On();if(o!==void 0){var f=o(a);if(Li){Yn(!0);try{o(a)}finally{Yn(!1)}}}else f=a;return c.memoizedState=c.baseState=f,n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:n,lastRenderedState:f},c.queue=n,n=n.dispatch=Dj.bind(null,Je,n),[c.memoizedState,n]},useRef:function(n){var a=On();return n={current:n},a.memoizedState=n},useState:function(n){n=uh(n);var a=n.queue,o=Tv.bind(null,Je,a);return a.dispatch=o,[n.memoizedState,o]},useDebugValue:hh,useDeferredValue:function(n,a){var o=On();return mh(o,n,a)},useTransition:function(){var n=uh(!1);return n=jv.bind(null,Je,n.queue,!0,!1),On().memoizedState=n,[!1,n]},useSyncExternalStore:function(n,a,o){var c=Je,f=On();if(st){if(o===void 0)throw Error(i(407));o=o()}else{if(o=a(),_t===null)throw Error(i(349));(it&127)!==0||tv(c,a,o)}f.memoizedState=o;var m={value:o,getSnapshot:a};return f.queue=m,yv(av.bind(null,c,m,n),[n]),c.flags|=2048,Io(9,{destroy:void 0},nv.bind(null,c,m,o,a),null),o},useId:function(){var n=On(),a=_t.identifierPrefix;if(st){var o=Ja,c=Qa;o=(c&~(1<<32-Wt(c)-1)).toString(32)+o,a="_"+a+"R_"+o,o=Lc++,0<\/script>",m=m.removeChild(m.firstChild);break;case"select":m=typeof c.is=="string"?b.createElement("select",{is:c.is}):b.createElement("select"),c.multiple?m.multiple=!0:c.size&&(m.size=c.size);break;default:m=typeof c.is=="string"?b.createElement(f,{is:c.is}):b.createElement(f)}}m[pn]=a,m[Ln]=c;e:for(b=a.child;b!==null;){if(b.tag===5||b.tag===6)m.appendChild(b.stateNode);else if(b.tag!==4&&b.tag!==27&&b.child!==null){b.child.return=b,b=b.child;continue}if(b===a)break e;for(;b.sibling===null;){if(b.return===null||b.return===a)break e;b=b.return}b.sibling.return=b.return,b=b.sibling}a.stateNode=m;e:switch(xn(m,f,c),f){case"button":case"input":case"select":case"textarea":c=!!c.autoFocus;break e;case"img":c=!0;break e;default:c=!1}c&&Sr(a)}}return At(a),Th(a,a.type,n===null?null:n.memoizedProps,a.pendingProps,o),null;case 6:if(n&&a.stateNode!=null)n.memoizedProps!==c&&Sr(a);else{if(typeof c!="string"&&a.stateNode===null)throw Error(i(166));if(n=ve.current,No(a)){if(n=a.stateNode,o=a.memoizedProps,c=null,f=gn,f!==null)switch(f.tag){case 27:case 5:c=f.memoizedProps}n[pn]=a,n=!!(n.nodeValue===o||c!==null&&c.suppressHydrationWarning===!0||Wx(n.nodeValue,o)),n||Vr(a,!0)}else n=du(n).createTextNode(c),n[pn]=a,a.stateNode=n}return At(a),null;case 31:if(o=a.memoizedState,n===null||n.memoizedState!==null){if(c=No(a),o!==null){if(n===null){if(!c)throw Error(i(318));if(n=a.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(i(557));n[pn]=a}else Di(),(a.flags&128)===0&&(a.memoizedState=null),a.flags|=4;At(a),n=!1}else o=qf(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=o),n=!0;if(!n)return a.flags&256?(ea(a),a):(ea(a),null);if((a.flags&128)!==0)throw Error(i(558))}return At(a),null;case 13:if(c=a.memoizedState,n===null||n.memoizedState!==null&&n.memoizedState.dehydrated!==null){if(f=No(a),c!==null&&c.dehydrated!==null){if(n===null){if(!f)throw Error(i(318));if(f=a.memoizedState,f=f!==null?f.dehydrated:null,!f)throw Error(i(317));f[pn]=a}else Di(),(a.flags&128)===0&&(a.memoizedState=null),a.flags|=4;At(a),f=!1}else f=qf(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=f),f=!0;if(!f)return a.flags&256?(ea(a),a):(ea(a),null)}return ea(a),(a.flags&128)!==0?(a.lanes=o,a):(o=c!==null,n=n!==null&&n.memoizedState!==null,o&&(c=a.child,f=null,c.alternate!==null&&c.alternate.memoizedState!==null&&c.alternate.memoizedState.cachePool!==null&&(f=c.alternate.memoizedState.cachePool.pool),m=null,c.memoizedState!==null&&c.memoizedState.cachePool!==null&&(m=c.memoizedState.cachePool.pool),m!==f&&(c.flags|=2048)),o!==n&&o&&(a.child.flags|=8192),Yc(a,a.updateQueue),At(a),null);case 4:return Oe(),n===null&&Wh(a.stateNode.containerInfo),At(a),null;case 10:return vr(a.type),At(a),null;case 19:if(G(qt),c=a.memoizedState,c===null)return At(a),null;if(f=(a.flags&128)!==0,m=c.rendering,m===null)if(f)nl(c,!1);else{if(Lt!==0||n!==null&&(n.flags&128)!==0)for(n=a.child;n!==null;){if(m=Kc(n),m!==null){for(a.flags|=128,nl(c,!1),n=m.updateQueue,a.updateQueue=n,Yc(a,n),a.subtreeFlags=0,n=o,o=a.child;o!==null;)Ty(o,n),o=o.sibling;return Y(qt,qt.current&1|2),st&&gr(a,c.treeForkCount),a.child}n=n.sibling}c.tail!==null&&ce()>tu&&(a.flags|=128,f=!0,nl(c,!1),a.lanes=4194304)}else{if(!f)if(n=Kc(m),n!==null){if(a.flags|=128,f=!0,n=n.updateQueue,a.updateQueue=n,Yc(a,n),nl(c,!0),c.tail===null&&c.tailMode==="hidden"&&!m.alternate&&!st)return At(a),null}else 2*ce()-c.renderingStartTime>tu&&o!==536870912&&(a.flags|=128,f=!0,nl(c,!1),a.lanes=4194304);c.isBackwards?(m.sibling=a.child,a.child=m):(n=c.last,n!==null?n.sibling=m:a.child=m,c.last=m)}return c.tail!==null?(n=c.tail,c.rendering=n,c.tail=n.sibling,c.renderingStartTime=ce(),n.sibling=null,o=qt.current,Y(qt,f?o&1|2:o&1),st&&gr(a,c.treeForkCount),n):(At(a),null);case 22:case 23:return ea(a),eh(),c=a.memoizedState!==null,n!==null?n.memoizedState!==null!==c&&(a.flags|=8192):c&&(a.flags|=8192),c?(o&536870912)!==0&&(a.flags&128)===0&&(At(a),a.subtreeFlags&6&&(a.flags|=8192)):At(a),o=a.updateQueue,o!==null&&Yc(a,o.retryQueue),o=null,n!==null&&n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(o=n.memoizedState.cachePool.pool),c=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(c=a.memoizedState.cachePool.pool),c!==o&&(a.flags|=2048),n!==null&&G(ki),null;case 24:return o=null,n!==null&&(o=n.memoizedState.cache),a.memoizedState.cache!==o&&(a.flags|=2048),vr(Vt),At(a),null;case 25:return null;case 30:return null}throw Error(i(156,a.tag))}function Kj(n,a){switch(Lf(a),a.tag){case 1:return n=a.flags,n&65536?(a.flags=n&-65537|128,a):null;case 3:return vr(Vt),Oe(),n=a.flags,(n&65536)!==0&&(n&128)===0?(a.flags=n&-65537|128,a):null;case 26:case 27:case 5:return Ye(a),null;case 31:if(a.memoizedState!==null){if(ea(a),a.alternate===null)throw Error(i(340));Di()}return n=a.flags,n&65536?(a.flags=n&-65537|128,a):null;case 13:if(ea(a),n=a.memoizedState,n!==null&&n.dehydrated!==null){if(a.alternate===null)throw Error(i(340));Di()}return n=a.flags,n&65536?(a.flags=n&-65537|128,a):null;case 19:return G(qt),null;case 4:return Oe(),null;case 10:return vr(a.type),null;case 22:case 23:return ea(a),eh(),n!==null&&G(ki),n=a.flags,n&65536?(a.flags=n&-65537|128,a):null;case 24:return vr(Vt),null;case 25:return null;default:return null}}function rx(n,a){switch(Lf(a),a.tag){case 3:vr(Vt),Oe();break;case 26:case 27:case 5:Ye(a);break;case 4:Oe();break;case 31:a.memoizedState!==null&&ea(a);break;case 13:ea(a);break;case 19:G(qt);break;case 10:vr(a.type);break;case 22:case 23:ea(a),eh(),n!==null&&G(ki);break;case 24:vr(Vt)}}function al(n,a){try{var o=a.updateQueue,c=o!==null?o.lastEffect:null;if(c!==null){var f=c.next;o=f;do{if((o.tag&n)===n){c=void 0;var m=o.create,b=o.inst;c=m(),b.destroy=c}o=o.next}while(o!==f)}}catch(_){vt(a,a.return,_)}}function Qr(n,a,o){try{var c=a.updateQueue,f=c!==null?c.lastEffect:null;if(f!==null){var m=f.next;c=m;do{if((c.tag&n)===n){var b=c.inst,_=b.destroy;if(_!==void 0){b.destroy=void 0,f=a;var M=o,F=_;try{F()}catch(J){vt(f,M,J)}}}c=c.next}while(c!==m)}}catch(J){vt(a,a.return,J)}}function ix(n){var a=n.updateQueue;if(a!==null){var o=n.stateNode;try{Zy(a,o)}catch(c){vt(n,n.return,c)}}}function ox(n,a,o){o.props=Ui(n.type,n.memoizedProps),o.state=n.memoizedState;try{o.componentWillUnmount()}catch(c){vt(n,a,c)}}function rl(n,a){try{var o=n.ref;if(o!==null){switch(n.tag){case 26:case 27:case 5:var c=n.stateNode;break;case 30:c=n.stateNode;break;default:c=n.stateNode}typeof o=="function"?n.refCleanup=o(c):o.current=c}}catch(f){vt(n,a,f)}}function Wa(n,a){var o=n.ref,c=n.refCleanup;if(o!==null)if(typeof c=="function")try{c()}catch(f){vt(n,a,f)}finally{n.refCleanup=null,n=n.alternate,n!=null&&(n.refCleanup=null)}else if(typeof o=="function")try{o(null)}catch(f){vt(n,a,f)}else o.current=null}function sx(n){var a=n.type,o=n.memoizedProps,c=n.stateNode;try{e:switch(a){case"button":case"input":case"select":case"textarea":o.autoFocus&&c.focus();break e;case"img":o.src?c.src=o.src:o.srcSet&&(c.srcset=o.srcSet)}}catch(f){vt(n,n.return,f)}}function Dh(n,a,o){try{var c=n.stateNode;iR(c,n.type,o,a),c[Ln]=a}catch(f){vt(n,n.return,f)}}function lx(n){return n.tag===5||n.tag===3||n.tag===26||n.tag===27&&ri(n.type)||n.tag===4}function Mh(n){e:for(;;){for(;n.sibling===null;){if(n.return===null||lx(n.return))return null;n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.tag===27&&ri(n.type)||n.flags&2||n.child===null||n.tag===4)continue e;n.child.return=n,n=n.child}if(!(n.flags&2))return n.stateNode}}function zh(n,a,o){var c=n.tag;if(c===5||c===6)n=n.stateNode,a?(o.nodeType===9?o.body:o.nodeName==="HTML"?o.ownerDocument.body:o).insertBefore(n,a):(a=o.nodeType===9?o.body:o.nodeName==="HTML"?o.ownerDocument.body:o,a.appendChild(n),o=o._reactRootContainer,o!=null||a.onclick!==null||(a.onclick=hr));else if(c!==4&&(c===27&&ri(n.type)&&(o=n.stateNode,a=null),n=n.child,n!==null))for(zh(n,a,o),n=n.sibling;n!==null;)zh(n,a,o),n=n.sibling}function Qc(n,a,o){var c=n.tag;if(c===5||c===6)n=n.stateNode,a?o.insertBefore(n,a):o.appendChild(n);else if(c!==4&&(c===27&&ri(n.type)&&(o=n.stateNode),n=n.child,n!==null))for(Qc(n,a,o),n=n.sibling;n!==null;)Qc(n,a,o),n=n.sibling}function cx(n){var a=n.stateNode,o=n.memoizedProps;try{for(var c=n.type,f=a.attributes;f.length;)a.removeAttributeNode(f[0]);xn(a,c,o),a[pn]=n,a[Ln]=o}catch(m){vt(n,n.return,m)}}var _r=!1,Gt=!1,kh=!1,ux=typeof WeakSet=="function"?WeakSet:Set,un=null;function Ij(n,a){if(n=n.containerInfo,nm=vu,n=Sy(n),Of(n)){if("selectionStart"in n)var o={start:n.selectionStart,end:n.selectionEnd};else e:{o=(o=n.ownerDocument)&&o.defaultView||window;var c=o.getSelection&&o.getSelection();if(c&&c.rangeCount!==0){o=c.anchorNode;var f=c.anchorOffset,m=c.focusNode;c=c.focusOffset;try{o.nodeType,m.nodeType}catch{o=null;break e}var b=0,_=-1,M=-1,F=0,J=0,ne=n,H=null;t:for(;;){for(var X;ne!==o||f!==0&&ne.nodeType!==3||(_=b+f),ne!==m||c!==0&&ne.nodeType!==3||(M=b+c),ne.nodeType===3&&(b+=ne.nodeValue.length),(X=ne.firstChild)!==null;)H=ne,ne=X;for(;;){if(ne===n)break t;if(H===o&&++F===f&&(_=b),H===m&&++J===c&&(M=b),(X=ne.nextSibling)!==null)break;ne=H,H=ne.parentNode}ne=X}o=_===-1||M===-1?null:{start:_,end:M}}else o=null}o=o||{start:0,end:0}}else o=null;for(am={focusedElem:n,selectionRange:o},vu=!1,un=a;un!==null;)if(a=un,n=a.child,(a.subtreeFlags&1028)!==0&&n!==null)n.return=a,un=n;else for(;un!==null;){switch(a=un,m=a.alternate,n=a.flags,a.tag){case 0:if((n&4)!==0&&(n=a.updateQueue,n=n!==null?n.events:null,n!==null))for(o=0;o title"))),xn(m,c,o),m[pn]=n,cn(m),c=m;break e;case"link":var b=gb("link","href",f).get(c+(o.href||""));if(b){for(var _=0;_St&&(b=St,St=Le,Le=b);var K=by(_,Le),k=by(_,St);if(K&&k&&(X.rangeCount!==1||X.anchorNode!==K.node||X.anchorOffset!==K.offset||X.focusNode!==k.node||X.focusOffset!==k.offset)){var q=ne.createRange();q.setStart(K.node,K.offset),X.removeAllRanges(),Le>St?(X.addRange(q),X.extend(k.node,k.offset)):(q.setEnd(k.node,k.offset),X.addRange(q))}}}}for(ne=[],X=_;X=X.parentNode;)X.nodeType===1&&ne.push({element:X,left:X.scrollLeft,top:X.scrollTop});for(typeof _.focus=="function"&&_.focus(),_=0;_o?32:o,R.T=null,o=Fh,Fh=null;var m=ti,b=Or;if(en=0,$o=ti=null,Or=0,(gt&6)!==0)throw Error(i(331));var _=gt;if(gt|=4,wx(m.current),vx(m,m.current,b,o),gt=_,ul(0,!1),Jt&&typeof Jt.onPostCommitFiberRoot=="function")try{Jt.onPostCommitFiberRoot(Na,m)}catch{}return!0}finally{P.p=f,R.T=c,Lx(n,a)}}function qx(n,a,o){a=ga(o,a),a=wh(n.stateNode,a,2),n=Xr(n,a,2),n!==null&&(kt(n,2),er(n))}function vt(n,a,o){if(n.tag===3)qx(n,n,o);else for(;a!==null;){if(a.tag===3){qx(a,n,o);break}else if(a.tag===1){var c=a.stateNode;if(typeof a.type.getDerivedStateFromError=="function"||typeof c.componentDidCatch=="function"&&(ei===null||!ei.has(c))){n=ga(o,n),o=Fv(2),c=Xr(a,o,2),c!==null&&($v(o,c,a,n),kt(c,2),er(c));break}}a=a.return}}function Bh(n,a,o){var c=n.pingCache;if(c===null){c=n.pingCache=new qj;var f=new Set;c.set(a,f)}else f=c.get(a),f===void 0&&(f=new Set,c.set(a,f));f.has(o)||(Ih=!0,f.add(o),n=Bj.bind(null,n,a,o),a.then(n,n))}function Bj(n,a,o){var c=n.pingCache;c!==null&&c.delete(a),n.pingedLanes|=n.suspendedLanes&o,n.warmLanes&=~o,_t===n&&(it&o)===o&&(Lt===4||Lt===3&&(it&62914560)===it&&300>ce()-eu?(gt&2)===0&&Vo(n,0):Lh|=o,Fo===it&&(Fo=0)),er(n)}function Fx(n,a){a===0&&(a=Rn()),n=Ai(n,a),n!==null&&(kt(n,a),er(n))}function Gj(n){var a=n.memoizedState,o=0;a!==null&&(o=a.retryLane),Fx(n,o)}function Xj(n,a){var o=0;switch(n.tag){case 31:case 13:var c=n.stateNode,f=n.memoizedState;f!==null&&(o=f.retryLane);break;case 19:c=n.stateNode;break;case 22:c=n.stateNode._retryCache;break;default:throw Error(i(314))}c!==null&&c.delete(a),Fx(n,o)}function Zj(n,a){return z(n,a)}var su=null,Bo=null,Gh=!1,lu=!1,Xh=!1,ai=0;function er(n){n!==Bo&&n.next===null&&(Bo===null?su=Bo=n:Bo=Bo.next=n),lu=!0,Gh||(Gh=!0,Qj())}function ul(n,a){if(!Xh&&lu){Xh=!0;do for(var o=!1,c=su;c!==null;){if(n!==0){var f=c.pendingLanes;if(f===0)var m=0;else{var b=c.suspendedLanes,_=c.pingedLanes;m=(1<<31-Wt(42|n)+1)-1,m&=f&~(b&~_),m=m&201326741?m&201326741|1:m?m|2:0}m!==0&&(o=!0,Bx(c,m))}else m=it,m=Ge(c,c===_t?m:0,c.cancelPendingCommit!==null||c.timeoutHandle!==-1),(m&3)===0||Tt(c,m)||(o=!0,Bx(c,m));c=c.next}while(o);Xh=!1}}function Yj(){$x()}function $x(){lu=Gh=!1;var n=0;ai!==0&&sR()&&(n=ai);for(var a=ce(),o=null,c=su;c!==null;){var f=c.next,m=Vx(c,a);m===0?(c.next=null,o===null?su=f:o.next=f,f===null&&(Bo=o)):(o=c,(n!==0||(m&3)!==0)&&(lu=!0)),c=f}en!==0&&en!==5||ul(n),ai!==0&&(ai=0)}function Vx(n,a){for(var o=n.suspendedLanes,c=n.pingedLanes,f=n.expirationTimes,m=n.pendingLanes&-62914561;0_)break;var J=M.transferSize,ne=M.initiatorType;J&&eb(ne)&&(M=M.responseEnd,b+=J*(M<_?1:(_-F)/(M-F)))}if(--c,a+=8*(m+b)/(f.duration/1e3),n++,10"u"?null:document;function fb(n,a,o){var c=Go;if(c&&typeof a=="string"&&a){var f=ma(a);f='link[rel="'+n+'"][href="'+f+'"]',typeof o=="string"&&(f+='[crossorigin="'+o+'"]'),db.has(f)||(db.add(f),n={rel:n,crossOrigin:o,href:a},c.querySelector(f)===null&&(a=c.createElement("link"),xn(a,"link",n),cn(a),c.head.appendChild(a)))}}function gR(n){Nr.D(n),fb("dns-prefetch",n,null)}function yR(n,a){Nr.C(n,a),fb("preconnect",n,a)}function vR(n,a,o){Nr.L(n,a,o);var c=Go;if(c&&n&&a){var f='link[rel="preload"][as="'+ma(a)+'"]';a==="image"&&o&&o.imageSrcSet?(f+='[imagesrcset="'+ma(o.imageSrcSet)+'"]',typeof o.imageSizes=="string"&&(f+='[imagesizes="'+ma(o.imageSizes)+'"]')):f+='[href="'+ma(n)+'"]';var m=f;switch(a){case"style":m=Xo(n);break;case"script":m=Zo(n)}Sa.has(m)||(n=v({rel:"preload",href:a==="image"&&o&&o.imageSrcSet?void 0:n,as:a},o),Sa.set(m,n),c.querySelector(f)!==null||a==="style"&&c.querySelector(ml(m))||a==="script"&&c.querySelector(pl(m))||(a=c.createElement("link"),xn(a,"link",n),cn(a),c.head.appendChild(a)))}}function xR(n,a){Nr.m(n,a);var o=Go;if(o&&n){var c=a&&typeof a.as=="string"?a.as:"script",f='link[rel="modulepreload"][as="'+ma(c)+'"][href="'+ma(n)+'"]',m=f;switch(c){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":m=Zo(n)}if(!Sa.has(m)&&(n=v({rel:"modulepreload",href:n},a),Sa.set(m,n),o.querySelector(f)===null)){switch(c){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(o.querySelector(pl(m)))return}c=o.createElement("link"),xn(c,"link",n),cn(c),o.head.appendChild(c)}}}function bR(n,a,o){Nr.S(n,a,o);var c=Go;if(c&&n){var f=go(c).hoistableStyles,m=Xo(n);a=a||"default";var b=f.get(m);if(!b){var _={loading:0,preload:null};if(b=c.querySelector(ml(m)))_.loading=5;else{n=v({rel:"stylesheet",href:n,"data-precedence":a},o),(o=Sa.get(m))&&um(n,o);var M=b=c.createElement("link");cn(M),xn(M,"link",n),M._p=new Promise(function(F,J){M.onload=F,M.onerror=J}),M.addEventListener("load",function(){_.loading|=1}),M.addEventListener("error",function(){_.loading|=2}),_.loading|=4,hu(b,a,c)}b={type:"stylesheet",instance:b,count:1,state:_},f.set(m,b)}}}function wR(n,a){Nr.X(n,a);var o=Go;if(o&&n){var c=go(o).hoistableScripts,f=Zo(n),m=c.get(f);m||(m=o.querySelector(pl(f)),m||(n=v({src:n,async:!0},a),(a=Sa.get(f))&&dm(n,a),m=o.createElement("script"),cn(m),xn(m,"link",n),o.head.appendChild(m)),m={type:"script",instance:m,count:1,state:null},c.set(f,m))}}function SR(n,a){Nr.M(n,a);var o=Go;if(o&&n){var c=go(o).hoistableScripts,f=Zo(n),m=c.get(f);m||(m=o.querySelector(pl(f)),m||(n=v({src:n,async:!0,type:"module"},a),(a=Sa.get(f))&&dm(n,a),m=o.createElement("script"),cn(m),xn(m,"link",n),o.head.appendChild(m)),m={type:"script",instance:m,count:1,state:null},c.set(f,m))}}function hb(n,a,o,c){var f=(f=ve.current)?fu(f):null;if(!f)throw Error(i(446));switch(n){case"meta":case"title":return null;case"style":return typeof o.precedence=="string"&&typeof o.href=="string"?(a=Xo(o.href),o=go(f).hoistableStyles,c=o.get(a),c||(c={type:"style",instance:null,count:0,state:null},o.set(a,c)),c):{type:"void",instance:null,count:0,state:null};case"link":if(o.rel==="stylesheet"&&typeof o.href=="string"&&typeof o.precedence=="string"){n=Xo(o.href);var m=go(f).hoistableStyles,b=m.get(n);if(b||(f=f.ownerDocument||f,b={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},m.set(n,b),(m=f.querySelector(ml(n)))&&!m._p&&(b.instance=m,b.state.loading=5),Sa.has(n)||(o={rel:"preload",as:"style",href:o.href,crossOrigin:o.crossOrigin,integrity:o.integrity,media:o.media,hrefLang:o.hrefLang,referrerPolicy:o.referrerPolicy},Sa.set(n,o),m||_R(f,n,o,b.state))),a&&c===null)throw Error(i(528,""));return b}if(a&&c!==null)throw Error(i(529,""));return null;case"script":return a=o.async,o=o.src,typeof o=="string"&&a&&typeof a!="function"&&typeof a!="symbol"?(a=Zo(o),o=go(f).hoistableScripts,c=o.get(a),c||(c={type:"script",instance:null,count:0,state:null},o.set(a,c)),c):{type:"void",instance:null,count:0,state:null};default:throw Error(i(444,n))}}function Xo(n){return'href="'+ma(n)+'"'}function ml(n){return'link[rel="stylesheet"]['+n+"]"}function mb(n){return v({},n,{"data-precedence":n.precedence,precedence:null})}function _R(n,a,o,c){n.querySelector('link[rel="preload"][as="style"]['+a+"]")?c.loading=1:(a=n.createElement("link"),c.preload=a,a.addEventListener("load",function(){return c.loading|=1}),a.addEventListener("error",function(){return c.loading|=2}),xn(a,"link",o),cn(a),n.head.appendChild(a))}function Zo(n){return'[src="'+ma(n)+'"]'}function pl(n){return"script[async]"+n}function pb(n,a,o){if(a.count++,a.instance===null)switch(a.type){case"style":var c=n.querySelector('style[data-href~="'+ma(o.href)+'"]');if(c)return a.instance=c,cn(c),c;var f=v({},o,{"data-href":o.href,"data-precedence":o.precedence,href:null,precedence:null});return c=(n.ownerDocument||n).createElement("style"),cn(c),xn(c,"style",f),hu(c,o.precedence,n),a.instance=c;case"stylesheet":f=Xo(o.href);var m=n.querySelector(ml(f));if(m)return a.state.loading|=4,a.instance=m,cn(m),m;c=mb(o),(f=Sa.get(f))&&um(c,f),m=(n.ownerDocument||n).createElement("link"),cn(m);var b=m;return b._p=new Promise(function(_,M){b.onload=_,b.onerror=M}),xn(m,"link",c),a.state.loading|=4,hu(m,o.precedence,n),a.instance=m;case"script":return m=Zo(o.src),(f=n.querySelector(pl(m)))?(a.instance=f,cn(f),f):(c=o,(f=Sa.get(m))&&(c=v({},o),dm(c,f)),n=n.ownerDocument||n,f=n.createElement("script"),cn(f),xn(f,"link",c),n.head.appendChild(f),a.instance=f);case"void":return null;default:throw Error(i(443,a.type))}else a.type==="stylesheet"&&(a.state.loading&4)===0&&(c=a.instance,a.state.loading|=4,hu(c,o.precedence,n));return a.instance}function hu(n,a,o){for(var c=o.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),f=c.length?c[c.length-1]:null,m=f,b=0;b title"):null)}function ER(n,a,o){if(o===1||a.itemProp!=null)return!1;switch(n){case"meta":case"title":return!0;case"style":if(typeof a.precedence!="string"||typeof a.href!="string"||a.href==="")break;return!0;case"link":if(typeof a.rel!="string"||typeof a.href!="string"||a.href===""||a.onLoad||a.onError)break;switch(a.rel){case"stylesheet":return n=a.disabled,typeof a.precedence=="string"&&n==null;default:return!0}case"script":if(a.async&&typeof a.async!="function"&&typeof a.async!="symbol"&&!a.onLoad&&!a.onError&&a.src&&typeof a.src=="string")return!0}return!1}function vb(n){return!(n.type==="stylesheet"&&(n.state.loading&3)===0)}function CR(n,a,o,c){if(o.type==="stylesheet"&&(typeof c.media!="string"||matchMedia(c.media).matches!==!1)&&(o.state.loading&4)===0){if(o.instance===null){var f=Xo(c.href),m=a.querySelector(ml(f));if(m){a=m._p,a!==null&&typeof a=="object"&&typeof a.then=="function"&&(n.count++,n=pu.bind(n),a.then(n,n)),o.state.loading|=4,o.instance=m,cn(m);return}m=a.ownerDocument||a,c=mb(c),(f=Sa.get(f))&&um(c,f),m=m.createElement("link"),cn(m);var b=m;b._p=new Promise(function(_,M){b.onload=_,b.onerror=M}),xn(m,"link",c),o.instance=m}n.stylesheets===null&&(n.stylesheets=new Map),n.stylesheets.set(o,a),(a=o.state.preload)&&(o.state.loading&3)===0&&(n.count++,o=pu.bind(n),a.addEventListener("load",o),a.addEventListener("error",o))}}var fm=0;function jR(n,a){return n.stylesheets&&n.count===0&&yu(n,n.stylesheets),0fm?50:800)+a);return n.unsuspend=o,function(){n.unsuspend=null,clearTimeout(c),clearTimeout(f)}}:null}function pu(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)yu(this,this.stylesheets);else if(this.unsuspend){var n=this.unsuspend;this.unsuspend=null,n()}}}var gu=null;function yu(n,a){n.stylesheets=null,n.unsuspend!==null&&(n.count++,gu=new Map,a.forEach(RR,n),gu=null,pu.call(n))}function RR(n,a){if(!(a.state.loading&4)){var o=gu.get(n);if(o)var c=o.get(null);else{o=new Map,gu.set(n,o);for(var f=n.querySelectorAll("link[data-precedence],style[data-precedence]"),m=0;m"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),Sm.exports=mN(),Sm.exports}var gN=pN();const id="autoglue.tokens",rp="autoglue.auth-change";let nr=ip();function ip(){try{const e=localStorage.getItem(id);return e?JSON.parse(e):null}catch{return null}}function yN(e){e?localStorage.setItem(id,JSON.stringify(e)):localStorage.removeItem(id)}function vN(e){window.dispatchEvent(new CustomEvent(rp,{detail:e}))}const wn={get(){return nr},set(e){nr=e,yN(e),vN(e)},reload(){return nr=ip(),nr},isAuthed(){return!!nr?.access_token},getAccessToken(){return nr?.access_token??null},isExpired(e=Math.floor(Date.now()/1e3)){const t=Wb(nr?.access_token);return t!==null?e>=t:!0},willExpireSoon(e=60,t=Math.floor(Date.now()/1e3)){const r=Wb(nr?.access_token);return r!==null?r-t<=e:!0},logout(){wn.set(null)},subscribe(e){const t=i=>e(i.detail??null),r=i=>{i.key===id&&(nr=ip(),e(nr))};return window.addEventListener(rp,t),window.addEventListener("storage",r),()=>{window.removeEventListener(rp,t),window.removeEventListener("storage",r)}}};function Wb(e){if(!e)return null;const t=e.split(".");if(t.length<2)return null;try{const r=JSON.parse(atob(xN(t[1])));return(typeof r?.exp=="number"?r.exp:null)??null}catch{return null}}function xN(e){return e.replace(/-/g,"+").replace(/_/g,"/")+"==".slice((2-e.length*3%4)%4)}const op="autoglue.org";let Nu=localStorage.getItem(op);const La={get(){return Nu},set(e){Nu=e,localStorage.setItem(op,e),window.dispatchEvent(new CustomEvent("autoglue:org-change",{detail:e}))},subscribe(e){const t=i=>e(i.detail??null),r=i=>{i.key===op&&(Nu=i.newValue,e(Nu))};return window.addEventListener("autoglue:org-change",t),window.addEventListener("storage",r),()=>{window.removeEventListener("autoglue:org-change",t),window.removeEventListener("storage",r)}}},bN="/api/v1".replace(/\/+$/,"");class lS{constructor(t={}){this.configuration=t}set config(t){this.configuration=t}get basePath(){return this.configuration.basePath!=null?this.configuration.basePath:bN}get fetchApi(){return this.configuration.fetchApi}get middleware(){return this.configuration.middleware||[]}get queryParamsStringify(){return this.configuration.queryParamsStringify||cS}get username(){return this.configuration.username}get password(){return this.configuration.password}get apiKey(){const t=this.configuration.apiKey;if(t)return typeof t=="function"?t:()=>t}get accessToken(){const t=this.configuration.accessToken;if(t)return typeof t=="function"?t:async()=>t}get headers(){return this.configuration.headers}get credentials(){return this.configuration.credentials}}const wN=new lS;class fa{constructor(t=wN){this.configuration=t,this.middleware=t.middleware}static jsonRegex=new RegExp("^(:?application/json|[^;/ ]+/[^;/ ]+[+]json)[ ]*(:?;.*)?$","i");middleware;withMiddleware(...t){const r=this.clone();return r.middleware=r.middleware.concat(...t),r}withPreMiddleware(...t){const r=t.map(i=>({pre:i}));return this.withMiddleware(...r)}withPostMiddleware(...t){const r=t.map(i=>({post:i}));return this.withMiddleware(...r)}isJsonMime(t){return t?fa.jsonRegex.test(t):!1}async request(t,r){const{url:i,init:s}=await this.createFetchParams(t,r),u=await this.fetchApi(i,s);if(u&&u.status>=200&&u.status<300)return u;throw new EN(u,"Response returned an error code")}async createFetchParams(t,r){let i=this.configuration.basePath+t.path;t.query!==void 0&&Object.keys(t.query).length!==0&&(i+="?"+this.configuration.queryParamsStringify(t.query));const s=Object.assign({},this.configuration.headers,t.headers);Object.keys(s).forEach(x=>s[x]===void 0?delete s[x]:{});const u=typeof r=="function"?r:async()=>r,d={method:t.method,headers:s,body:t.body,credentials:this.configuration.credentials},h={...d,...await u({init:d,context:t})};let g;_N(h.body)||h.body instanceof URLSearchParams||SN(h.body)?g=h.body:this.isJsonMime(s["Content-Type"])?g=JSON.stringify(h.body):g=h.body;const y={...h,body:g};return{url:i,init:y}}fetchApi=async(t,r)=>{let i={url:t,init:r};for(const u of this.middleware)u.pre&&(i=await u.pre({fetch:this.fetchApi,...i})||i);let s;try{s=await(this.configuration.fetchApi||fetch)(i.url,i.init)}catch(u){for(const d of this.middleware)d.onError&&(s=await d.onError({fetch:this.fetchApi,url:i.url,init:i.init,error:u,response:s?s.clone():void 0})||s);if(s===void 0)throw u instanceof Error?new CN(u,"The request failed and the interceptors did not return an alternative response"):u}for(const u of this.middleware)u.post&&(s=await u.post({fetch:this.fetchApi,url:i.url,init:i.init,response:s.clone()})||s);return s};clone(){const t=this.constructor,r=new t(this.configuration);return r.middleware=this.middleware.slice(),r}}function SN(e){return typeof Blob<"u"&&e instanceof Blob}function _N(e){return typeof FormData<"u"&&e instanceof FormData}class EN extends Error{constructor(t,r){super(r),this.response=t}name="ResponseError"}class CN extends Error{constructor(t,r){super(r),this.cause=t}name="FetchError"}class Se extends Error{constructor(t,r){super(r),this.field=t}name="RequiredError"}function cS(e,t=""){return Object.keys(e).map(r=>uS(r,e[r],t)).filter(r=>r.length>0).join("&")}function uS(e,t,r=""){const i=r+(r.length?`[${e}]`:e);if(t instanceof Array){const s=t.map(u=>encodeURIComponent(String(u))).join(`&${encodeURIComponent(i)}=`);return`${encodeURIComponent(i)}=${s}`}if(t instanceof Set){const s=Array.from(t);return uS(e,s,r)}return t instanceof Date?`${encodeURIComponent(i)}=${encodeURIComponent(t.toISOString())}`:t instanceof Object?cS(t,i):`${encodeURIComponent(i)}=${encodeURIComponent(String(t))}`}class Te{constructor(t,r=i=>i){this.raw=t,this.transformer=r}async value(){return this.transformer(await this.raw.json())}}class Fl{constructor(t){this.raw=t}async value(){}}class Tn{constructor(t){this.raw=t}async value(){return await this.raw.text()}}function os(e){return jN(e)}function jN(e,t){return e==null?e:{created_at:e.created_at==null?void 0:e.created_at,id:e.id==null?void 0:e.id,key:e.key==null?void 0:e.key,organization_id:e.organization_id==null?void 0:e.organization_id,updated_at:e.updated_at==null?void 0:e.updated_at,value:e.value==null?void 0:e.value}}function RN(e){return ON(e,!1)}function ON(e,t=!1){return e==null?e:{annotation_ids:e.annotation_ids}}function NN(e){return AN(e,!1)}function AN(e,t=!1){return e==null?e:{label_ids:e.label_ids}}function TN(e){return DN(e,!1)}function DN(e,t=!1){return e==null?e:{server_ids:e.server_ids}}function MN(e){return zN(e,!1)}function zN(e,t=!1){return e==null?e:{taint_ids:e.taint_ids}}function kN(e){return PN(e)}function PN(e,t){return e==null?e:{auth_url:e.auth_url==null?void 0:e.auth_url}}function KN(e){return IN(e,!1)}function IN(e,t=!1){return e==null?e:{key:e.key,value:e.value}}function LN(e){return UN(e,!1)}function UN(e,t=!1){return e==null?e:{key:e.key,value:e.value}}function qN(e){return FN(e,!1)}function FN(e,t=!1){return e==null?e:{name:e.name,role:e.role}}function $N(e){return VN(e,!1)}function VN(e,t=!1){return e==null?e:{bits:e.bits,comment:e.comment,name:e.name,type:e.type}}function HN(e){return BN(e,!1)}function BN(e,t=!1){return e==null?e:{hostname:e.hostname,private_ip_address:e.private_ip_address,public_ip_address:e.public_ip_address,role:e.role,ssh_key_id:e.ssh_key_id,ssh_user:e.ssh_user,status:e.status}}function GN(e){return XN(e,!1)}function XN(e,t=!1){return e==null?e:{effect:e.effect,key:e.key,value:e.value}}function ZN(e){return YN(e)}function YN(e,t){return e==null?e:{alg:e.alg==null?void 0:e.alg,e:e.e==null?void 0:e.e,kid:e.kid==null?void 0:e.kid,kty:e.kty==null?void 0:e.kty,n:e.n==null?void 0:e.n,use:e.use==null?void 0:e.use,x:e.x==null?void 0:e.x}}function QN(e){return JN(e)}function JN(e,t){return e==null?e:{keys:e.keys==null?void 0:e.keys.map(ZN)}}function WN(e){return eA(e)}function eA(e,t){return e}function Qu(e){return tA(e)}function tA(e,t){return e==null?e:{attempts:e.attempts==null?void 0:e.attempts,created_at:e.created_at==null?void 0:e.created_at,id:e.id==null?void 0:e.id,last_error:e.last_error==null?void 0:e.last_error,max_attempts:e.max_attempts==null?void 0:e.max_attempts,payload:e.payload==null?void 0:e.payload,queue:e.queue==null?void 0:e.queue,run_at:e.run_at==null?void 0:e.run_at,status:e.status==null?void 0:WN(e.status),type:e.type==null?void 0:e.type,updated_at:e.updated_at==null?void 0:e.updated_at}}function ss(e){return nA(e)}function nA(e,t){return e==null?e:{created_at:e.created_at==null?void 0:e.created_at,id:e.id==null?void 0:e.id,key:e.key==null?void 0:e.key,organization_id:e.organization_id==null?void 0:e.organization_id,updated_at:e.updated_at==null?void 0:e.updated_at,value:e.value==null?void 0:e.value}}function aA(e){return rA(e,!1)}function rA(e,t=!1){return e==null?e:{refresh_token:e.refresh_token}}function ls(e){return iA(e)}function iA(e,t){return e==null?e:{created_at:e.created_at==null?void 0:e.created_at,effect:e.effect==null?void 0:e.effect,id:e.id==null?void 0:e.id,key:e.key==null?void 0:e.key,organization_id:e.organization_id==null?void 0:e.organization_id,updated_at:e.updated_at==null?void 0:e.updated_at,value:e.value==null?void 0:e.value}}function cs(e){return oA(e)}function oA(e,t){return e==null?e:{created_at:e.created_at==null?void 0:e.created_at,hostname:e.hostname==null?void 0:e.hostname,id:e.id==null?void 0:e.id,organization_id:e.organization_id==null?void 0:e.organization_id,private_ip_address:e.private_ip_address==null?void 0:e.private_ip_address,public_ip_address:e.public_ip_address==null?void 0:e.public_ip_address,role:e.role==null?void 0:e.role,ssh_key_id:e.ssh_key_id==null?void 0:e.ssh_key_id,ssh_user:e.ssh_user==null?void 0:e.ssh_user,status:e.status==null?void 0:e.status,updated_at:e.updated_at==null?void 0:e.updated_at}}function Au(e){return sA(e)}function sA(e,t){return e==null?e:{annotations:e.annotations==null?void 0:e.annotations.map(os),created_at:e.created_at==null?void 0:e.created_at,id:e.id==null?void 0:e.id,labels:e.labels==null?void 0:e.labels.map(ss),name:e.name==null?void 0:e.name,organization_id:e.organization_id==null?void 0:e.organization_id,role:e.role==null?void 0:e.role,servers:e.servers==null?void 0:e.servers.map(cs),taints:e.taints==null?void 0:e.taints.map(ls),updated_at:e.updated_at==null?void 0:e.updated_at}}function lA(e){return cA(e)}function cA(e,t){return e==null?e:{items:e.items==null?void 0:e.items.map(Qu),page:e.page==null?void 0:e.page,page_size:e.page_size==null?void 0:e.page_size,total:e.total==null?void 0:e.total}}function uA(e){return dA(e)}function dA(e,t){return e==null?e:{failed:e.failed==null?void 0:e.failed,name:e.name==null?void 0:e.name,pending:e.pending==null?void 0:e.pending,running:e.running==null?void 0:e.running,scheduled:e.scheduled==null?void 0:e.scheduled}}function fA(e){return hA(e,!1)}function hA(e,t=!1){return e==null?e:{refresh_token:e.refresh_token}}function ew(e){return mA(e)}function mA(e,t){return e==null?e:{created_at:e.created_at==null?void 0:e.created_at,fingerprint:e.fingerprint==null?void 0:e.fingerprint,id:e.id==null?void 0:e.id,name:e.name==null?void 0:e.name,organization_id:e.organization_id==null?void 0:e.organization_id,public_key:e.public_key==null?void 0:e.public_key,updated_at:e.updated_at==null?void 0:e.updated_at}}function pA(e){return gA(e)}function gA(e,t){return e==null?e:{created_at:e.created_at==null?void 0:e.created_at,fingerprint:e.fingerprint==null?void 0:e.fingerprint,id:e.id==null?void 0:e.id,name:e.name==null?void 0:e.name,organization_id:e.organization_id==null?void 0:e.organization_id,private_key:e.private_key==null?void 0:e.private_key,public_key:e.public_key==null?void 0:e.public_key,updated_at:e.updated_at==null?void 0:e.updated_at}}function tw(e){return yA(e)}function yA(e,t){return e==null?e:{access_token:e.access_token==null?void 0:e.access_token,expires_in:e.expires_in==null?void 0:e.expires_in,refresh_token:e.refresh_token==null?void 0:e.refresh_token,token_type:e.token_type==null?void 0:e.token_type}}function vA(e){return xA(e,!1)}function xA(e,t=!1){return e==null?e:{key:e.key,value:e.value}}function bA(e){return wA(e,!1)}function wA(e,t=!1){return e==null?e:{key:e.key,value:e.value}}function SA(e){return _A(e,!1)}function _A(e,t=!1){return e==null?e:{name:e.name,role:e.role}}function EA(e){return CA(e,!1)}function CA(e,t=!1){return e==null?e:{hostname:e.hostname,private_ip_address:e.private_ip_address,public_ip_address:e.public_ip_address,role:e.role,ssh_key_id:e.ssh_key_id,ssh_user:e.ssh_user,status:e.status}}function jA(e){return RA(e,!1)}function RA(e,t=!1){return e==null?e:{effect:e.effect,key:e.key,value:e.value}}function OA(e){return NA(e,!1)}function NA(e,t=!1){return e==null?e:{expires_in_hours:e.expires_in_hours,name:e.name}}function dS(e){return AA(e)}function AA(e,t){return e==null?e:{avatar_url:e.avatar_url==null?void 0:e.avatar_url,created_at:e.created_at==null?void 0:new Date(e.created_at),display_name:e.display_name==null?void 0:e.display_name,id:e.id==null?void 0:e.id,is_admin:e.is_admin==null?void 0:e.is_admin,is_disabled:e.is_disabled==null?void 0:e.is_disabled,primary_email:e.primary_email==null?void 0:e.primary_email,updated_at:e.updated_at==null?void 0:new Date(e.updated_at)}}function TA(e){return DA(e)}function DA(e,t){return e==null?e:{created_at:e.created_at==null?void 0:new Date(e.created_at),email:e.email==null?void 0:e.email,id:e.id==null?void 0:e.id,is_primary:e.is_primary==null?void 0:e.is_primary,is_verified:e.is_verified==null?void 0:e.is_verified,updated_at:e.updated_at==null?void 0:new Date(e.updated_at),user:e.user==null?void 0:dS(e.user),user_id:e.user_id==null?void 0:e.user_id}}function zl(e){return MA(e)}function MA(e,t){return e==null?e:{created_at:e.created_at==null?void 0:new Date(e.created_at),domain:e.domain==null?void 0:e.domain,id:e.id==null?void 0:e.id,name:e.name==null?void 0:e.name,updated_at:e.updated_at==null?void 0:new Date(e.updated_at)}}function zA(e){return kA(e)}function kA(e,t){return e==null?e:{avatar_url:e.avatar_url==null?void 0:e.avatar_url,created_at:e.created_at==null?void 0:new Date(e.created_at),display_name:e.display_name==null?void 0:e.display_name,emails:e.emails==null?void 0:e.emails.map(TA),id:e.id==null?void 0:e.id,is_admin:e.is_admin==null?void 0:e.is_admin,is_disabled:e.is_disabled==null?void 0:e.is_disabled,organizations:e.organizations==null?void 0:e.organizations.map(zl),primary_email:e.primary_email==null?void 0:e.primary_email,updated_at:e.updated_at==null?void 0:new Date(e.updated_at)}}function nw(e){return PA(e)}function PA(e,t){return e==null?e:{email:e.email==null?void 0:e.email,role:e.role==null?void 0:e.role,user_id:e.user_id==null?void 0:e.user_id}}function KA(e){return IA(e,!1)}function IA(e,t=!1){return e==null?e:{role:e.role,user_id:e.user_id}}function LA(e){return UA(e,!1)}function UA(e,t=!1){return e==null?e:{domain:e.domain,name:e.name}}function qA(e){return FA(e,!1)}function FA(e,t=!1){return e==null?e:{expires_in_hours:e.expires_in_hours,name:e.name}}function $A(e){return VA(e)}function VA(e,t){return e==null?e:{created_at:e.created_at==null?void 0:e.created_at,expires_at:e.expires_at==null?void 0:e.expires_at,id:e.id==null?void 0:e.id,name:e.name==null?void 0:e.name,org_key:e.org_key==null?void 0:e.org_key,org_secret:e.org_secret==null?void 0:e.org_secret,scope:e.scope==null?void 0:e.scope}}function HA(e){return BA(e,!1)}function BA(e,t=!1){return e==null?e:{domain:e.domain,name:e.name}}function GA(e){return XA(e,!1)}function XA(e,t=!1){return e==null?e:{display_name:e.display_name}}function aw(e){return ZA(e)}function ZA(e,t){return e==null?e:{created_at:e.created_at==null?void 0:e.created_at,expires_at:e.expires_at==null?void 0:e.expires_at,id:e.id==null?void 0:e.id,last_used_at:e.last_used_at==null?void 0:e.last_used_at,name:e.name==null?void 0:e.name,plain:e.plain==null?void 0:e.plain,scope:e.scope==null?void 0:e.scope}}function YA(e){return QA(e)}function QA(e,t){return e==null?e:{created_at:e.created_at==null?void 0:new Date(e.created_at),expires_at:e.expires_at==null?void 0:new Date(e.expires_at),id:e.id==null?void 0:e.id,last_used_at:e.last_used_at==null?void 0:new Date(e.last_used_at),name:e.name==null?void 0:e.name,org_id:e.org_id==null?void 0:e.org_id,prefix:e.prefix==null?void 0:e.prefix,revoked:e.revoked==null?void 0:e.revoked,scope:e.scope==null?void 0:e.scope,updated_at:e.updated_at==null?void 0:new Date(e.updated_at),user_id:e.user_id==null?void 0:e.user_id}}class JA extends fa{async createAnnotationRaw(t,r){if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling createAnnotation().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/annotations",method:"POST",headers:s,query:i,body:KN(t.body)},r);return new Te(d,h=>os(h))}async createAnnotation(t,r){return await(await this.createAnnotationRaw(t,r)).value()}async deleteAnnotationRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling deleteAnnotation().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/annotations/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"DELETE",headers:s,query:i},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async deleteAnnotation(t,r){return await(await this.deleteAnnotationRaw(t,r)).value()}async getAnnotationRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling getAnnotation().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/annotations/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return new Te(d,h=>os(h))}async getAnnotation(t,r){return await(await this.getAnnotationRaw(t,r)).value()}async listAnnotationsRaw(t,r){const i={};t.key!=null&&(i.key=t.key),t.value!=null&&(i.value=t.value),t.q!=null&&(i.q=t.q);const s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/annotations",method:"GET",headers:s,query:i},r);return new Te(d,h=>h.map(os))}async listAnnotations(t={},r){return await(await this.listAnnotationsRaw(t,r)).value()}async updateAnnotationRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling updateAnnotation().');if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling updateAnnotation().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/annotations/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"PATCH",headers:s,query:i,body:vA(t.body)},r);return new Te(d,h=>os(h))}async updateAnnotation(t,r){return await(await this.updateAnnotationRaw(t,r)).value()}}class WA extends fa{async adminCancelArcherJobRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling adminCancelArcherJob().');const i={},s={};this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/admin/archer/jobs/{id}/cancel";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"POST",headers:s,query:i},r);return new Te(d,h=>Qu(h))}async adminCancelArcherJob(t,r){return await(await this.adminCancelArcherJobRaw(t,r)).value()}async adminEnqueueArcherJobRaw(t,r){if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling adminEnqueueArcherJob().');const i={},s={};s["Content-Type"]="application/json",this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/admin/archer/jobs",method:"POST",headers:s,query:i,body:t.body},r);return new Te(d,h=>Qu(h))}async adminEnqueueArcherJob(t,r){return await(await this.adminEnqueueArcherJobRaw(t,r)).value()}async adminListArcherJobsRaw(t,r){const i={};t.status!=null&&(i.status=t.status),t.queue!=null&&(i.queue=t.queue),t.q!=null&&(i.q=t.q),t.page!=null&&(i.page=t.page),t.pageSize!=null&&(i.page_size=t.pageSize);const s={};this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/admin/archer/jobs",method:"GET",headers:s,query:i},r);return new Te(d,h=>lA(h))}async adminListArcherJobs(t={},r){return await(await this.adminListArcherJobsRaw(t,r)).value()}async adminListArcherQueuesRaw(t){const r={},i={};this.configuration&&this.configuration.apiKey&&(i.Authorization=await this.configuration.apiKey("Authorization"));const u=await this.request({path:"/admin/archer/queues",method:"GET",headers:i,query:r},t);return new Te(u,d=>d.map(uA))}async adminListArcherQueues(t){return await(await this.adminListArcherQueuesRaw(t)).value()}async adminRetryArcherJobRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling adminRetryArcherJob().');const i={},s={};this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/admin/archer/jobs/{id}/retry";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"POST",headers:s,query:i},r);return new Te(d,h=>Qu(h))}async adminRetryArcherJob(t,r){return await(await this.adminRetryArcherJobRaw(t,r)).value()}}class eT extends fa{async authCallbackRaw(t,r){if(t.provider==null)throw new Se("provider",'Required parameter "provider" was null or undefined when calling authCallback().');const i={},s={};let u="/auth/{provider}/callback";u=u.replace("{provider}",encodeURIComponent(String(t.provider)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return new Te(d,h=>tw(h))}async authCallback(t,r){return await(await this.authCallbackRaw(t,r)).value()}async authStartRaw(t,r){if(t.provider==null)throw new Se("provider",'Required parameter "provider" was null or undefined when calling authStart().');const i={},s={};let u="/auth/{provider}/start";u=u.replace("{provider}",encodeURIComponent(String(t.provider)));const d=await this.request({path:u,method:"POST",headers:s,query:i},r);return new Te(d,h=>kN(h))}async authStart(t,r){return await(await this.authStartRaw(t,r)).value()}async getJWKSRaw(t){const r={},i={},u=await this.request({path:"/.well-known/jwks.json",method:"GET",headers:i,query:r},t);return new Te(u,d=>QN(d))}async getJWKS(t){return await(await this.getJWKSRaw(t)).value()}async logoutRaw(t,r){if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling logout().');const i={},s={};s["Content-Type"]="application/json";const d=await this.request({path:"/auth/logout",method:"POST",headers:s,query:i,body:aA(t.body)},r);return new Fl(d)}async logout(t,r){await this.logoutRaw(t,r)}async refreshRaw(t,r){if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling refresh().');const i={},s={};s["Content-Type"]="application/json";const d=await this.request({path:"/auth/refresh",method:"POST",headers:s,query:i,body:fA(t.body)},r);return new Te(d,h=>tw(h))}async refresh(t,r){return await(await this.refreshRaw(t,r)).value()}}class tT extends fa{async createLabelRaw(t,r){if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling createLabel().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/labels",method:"POST",headers:s,query:i,body:LN(t.body)},r);return new Te(d,h=>ss(h))}async createLabel(t,r){return await(await this.createLabelRaw(t,r)).value()}async deleteLabelRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling deleteLabel().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/labels/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"DELETE",headers:s,query:i},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async deleteLabel(t,r){return await(await this.deleteLabelRaw(t,r)).value()}async getLabelRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling getLabel().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/labels/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return new Te(d,h=>ss(h))}async getLabel(t,r){return await(await this.getLabelRaw(t,r)).value()}async listLabelsRaw(t,r){const i={};t.key!=null&&(i.key=t.key),t.value!=null&&(i.value=t.value),t.q!=null&&(i.q=t.q);const s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/labels",method:"GET",headers:s,query:i},r);return new Te(d,h=>h.map(ss))}async listLabels(t={},r){return await(await this.listLabelsRaw(t,r)).value()}async updateLabelRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling updateLabel().');if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling updateLabel().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/labels/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"PATCH",headers:s,query:i,body:bA(t.body)},r);return new Te(d,h=>ss(h))}async updateLabel(t,r){return await(await this.updateLabelRaw(t,r)).value()}}class nT extends fa{async getMeRaw(t){const r={},i={};this.configuration&&this.configuration.apiKey&&(i["X-API-KEY"]=await this.configuration.apiKey("X-API-KEY")),this.configuration&&this.configuration.apiKey&&(i.Authorization=await this.configuration.apiKey("Authorization"));const u=await this.request({path:"/me",method:"GET",headers:i,query:r},t);return new Te(u,d=>zA(d))}async getMe(t){return await(await this.getMeRaw(t)).value()}async updateMeRaw(t,r){if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling updateMe().');const i={},s={};s["Content-Type"]="application/json",this.configuration&&this.configuration.apiKey&&(s["X-API-KEY"]=await this.configuration.apiKey("X-API-KEY")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/me",method:"PATCH",headers:s,query:i,body:GA(t.body)},r);return new Te(d,h=>dS(h))}async updateMe(t,r){return await(await this.updateMeRaw(t,r)).value()}}class aT extends fa{async createUserAPIKeyRaw(t,r){if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling createUserAPIKey().');const i={},s={};s["Content-Type"]="application/json",this.configuration&&this.configuration.apiKey&&(s["X-API-KEY"]=await this.configuration.apiKey("X-API-KEY")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/me/api-keys",method:"POST",headers:s,query:i,body:OA(t.body)},r);return new Te(d,h=>aw(h))}async createUserAPIKey(t,r){return await(await this.createUserAPIKeyRaw(t,r)).value()}async deleteUserAPIKeyRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling deleteUserAPIKey().');const i={},s={};this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/me/api-keys/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"DELETE",headers:s,query:i},r);return new Fl(d)}async deleteUserAPIKey(t,r){await this.deleteUserAPIKeyRaw(t,r)}async listUserAPIKeysRaw(t){const r={},i={};this.configuration&&this.configuration.apiKey&&(i["X-API-KEY"]=await this.configuration.apiKey("X-API-KEY")),this.configuration&&this.configuration.apiKey&&(i.Authorization=await this.configuration.apiKey("Authorization"));const u=await this.request({path:"/me/api-keys",method:"GET",headers:i,query:r},t);return new Te(u,d=>d.map(aw))}async listUserAPIKeys(t){return await(await this.listUserAPIKeysRaw(t)).value()}}class rT extends fa{async attachNodePoolAnnotationsRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling attachNodePoolAnnotations().');if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling attachNodePoolAnnotations().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}/annotations";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"POST",headers:s,query:i,body:RN(t.body)},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async attachNodePoolAnnotations(t,r){return await(await this.attachNodePoolAnnotationsRaw(t,r)).value()}async attachNodePoolLabelsRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling attachNodePoolLabels().');if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling attachNodePoolLabels().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}/labels";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"POST",headers:s,query:i,body:NN(t.body)},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async attachNodePoolLabels(t,r){return await(await this.attachNodePoolLabelsRaw(t,r)).value()}async attachNodePoolServersRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling attachNodePoolServers().');if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling attachNodePoolServers().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}/servers";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"POST",headers:s,query:i,body:TN(t.body)},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async attachNodePoolServers(t,r){return await(await this.attachNodePoolServersRaw(t,r)).value()}async attachNodePoolTaintsRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling attachNodePoolTaints().');if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling attachNodePoolTaints().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}/taints";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"POST",headers:s,query:i,body:MN(t.body)},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async attachNodePoolTaints(t,r){return await(await this.attachNodePoolTaintsRaw(t,r)).value()}async createNodePoolRaw(t,r){if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling createNodePool().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/node-pools",method:"POST",headers:s,query:i,body:qN(t.body)},r);return new Te(d,h=>Au(h))}async createNodePool(t,r){return await(await this.createNodePoolRaw(t,r)).value()}async deleteNodePoolRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling deleteNodePool().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"DELETE",headers:s,query:i},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async deleteNodePool(t,r){return await(await this.deleteNodePoolRaw(t,r)).value()}async detachNodePoolAnnotationRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling detachNodePoolAnnotation().');if(t.annotationId==null)throw new Se("annotationId",'Required parameter "annotationId" was null or undefined when calling detachNodePoolAnnotation().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}/annotations/{annotationId}";u=u.replace("{id}",encodeURIComponent(String(t.id))),u=u.replace("{annotationId}",encodeURIComponent(String(t.annotationId)));const d=await this.request({path:u,method:"DELETE",headers:s,query:i},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async detachNodePoolAnnotation(t,r){return await(await this.detachNodePoolAnnotationRaw(t,r)).value()}async detachNodePoolLabelRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling detachNodePoolLabel().');if(t.labelId==null)throw new Se("labelId",'Required parameter "labelId" was null or undefined when calling detachNodePoolLabel().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}/labels/{labelId}";u=u.replace("{id}",encodeURIComponent(String(t.id))),u=u.replace("{labelId}",encodeURIComponent(String(t.labelId)));const d=await this.request({path:u,method:"DELETE",headers:s,query:i},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async detachNodePoolLabel(t,r){return await(await this.detachNodePoolLabelRaw(t,r)).value()}async detachNodePoolServerRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling detachNodePoolServer().');if(t.serverId==null)throw new Se("serverId",'Required parameter "serverId" was null or undefined when calling detachNodePoolServer().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}/servers/{serverId}";u=u.replace("{id}",encodeURIComponent(String(t.id))),u=u.replace("{serverId}",encodeURIComponent(String(t.serverId)));const d=await this.request({path:u,method:"DELETE",headers:s,query:i},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async detachNodePoolServer(t,r){return await(await this.detachNodePoolServerRaw(t,r)).value()}async detachNodePoolTaintRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling detachNodePoolTaint().');if(t.taintId==null)throw new Se("taintId",'Required parameter "taintId" was null or undefined when calling detachNodePoolTaint().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}/taints/{taintId}";u=u.replace("{id}",encodeURIComponent(String(t.id))),u=u.replace("{taintId}",encodeURIComponent(String(t.taintId)));const d=await this.request({path:u,method:"DELETE",headers:s,query:i},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async detachNodePoolTaint(t,r){return await(await this.detachNodePoolTaintRaw(t,r)).value()}async getNodePoolRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling getNodePool().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return new Te(d,h=>Au(h))}async getNodePool(t,r){return await(await this.getNodePoolRaw(t,r)).value()}async listNodePoolAnnotationsRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling listNodePoolAnnotations().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}/annotations";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return new Te(d,h=>h.map(os))}async listNodePoolAnnotations(t,r){return await(await this.listNodePoolAnnotationsRaw(t,r)).value()}async listNodePoolLabelsRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling listNodePoolLabels().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}/labels";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return new Te(d,h=>h.map(ss))}async listNodePoolLabels(t,r){return await(await this.listNodePoolLabelsRaw(t,r)).value()}async listNodePoolServersRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling listNodePoolServers().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}/servers";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return new Te(d,h=>h.map(cs))}async listNodePoolServers(t,r){return await(await this.listNodePoolServersRaw(t,r)).value()}async listNodePoolTaintsRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling listNodePoolTaints().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}/taints";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return new Te(d,h=>h.map(ls))}async listNodePoolTaints(t,r){return await(await this.listNodePoolTaintsRaw(t,r)).value()}async listNodePoolsRaw(t,r){const i={};t.q!=null&&(i.q=t.q);const s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/node-pools",method:"GET",headers:s,query:i},r);return new Te(d,h=>h.map(Au))}async listNodePools(t={},r){return await(await this.listNodePoolsRaw(t,r)).value()}async updateNodePoolRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling updateNodePool().');if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling updateNodePool().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/node-pools/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"PATCH",headers:s,query:i,body:SA(t.body)},r);return new Te(d,h=>Au(h))}async updateNodePool(t,r){return await(await this.updateNodePoolRaw(t,r)).value()}}class iT extends fa{async addOrUpdateMemberRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling addOrUpdateMember().');if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling addOrUpdateMember().');const i={},s={};s["Content-Type"]="application/json",this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/orgs/{id}/members";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"POST",headers:s,query:i,body:KA(t.body)},r);return new Te(d,h=>nw(h))}async addOrUpdateMember(t,r){return await(await this.addOrUpdateMemberRaw(t,r)).value()}async createOrgRaw(t,r){if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling createOrg().');const i={},s={};s["Content-Type"]="application/json",this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/orgs",method:"POST",headers:s,query:i,body:LA(t.body)},r);return new Te(d,h=>zl(h))}async createOrg(t,r){return await(await this.createOrgRaw(t,r)).value()}async createOrgKeyRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling createOrgKey().');if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling createOrgKey().');const i={},s={};s["Content-Type"]="application/json",this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/orgs/{id}/api-keys";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"POST",headers:s,query:i,body:qA(t.body)},r);return new Te(d,h=>$A(h))}async createOrgKey(t,r){return await(await this.createOrgKeyRaw(t,r)).value()}async deleteOrgRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling deleteOrg().');const i={},s={};this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/orgs/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"DELETE",headers:s,query:i},r);return new Fl(d)}async deleteOrg(t,r){await this.deleteOrgRaw(t,r)}async deleteOrgKeyRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling deleteOrgKey().');if(t.keyId==null)throw new Se("keyId",'Required parameter "keyId" was null or undefined when calling deleteOrgKey().');const i={},s={};this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/orgs/{id}/api-keys/{key_id}";u=u.replace("{id}",encodeURIComponent(String(t.id))),u=u.replace("{key_id}",encodeURIComponent(String(t.keyId)));const d=await this.request({path:u,method:"DELETE",headers:s,query:i},r);return new Fl(d)}async deleteOrgKey(t,r){await this.deleteOrgKeyRaw(t,r)}async getOrgRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling getOrg().');const i={},s={};this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/orgs/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return new Te(d,h=>zl(h))}async getOrg(t,r){return await(await this.getOrgRaw(t,r)).value()}async listMembersRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling listMembers().');const i={},s={};this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/orgs/{id}/members";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return new Te(d,h=>h.map(nw))}async listMembers(t,r){return await(await this.listMembersRaw(t,r)).value()}async listMyOrgsRaw(t){const r={},i={};this.configuration&&this.configuration.apiKey&&(i.Authorization=await this.configuration.apiKey("Authorization"));const u=await this.request({path:"/orgs",method:"GET",headers:i,query:r},t);return new Te(u,d=>d.map(zl))}async listMyOrgs(t){return await(await this.listMyOrgsRaw(t)).value()}async listOrgKeysRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling listOrgKeys().');const i={},s={};this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/orgs/{id}/api-keys";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return new Te(d,h=>h.map(YA))}async listOrgKeys(t,r){return await(await this.listOrgKeysRaw(t,r)).value()}async removeMemberRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling removeMember().');if(t.userId==null)throw new Se("userId",'Required parameter "userId" was null or undefined when calling removeMember().');const i={},s={};this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/orgs/{id}/members/{user_id}";u=u.replace("{id}",encodeURIComponent(String(t.id))),u=u.replace("{user_id}",encodeURIComponent(String(t.userId)));const d=await this.request({path:u,method:"DELETE",headers:s,query:i},r);return new Fl(d)}async removeMember(t,r){await this.removeMemberRaw(t,r)}async updateOrgRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling updateOrg().');if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling updateOrg().');const i={},s={};s["Content-Type"]="application/json",this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/orgs/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"PATCH",headers:s,query:i,body:HA(t.body)},r);return new Te(d,h=>zl(h))}async updateOrg(t,r){return await(await this.updateOrgRaw(t,r)).value()}}class oT extends fa{async createServerRaw(t,r){if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling createServer().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/servers",method:"POST",headers:s,query:i,body:HN(t.body)},r);return new Te(d,h=>cs(h))}async createServer(t,r){return await(await this.createServerRaw(t,r)).value()}async deleteServerRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling deleteServer().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/servers/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"DELETE",headers:s,query:i},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async deleteServer(t,r){return await(await this.deleteServerRaw(t,r)).value()}async getServerRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling getServer().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/servers/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return new Te(d,h=>cs(h))}async getServer(t,r){return await(await this.getServerRaw(t,r)).value()}async listServersRaw(t,r){const i={};t.status!=null&&(i.status=t.status),t.role!=null&&(i.role=t.role);const s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/servers",method:"GET",headers:s,query:i},r);return new Te(d,h=>h.map(cs))}async listServers(t={},r){return await(await this.listServersRaw(t,r)).value()}async updateServerRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling updateServer().');if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling updateServer().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/servers/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"PATCH",headers:s,query:i,body:EA(t.body)},r);return new Te(d,h=>cs(h))}async updateServer(t,r){return await(await this.updateServerRaw(t,r)).value()}}class sT extends fa{async createSSHKeyRaw(t,r){if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling createSSHKey().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/ssh",method:"POST",headers:s,query:i,body:$N(t.body)},r);return new Te(d,h=>ew(h))}async createSSHKey(t,r){return await(await this.createSSHKeyRaw(t,r)).value()}async deleteSSHKeyRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling deleteSSHKey().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/ssh/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"DELETE",headers:s,query:i},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async deleteSSHKey(t,r){return await(await this.deleteSSHKeyRaw(t,r)).value()}async downloadSSHKeyRaw(t,r){if(t.xOrgID==null)throw new Se("xOrgID",'Required parameter "xOrgID" was null or undefined when calling downloadSSHKey().');if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling downloadSSHKey().');if(t.part==null)throw new Se("part",'Required parameter "part" was null or undefined when calling downloadSSHKey().');const i={};t.part!=null&&(i.part=t.part);const s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/ssh/{id}/download";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async downloadSSHKey(t,r){return await(await this.downloadSSHKeyRaw(t,r)).value()}async getSSHKeyRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling getSSHKey().');const i={};t.reveal!=null&&(i.reveal=t.reveal);const s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/ssh/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return new Te(d,h=>pA(h))}async getSSHKey(t,r){return await(await this.getSSHKeyRaw(t,r)).value()}async listPublicSshKeysRaw(t,r){const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/ssh",method:"GET",headers:s,query:i},r);return new Te(d,h=>h.map(ew))}async listPublicSshKeys(t={},r){return await(await this.listPublicSshKeysRaw(t,r)).value()}}class lT extends fa{async createTaintRaw(t,r){if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling createTaint().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/taints",method:"POST",headers:s,query:i,body:GN(t.body)},r);return new Te(d,h=>ls(h))}async createTaint(t,r){return await(await this.createTaintRaw(t,r)).value()}async deleteTaintRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling deleteTaint().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/taints/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"DELETE",headers:s,query:i},r);return this.isJsonMime(d.headers.get("content-type"))?new Te(d):new Tn(d)}async deleteTaint(t,r){return await(await this.deleteTaintRaw(t,r)).value()}async getTaintRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling getTaint().');const i={},s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/taints/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"GET",headers:s,query:i},r);return new Te(d,h=>ls(h))}async getTaint(t,r){return await(await this.getTaintRaw(t,r)).value()}async listTaintsRaw(t,r){const i={};t.key!=null&&(i.key=t.key),t.value!=null&&(i.value=t.value),t.q!=null&&(i.q=t.q);const s={};t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));const d=await this.request({path:"/taints",method:"GET",headers:s,query:i},r);return new Te(d,h=>h.map(ls))}async listTaints(t={},r){return await(await this.listTaintsRaw(t,r)).value()}async updateTaintRaw(t,r){if(t.id==null)throw new Se("id",'Required parameter "id" was null or undefined when calling updateTaint().');if(t.body==null)throw new Se("body",'Required parameter "body" was null or undefined when calling updateTaint().');const i={},s={};s["Content-Type"]="application/json",t.xOrgID!=null&&(s["X-Org-ID"]=String(t.xOrgID)),this.configuration&&this.configuration.apiKey&&(s["X-ORG-KEY"]=await this.configuration.apiKey("X-ORG-KEY")),this.configuration&&this.configuration.apiKey&&(s["X-ORG-SECRET"]=await this.configuration.apiKey("X-ORG-SECRET")),this.configuration&&this.configuration.apiKey&&(s.Authorization=await this.configuration.apiKey("Authorization"));let u="/taints/{id}";u=u.replace("{id}",encodeURIComponent(String(t.id)));const d=await this.request({path:u,method:"PATCH",headers:s,query:i,body:jA(t.body)},r);return new Te(d,h=>ls(h))}async updateTaint(t,r){return await(await this.updateTaintRaw(t,r)).value()}}const Vp="/api/v1";function cT(){return new lS({basePath:Vp,accessToken:async()=>wn.getAccessToken()??"",middleware:[{async pre(e){const t=new Headers(e.init?.headers??{});e.init?.body!=null&&!(e.init.body instanceof FormData)&&!(e.init.body instanceof Blob)&&!t.has("Content-Type")&&t.set("Content-Type","application/json");const i=wn.getAccessToken();i&&t.set("Authorization",`Bearer ${i}`);const s=La.get();return s&&t.set("X-Org-ID",s),{...e,init:{...e.init,headers:t}}},async post(e){return e.response}}]})}function Ha(e){return new e(cT())}function uT(){return Ha(eT)}function dT(){return Ha(nT)}function fT(){return Ha(aT)}function Rd(){return Ha(iT)}function hT(){return Ha(sT)}function mT(){return Ha(oT)}function pT(){return Ha(lT)}function gT(){return Ha(tT)}function yT(){return Ha(JA)}function vT(){return Ha(WA)}function xT(){return Ha(rT)}let Tu=null;async function bT(){const e=wn.get();if(!e?.refresh_token)return!1;try{const t=await fetch(`${Vp}/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:e.refresh_token})});if(!t.ok)return!1;const r=await t.json();return wn.set(r),!0}catch{return!1}}async function rw(){return Tu||(Tu=bT().finally(()=>{Tu=null})),Tu}function wT(e){return e?.status===401||e?.cause?.status===401||e?.response?.status===401||e instanceof Response&&e.status===401}async function Pe(e){wn.willExpireSoon?.(30)&&await rw();try{return await e()}catch(t){if(!wT(t)||!await rw())throw t;return await e()}}const iw=dT(),Cm=fT(),Vi={getMe:()=>Pe(async()=>await iw.getMe()),updateMe:e=>Pe(async()=>await iw.updateMe({body:e})),listKeys:()=>Pe(async()=>await Cm.listUserAPIKeys()),createKey:e=>Pe(async()=>await Cm.createUserAPIKey({body:e})),deleteKey:e=>Pe(async()=>(await Cm.deleteUserAPIKey({id:e}),!0))};var fS={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},ow=Q.createContext&&Q.createContext(fS),ST=["attr","size","title"];function _T(e,t){if(e==null)return{};var r=ET(e,t),i,s;if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);for(s=0;s=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}function ET(e,t){if(e==null)return{};var r={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;r[i]=e[i]}return r}function od(){return od=Object.assign?Object.assign.bind():function(e){for(var t=1;tQ.createElement(t.tag,sd({key:r},t.attr),hS(t.child)))}function mS(e){return t=>Q.createElement(OT,od({attr:sd({},e.attr)},t),hS(e.child))}function OT(e){var t=r=>{var{attr:i,size:s,title:u}=e,d=_T(e,ST),h=s||r.size||"1em",g;return r.className&&(g=r.className),e.className&&(g=(g?g+" ":"")+e.className),Q.createElement("svg",od({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},r.attr,i,d,{className:g,style:sd(sd({color:e.color||r.color},r.style),e.style),height:h,width:h,xmlns:"http://www.w3.org/2000/svg"}),u&&Q.createElement("title",null,u),e.children)};return ow!==void 0?Q.createElement(ow.Consumer,null,r=>t(r)):t(fS)}function NT(e){return mS({attr:{viewBox:"0 0 1024 1024"},child:[{tag:"path",attr:{d:"M888 680h-54V540H546v-92h238c8.8 0 16-7.2 16-16V168c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v264c0 8.8 7.2 16 16 16h238v92H190v140h-54c-4.4 0-8 3.6-8 8v176c0 4.4 3.6 8 8 8h176c4.4 0 8-3.6 8-8V688c0-4.4-3.6-8-8-8h-54v-72h220v72h-54c-4.4 0-8 3.6-8 8v176c0 4.4 3.6 8 8 8h176c4.4 0 8-3.6 8-8V688c0-4.4-3.6-8-8-8h-54v-72h220v72h-54c-4.4 0-8 3.6-8 8v176c0 4.4 3.6 8 8 8h176c4.4 0 8-3.6 8-8V688c0-4.4-3.6-8-8-8zM256 805.3c0 1.5-1.2 2.7-2.7 2.7h-58.7c-1.5 0-2.7-1.2-2.7-2.7v-58.7c0-1.5 1.2-2.7 2.7-2.7h58.7c1.5 0 2.7 1.2 2.7 2.7v58.7zm288 0c0 1.5-1.2 2.7-2.7 2.7h-58.7c-1.5 0-2.7-1.2-2.7-2.7v-58.7c0-1.5 1.2-2.7 2.7-2.7h58.7c1.5 0 2.7 1.2 2.7 2.7v58.7zM288 384V216h448v168H288zm544 421.3c0 1.5-1.2 2.7-2.7 2.7h-58.7c-1.5 0-2.7-1.2-2.7-2.7v-58.7c0-1.5 1.2-2.7 2.7-2.7h58.7c1.5 0 2.7 1.2 2.7 2.7v58.7zM360 300a40 40 0 1 0 80 0 40 40 0 1 0-80 0z"},child:[]}]})(e)}function AT(e){return mS({attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",strokeWidth:"2",d:"M3,6 L21,6 L3,6 Z M10,2 L10,4 M14,2 L14,4 M16,12 C18.3736719,13.1826446 20,15.6506255 20,19 L20,23 L4,23 L4,19 C4,15.6457258 5.6310898,13.1754259 8,12 M12,16.5 L12,23 M12,13 C15.3137085,13 18,10.3137085 18,7 C18,3.6862915 15.3137085,1 12,1 C8.6862915,1 6,3.6862915 6,7 C6,10.3137085 8.6862915,13 12,13 Z M8,12 C8,14.209139 9.790861,16 12,16 L12,16 C14.209139,16 16,14.209139 16,12"},child:[]}]})(e)}const TT=[{to:"/clusters",label:"Clusters",icon:NT},{to:"/node-pools",label:"Node Pools",icon:qO},{to:"/annotations",label:"Annotations",icon:t2},{to:"/labels",label:"Labels",icon:jd},{to:"/taints",label:"Taints",icon:R2},{to:"/servers",label:"Servers",icon:iS},{to:"/ssh",label:"SSH Keys",icon:c2}],DT=[{to:"/org/members",label:"Members",icon:sS},{to:"/org/api-keys",label:"Org API Keys",icon:h2},{to:"/org/settings",label:"Org Settings",icon:nS}],MT=[{to:"/me",label:"Profile",icon:M2}],zT=[{to:"/admin/users",label:"Users Admin",icon:sS},{to:"/admin/jobs",label:"Jobs Admin",icon:AT}];function pS(e){var t,r,i="";if(typeof e=="string"||typeof e=="number")i+=e;else if(typeof e=="object")if(Array.isArray(e)){var s=e.length;for(t=0;t{const t=KT(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:i}=e;return{getClassGroupId:d=>{const h=d.split(Hp);return h[0]===""&&h.length!==1&&h.shift(),yS(h,t)||PT(d)},getConflictingClassGroupIds:(d,h)=>{const g=r[d]||[];return h&&i[d]?[...g,...i[d]]:g}}},yS=(e,t)=>{if(e.length===0)return t.classGroupId;const r=e[0],i=t.nextPart.get(r),s=i?yS(e.slice(1),i):void 0;if(s)return s;if(t.validators.length===0)return;const u=e.join(Hp);return t.validators.find(({validator:d})=>d(u))?.classGroupId},lw=/^\[(.+)\]$/,PT=e=>{if(lw.test(e)){const t=lw.exec(e)[1],r=t?.substring(0,t.indexOf(":"));if(r)return"arbitrary.."+r}},KT=e=>{const{theme:t,classGroups:r}=e,i={nextPart:new Map,validators:[]};for(const s in r)sp(r[s],i,s,t);return i},sp=(e,t,r,i)=>{e.forEach(s=>{if(typeof s=="string"){const u=s===""?t:cw(t,s);u.classGroupId=r;return}if(typeof s=="function"){if(IT(s)){sp(s(i),t,r,i);return}t.validators.push({validator:s,classGroupId:r});return}Object.entries(s).forEach(([u,d])=>{sp(d,cw(t,u),r,i)})})},cw=(e,t)=>{let r=e;return t.split(Hp).forEach(i=>{r.nextPart.has(i)||r.nextPart.set(i,{nextPart:new Map,validators:[]}),r=r.nextPart.get(i)}),r},IT=e=>e.isThemeGetter,LT=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=new Map,i=new Map;const s=(u,d)=>{r.set(u,d),t++,t>e&&(t=0,i=r,r=new Map)};return{get(u){let d=r.get(u);if(d!==void 0)return d;if((d=i.get(u))!==void 0)return s(u,d),d},set(u,d){r.has(u)?r.set(u,d):s(u,d)}}},lp="!",cp=":",UT=cp.length,qT=e=>{const{prefix:t,experimentalParseClassName:r}=e;let i=s=>{const u=[];let d=0,h=0,g=0,y;for(let j=0;jg?y-g:void 0;return{modifiers:u,hasImportantModifier:w,baseClassName:v,maybePostfixModifierPosition:E}};if(t){const s=t+cp,u=i;i=d=>d.startsWith(s)?u(d.substring(s.length)):{isExternal:!0,modifiers:[],hasImportantModifier:!1,baseClassName:d,maybePostfixModifierPosition:void 0}}if(r){const s=i;i=u=>r({className:u,parseClassName:s})}return i},FT=e=>e.endsWith(lp)?e.substring(0,e.length-1):e.startsWith(lp)?e.substring(1):e,$T=e=>{const t=Object.fromEntries(e.orderSensitiveModifiers.map(i=>[i,!0]));return i=>{if(i.length<=1)return i;const s=[];let u=[];return i.forEach(d=>{d[0]==="["||t[d]?(s.push(...u.sort(),d),u=[]):u.push(d)}),s.push(...u.sort()),s}},VT=e=>({cache:LT(e.cacheSize),parseClassName:qT(e),sortModifiers:$T(e),...kT(e)}),HT=/\s+/,BT=(e,t)=>{const{parseClassName:r,getClassGroupId:i,getConflictingClassGroupIds:s,sortModifiers:u}=t,d=[],h=e.trim().split(HT);let g="";for(let y=h.length-1;y>=0;y-=1){const x=h[y],{isExternal:v,modifiers:w,hasImportantModifier:E,baseClassName:j,maybePostfixModifierPosition:S}=r(x);if(v){g=x+(g.length>0?" "+g:g);continue}let N=!!S,D=i(N?j.substring(0,S):j);if(!D){if(!N){g=x+(g.length>0?" "+g:g);continue}if(D=i(j),!D){g=x+(g.length>0?" "+g:g);continue}N=!1}const A=u(w).join(":"),O=E?A+lp:A,C=O+D;if(d.includes(C))continue;d.push(C);const T=s(D,N);for(let U=0;U0?" "+g:g)}return g};function GT(){let e=0,t,r,i="";for(;e{if(typeof e=="string")return e;let t,r="";for(let i=0;iv(x),e());return r=VT(y),i=r.cache.get,s=r.cache.set,u=h,h(g)}function h(g){const y=i(g);if(y)return y;const x=BT(g,r);return s(g,x),x}return function(){return u(GT.apply(null,arguments))}}const tn=e=>{const t=r=>r[e]||[];return t.isThemeGetter=!0,t},xS=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,bS=/^\((?:(\w[\w-]*):)?(.+)\)$/i,ZT=/^\d+\/\d+$/,YT=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,QT=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,JT=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,WT=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,eD=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Qo=e=>ZT.test(e),tt=e=>!!e&&!Number.isNaN(Number(e)),ui=e=>!!e&&Number.isInteger(Number(e)),jm=e=>e.endsWith("%")&&tt(e.slice(0,-1)),Ar=e=>YT.test(e),tD=()=>!0,nD=e=>QT.test(e)&&!JT.test(e),wS=()=>!1,aD=e=>WT.test(e),rD=e=>eD.test(e),iD=e=>!Ne(e)&&!Ae(e),oD=e=>ws(e,ES,wS),Ne=e=>xS.test(e),$i=e=>ws(e,CS,nD),Rm=e=>ws(e,dD,tt),uw=e=>ws(e,SS,wS),sD=e=>ws(e,_S,rD),Du=e=>ws(e,jS,aD),Ae=e=>bS.test(e),Sl=e=>Ss(e,CS),lD=e=>Ss(e,fD),dw=e=>Ss(e,SS),cD=e=>Ss(e,ES),uD=e=>Ss(e,_S),Mu=e=>Ss(e,jS,!0),ws=(e,t,r)=>{const i=xS.exec(e);return i?i[1]?t(i[1]):r(i[2]):!1},Ss=(e,t,r=!1)=>{const i=bS.exec(e);return i?i[1]?t(i[1]):r:!1},SS=e=>e==="position"||e==="percentage",_S=e=>e==="image"||e==="url",ES=e=>e==="length"||e==="size"||e==="bg-size",CS=e=>e==="length",dD=e=>e==="number",fD=e=>e==="family-name",jS=e=>e==="shadow",hD=()=>{const e=tn("color"),t=tn("font"),r=tn("text"),i=tn("font-weight"),s=tn("tracking"),u=tn("leading"),d=tn("breakpoint"),h=tn("container"),g=tn("spacing"),y=tn("radius"),x=tn("shadow"),v=tn("inset-shadow"),w=tn("text-shadow"),E=tn("drop-shadow"),j=tn("blur"),S=tn("perspective"),N=tn("aspect"),D=tn("ease"),A=tn("animate"),O=()=>["auto","avoid","all","avoid-page","page","left","right","column"],C=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],T=()=>[...C(),Ae,Ne],U=()=>["auto","hidden","clip","visible","scroll"],L=()=>["auto","contain","none"],V=()=>[Ae,Ne,g],fe=()=>[Qo,"full","auto",...V()],ge=()=>[ui,"none","subgrid",Ae,Ne],pe=()=>["auto",{span:["full",ui,Ae,Ne]},ui,Ae,Ne],ae=()=>[ui,"auto",Ae,Ne],le=()=>["auto","min","max","fr",Ae,Ne],he=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],be=()=>["start","end","center","stretch","center-safe","end-safe"],R=()=>["auto",...V()],P=()=>[Qo,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...V()],I=()=>[e,Ae,Ne],ee=()=>[...C(),dw,uw,{position:[Ae,Ne]}],me=()=>["no-repeat",{repeat:["","x","y","space","round"]}],Re=()=>["auto","cover","contain",cD,oD,{size:[Ae,Ne]}],G=()=>[jm,Sl,$i],Y=()=>["","none","full",y,Ae,Ne],ie=()=>["",tt,Sl,$i],oe=()=>["solid","dashed","dotted","double"],ve=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],W=()=>[tt,jm,dw,uw],xe=()=>["","none",j,Ae,Ne],Oe=()=>["none",tt,Ae,Ne],Ue=()=>["none",tt,Ae,Ne],Ye=()=>[tt,Ae,Ne],Ze=()=>[Qo,"full",...V()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[Ar],breakpoint:[Ar],color:[tD],container:[Ar],"drop-shadow":[Ar],ease:["in","out","in-out"],font:[iD],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[Ar],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[Ar],shadow:[Ar],spacing:["px",tt],text:[Ar],"text-shadow":[Ar],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",Qo,Ne,Ae,N]}],container:["container"],columns:[{columns:[tt,Ne,Ae,h]}],"break-after":[{"break-after":O()}],"break-before":[{"break-before":O()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:T()}],overflow:[{overflow:U()}],"overflow-x":[{"overflow-x":U()}],"overflow-y":[{"overflow-y":U()}],overscroll:[{overscroll:L()}],"overscroll-x":[{"overscroll-x":L()}],"overscroll-y":[{"overscroll-y":L()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:fe()}],"inset-x":[{"inset-x":fe()}],"inset-y":[{"inset-y":fe()}],start:[{start:fe()}],end:[{end:fe()}],top:[{top:fe()}],right:[{right:fe()}],bottom:[{bottom:fe()}],left:[{left:fe()}],visibility:["visible","invisible","collapse"],z:[{z:[ui,"auto",Ae,Ne]}],basis:[{basis:[Qo,"full","auto",h,...V()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[tt,Qo,"auto","initial","none",Ne]}],grow:[{grow:["",tt,Ae,Ne]}],shrink:[{shrink:["",tt,Ae,Ne]}],order:[{order:[ui,"first","last","none",Ae,Ne]}],"grid-cols":[{"grid-cols":ge()}],"col-start-end":[{col:pe()}],"col-start":[{"col-start":ae()}],"col-end":[{"col-end":ae()}],"grid-rows":[{"grid-rows":ge()}],"row-start-end":[{row:pe()}],"row-start":[{"row-start":ae()}],"row-end":[{"row-end":ae()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":le()}],"auto-rows":[{"auto-rows":le()}],gap:[{gap:V()}],"gap-x":[{"gap-x":V()}],"gap-y":[{"gap-y":V()}],"justify-content":[{justify:[...he(),"normal"]}],"justify-items":[{"justify-items":[...be(),"normal"]}],"justify-self":[{"justify-self":["auto",...be()]}],"align-content":[{content:["normal",...he()]}],"align-items":[{items:[...be(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...be(),{baseline:["","last"]}]}],"place-content":[{"place-content":he()}],"place-items":[{"place-items":[...be(),"baseline"]}],"place-self":[{"place-self":["auto",...be()]}],p:[{p:V()}],px:[{px:V()}],py:[{py:V()}],ps:[{ps:V()}],pe:[{pe:V()}],pt:[{pt:V()}],pr:[{pr:V()}],pb:[{pb:V()}],pl:[{pl:V()}],m:[{m:R()}],mx:[{mx:R()}],my:[{my:R()}],ms:[{ms:R()}],me:[{me:R()}],mt:[{mt:R()}],mr:[{mr:R()}],mb:[{mb:R()}],ml:[{ml:R()}],"space-x":[{"space-x":V()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":V()}],"space-y-reverse":["space-y-reverse"],size:[{size:P()}],w:[{w:[h,"screen",...P()]}],"min-w":[{"min-w":[h,"screen","none",...P()]}],"max-w":[{"max-w":[h,"screen","none","prose",{screen:[d]},...P()]}],h:[{h:["screen","lh",...P()]}],"min-h":[{"min-h":["screen","lh","none",...P()]}],"max-h":[{"max-h":["screen","lh",...P()]}],"font-size":[{text:["base",r,Sl,$i]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[i,Ae,Rm]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",jm,Ne]}],"font-family":[{font:[lD,Ne,t]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[s,Ae,Ne]}],"line-clamp":[{"line-clamp":[tt,"none",Ae,Rm]}],leading:[{leading:[u,...V()]}],"list-image":[{"list-image":["none",Ae,Ne]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",Ae,Ne]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:I()}],"text-color":[{text:I()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...oe(),"wavy"]}],"text-decoration-thickness":[{decoration:[tt,"from-font","auto",Ae,$i]}],"text-decoration-color":[{decoration:I()}],"underline-offset":[{"underline-offset":[tt,"auto",Ae,Ne]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:V()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Ae,Ne]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Ae,Ne]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:ee()}],"bg-repeat":[{bg:me()}],"bg-size":[{bg:Re()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},ui,Ae,Ne],radial:["",Ae,Ne],conic:[ui,Ae,Ne]},uD,sD]}],"bg-color":[{bg:I()}],"gradient-from-pos":[{from:G()}],"gradient-via-pos":[{via:G()}],"gradient-to-pos":[{to:G()}],"gradient-from":[{from:I()}],"gradient-via":[{via:I()}],"gradient-to":[{to:I()}],rounded:[{rounded:Y()}],"rounded-s":[{"rounded-s":Y()}],"rounded-e":[{"rounded-e":Y()}],"rounded-t":[{"rounded-t":Y()}],"rounded-r":[{"rounded-r":Y()}],"rounded-b":[{"rounded-b":Y()}],"rounded-l":[{"rounded-l":Y()}],"rounded-ss":[{"rounded-ss":Y()}],"rounded-se":[{"rounded-se":Y()}],"rounded-ee":[{"rounded-ee":Y()}],"rounded-es":[{"rounded-es":Y()}],"rounded-tl":[{"rounded-tl":Y()}],"rounded-tr":[{"rounded-tr":Y()}],"rounded-br":[{"rounded-br":Y()}],"rounded-bl":[{"rounded-bl":Y()}],"border-w":[{border:ie()}],"border-w-x":[{"border-x":ie()}],"border-w-y":[{"border-y":ie()}],"border-w-s":[{"border-s":ie()}],"border-w-e":[{"border-e":ie()}],"border-w-t":[{"border-t":ie()}],"border-w-r":[{"border-r":ie()}],"border-w-b":[{"border-b":ie()}],"border-w-l":[{"border-l":ie()}],"divide-x":[{"divide-x":ie()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":ie()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...oe(),"hidden","none"]}],"divide-style":[{divide:[...oe(),"hidden","none"]}],"border-color":[{border:I()}],"border-color-x":[{"border-x":I()}],"border-color-y":[{"border-y":I()}],"border-color-s":[{"border-s":I()}],"border-color-e":[{"border-e":I()}],"border-color-t":[{"border-t":I()}],"border-color-r":[{"border-r":I()}],"border-color-b":[{"border-b":I()}],"border-color-l":[{"border-l":I()}],"divide-color":[{divide:I()}],"outline-style":[{outline:[...oe(),"none","hidden"]}],"outline-offset":[{"outline-offset":[tt,Ae,Ne]}],"outline-w":[{outline:["",tt,Sl,$i]}],"outline-color":[{outline:I()}],shadow:[{shadow:["","none",x,Mu,Du]}],"shadow-color":[{shadow:I()}],"inset-shadow":[{"inset-shadow":["none",v,Mu,Du]}],"inset-shadow-color":[{"inset-shadow":I()}],"ring-w":[{ring:ie()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:I()}],"ring-offset-w":[{"ring-offset":[tt,$i]}],"ring-offset-color":[{"ring-offset":I()}],"inset-ring-w":[{"inset-ring":ie()}],"inset-ring-color":[{"inset-ring":I()}],"text-shadow":[{"text-shadow":["none",w,Mu,Du]}],"text-shadow-color":[{"text-shadow":I()}],opacity:[{opacity:[tt,Ae,Ne]}],"mix-blend":[{"mix-blend":[...ve(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":ve()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[tt]}],"mask-image-linear-from-pos":[{"mask-linear-from":W()}],"mask-image-linear-to-pos":[{"mask-linear-to":W()}],"mask-image-linear-from-color":[{"mask-linear-from":I()}],"mask-image-linear-to-color":[{"mask-linear-to":I()}],"mask-image-t-from-pos":[{"mask-t-from":W()}],"mask-image-t-to-pos":[{"mask-t-to":W()}],"mask-image-t-from-color":[{"mask-t-from":I()}],"mask-image-t-to-color":[{"mask-t-to":I()}],"mask-image-r-from-pos":[{"mask-r-from":W()}],"mask-image-r-to-pos":[{"mask-r-to":W()}],"mask-image-r-from-color":[{"mask-r-from":I()}],"mask-image-r-to-color":[{"mask-r-to":I()}],"mask-image-b-from-pos":[{"mask-b-from":W()}],"mask-image-b-to-pos":[{"mask-b-to":W()}],"mask-image-b-from-color":[{"mask-b-from":I()}],"mask-image-b-to-color":[{"mask-b-to":I()}],"mask-image-l-from-pos":[{"mask-l-from":W()}],"mask-image-l-to-pos":[{"mask-l-to":W()}],"mask-image-l-from-color":[{"mask-l-from":I()}],"mask-image-l-to-color":[{"mask-l-to":I()}],"mask-image-x-from-pos":[{"mask-x-from":W()}],"mask-image-x-to-pos":[{"mask-x-to":W()}],"mask-image-x-from-color":[{"mask-x-from":I()}],"mask-image-x-to-color":[{"mask-x-to":I()}],"mask-image-y-from-pos":[{"mask-y-from":W()}],"mask-image-y-to-pos":[{"mask-y-to":W()}],"mask-image-y-from-color":[{"mask-y-from":I()}],"mask-image-y-to-color":[{"mask-y-to":I()}],"mask-image-radial":[{"mask-radial":[Ae,Ne]}],"mask-image-radial-from-pos":[{"mask-radial-from":W()}],"mask-image-radial-to-pos":[{"mask-radial-to":W()}],"mask-image-radial-from-color":[{"mask-radial-from":I()}],"mask-image-radial-to-color":[{"mask-radial-to":I()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":C()}],"mask-image-conic-pos":[{"mask-conic":[tt]}],"mask-image-conic-from-pos":[{"mask-conic-from":W()}],"mask-image-conic-to-pos":[{"mask-conic-to":W()}],"mask-image-conic-from-color":[{"mask-conic-from":I()}],"mask-image-conic-to-color":[{"mask-conic-to":I()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:ee()}],"mask-repeat":[{mask:me()}],"mask-size":[{mask:Re()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",Ae,Ne]}],filter:[{filter:["","none",Ae,Ne]}],blur:[{blur:xe()}],brightness:[{brightness:[tt,Ae,Ne]}],contrast:[{contrast:[tt,Ae,Ne]}],"drop-shadow":[{"drop-shadow":["","none",E,Mu,Du]}],"drop-shadow-color":[{"drop-shadow":I()}],grayscale:[{grayscale:["",tt,Ae,Ne]}],"hue-rotate":[{"hue-rotate":[tt,Ae,Ne]}],invert:[{invert:["",tt,Ae,Ne]}],saturate:[{saturate:[tt,Ae,Ne]}],sepia:[{sepia:["",tt,Ae,Ne]}],"backdrop-filter":[{"backdrop-filter":["","none",Ae,Ne]}],"backdrop-blur":[{"backdrop-blur":xe()}],"backdrop-brightness":[{"backdrop-brightness":[tt,Ae,Ne]}],"backdrop-contrast":[{"backdrop-contrast":[tt,Ae,Ne]}],"backdrop-grayscale":[{"backdrop-grayscale":["",tt,Ae,Ne]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[tt,Ae,Ne]}],"backdrop-invert":[{"backdrop-invert":["",tt,Ae,Ne]}],"backdrop-opacity":[{"backdrop-opacity":[tt,Ae,Ne]}],"backdrop-saturate":[{"backdrop-saturate":[tt,Ae,Ne]}],"backdrop-sepia":[{"backdrop-sepia":["",tt,Ae,Ne]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":V()}],"border-spacing-x":[{"border-spacing-x":V()}],"border-spacing-y":[{"border-spacing-y":V()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",Ae,Ne]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[tt,"initial",Ae,Ne]}],ease:[{ease:["linear","initial",D,Ae,Ne]}],delay:[{delay:[tt,Ae,Ne]}],animate:[{animate:["none",A,Ae,Ne]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[S,Ae,Ne]}],"perspective-origin":[{"perspective-origin":T()}],rotate:[{rotate:Oe()}],"rotate-x":[{"rotate-x":Oe()}],"rotate-y":[{"rotate-y":Oe()}],"rotate-z":[{"rotate-z":Oe()}],scale:[{scale:Ue()}],"scale-x":[{"scale-x":Ue()}],"scale-y":[{"scale-y":Ue()}],"scale-z":[{"scale-z":Ue()}],"scale-3d":["scale-3d"],skew:[{skew:Ye()}],"skew-x":[{"skew-x":Ye()}],"skew-y":[{"skew-y":Ye()}],transform:[{transform:[Ae,Ne,"","none","gpu","cpu"]}],"transform-origin":[{origin:T()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Ze()}],"translate-x":[{"translate-x":Ze()}],"translate-y":[{"translate-y":Ze()}],"translate-z":[{"translate-z":Ze()}],"translate-none":["translate-none"],accent:[{accent:I()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:I()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Ae,Ne]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":V()}],"scroll-mx":[{"scroll-mx":V()}],"scroll-my":[{"scroll-my":V()}],"scroll-ms":[{"scroll-ms":V()}],"scroll-me":[{"scroll-me":V()}],"scroll-mt":[{"scroll-mt":V()}],"scroll-mr":[{"scroll-mr":V()}],"scroll-mb":[{"scroll-mb":V()}],"scroll-ml":[{"scroll-ml":V()}],"scroll-p":[{"scroll-p":V()}],"scroll-px":[{"scroll-px":V()}],"scroll-py":[{"scroll-py":V()}],"scroll-ps":[{"scroll-ps":V()}],"scroll-pe":[{"scroll-pe":V()}],"scroll-pt":[{"scroll-pt":V()}],"scroll-pr":[{"scroll-pr":V()}],"scroll-pb":[{"scroll-pb":V()}],"scroll-pl":[{"scroll-pl":V()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Ae,Ne]}],fill:[{fill:["none",...I()]}],"stroke-w":[{stroke:[tt,Sl,$i,Rm]}],stroke:[{stroke:["none",...I()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},mD=XT(hD);function de(...e){return mD(gS(e))}function Gi(e,t=24){return!e||e.length<=t*2+3?e:`${e.slice(0,t)}…${e.slice(-t)}`}function fw(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function Mn(...e){return t=>{let r=!1;const i=e.map(s=>{const u=fw(s,t);return!r&&typeof u=="function"&&(r=!0),u});if(r)return()=>{for(let s=0;s{let{children:u,...d}=i;RS(u)&&typeof ld=="function"&&(u=ld(u._payload));const h=p.Children.toArray(u),g=h.find(xD);if(g){const y=g.props.children,x=h.map(v=>v===g?p.Children.count(y)>1?p.Children.only(null):p.isValidElement(y)?y.props.children:null:v);return l.jsx(t,{...d,ref:s,children:p.isValidElement(y)?p.cloneElement(y,void 0,x):null})}return l.jsx(t,{...d,ref:s,children:u})});return r.displayName=`${e}.Slot`,r}var _s=Wl("Slot");function yD(e){const t=p.forwardRef((r,i)=>{let{children:s,...u}=r;if(RS(s)&&typeof ld=="function"&&(s=ld(s._payload)),p.isValidElement(s)){const d=wD(s),h=bD(u,s.props);return s.type!==p.Fragment&&(h.ref=i?Mn(i,d):d),p.cloneElement(s,h)}return p.Children.count(s)>1?p.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var vD=Symbol("radix.slottable");function xD(e){return p.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===vD}function bD(e,t){const r={...t};for(const i in t){const s=e[i],u=t[i];/^on[A-Z]/.test(i)?s&&u?r[i]=(...h)=>{const g=u(...h);return s(...h),g}:s&&(r[i]=s):i==="style"?r[i]={...s,...u}:i==="className"&&(r[i]=[s,u].filter(Boolean).join(" "))}return{...e,...r}}function wD(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}const hw=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,mw=gS,Bp=(e,t)=>r=>{var i;if(t?.variants==null)return mw(e,r?.class,r?.className);const{variants:s,defaultVariants:u}=t,d=Object.keys(s).map(y=>{const x=r?.[y],v=u?.[y];if(x===null)return null;const w=hw(x)||hw(v);return s[y][w]}),h=r&&Object.entries(r).reduce((y,x)=>{let[v,w]=x;return w===void 0||(y[v]=w),y},{}),g=t==null||(i=t.compoundVariants)===null||i===void 0?void 0:i.reduce((y,x)=>{let{class:v,className:w,...E}=x;return Object.entries(E).every(j=>{let[S,N]=j;return Array.isArray(N)?N.includes({...u,...h}[S]):{...u,...h}[S]===N})?[...y,v,w]:y},[]);return mw(e,d,g,r?.class,r?.className)},Gp=Bp("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function se({className:e,variant:t,size:r,asChild:i=!1,...s}){const u=i?_s:"button";return l.jsx(u,{"data-slot":"button",className:de(Gp({variant:t,size:r,className:e})),...s})}var pw=1,SD=.9,_D=.8,ED=.17,Om=.1,Nm=.999,CD=.9999,jD=.99,RD=/[\\\/_+.#"@\[\(\{&]/,OD=/[\\\/_+.#"@\[\(\{&]/g,ND=/[\s-]/,OS=/[\s-]/g;function up(e,t,r,i,s,u,d){if(u===t.length)return s===e.length?pw:jD;var h=`${s},${u}`;if(d[h]!==void 0)return d[h];for(var g=i.charAt(u),y=r.indexOf(g,s),x=0,v,w,E,j;y>=0;)v=up(e,t,r,i,y+1,u+1,d),v>x&&(y===s?v*=pw:RD.test(e.charAt(y-1))?(v*=_D,E=e.slice(s,y-1).match(OD),E&&s>0&&(v*=Math.pow(Nm,E.length))):ND.test(e.charAt(y-1))?(v*=SD,j=e.slice(s,y-1).match(OS),j&&s>0&&(v*=Math.pow(Nm,j.length))):(v*=ED,s>0&&(v*=Math.pow(Nm,y-s))),e.charAt(y)!==t.charAt(u)&&(v*=CD)),(vv&&(v=w*Om)),v>x&&(x=v),y=r.indexOf(g,y+1);return d[h]=x,x}function gw(e){return e.toLowerCase().replace(OS," ")}function AD(e,t,r){return e=r&&r.length>0?`${e+" "+r.join(" ")}`:e,up(e,t,gw(e),gw(t),0,0,{})}function Ce(e,t,{checkForDefaultPrevented:r=!0}={}){return function(s){if(e?.(s),r===!1||!s.defaultPrevented)return t?.(s)}}function TD(e,t){const r=p.createContext(t),i=u=>{const{children:d,...h}=u,g=p.useMemo(()=>h,Object.values(h));return l.jsx(r.Provider,{value:g,children:d})};i.displayName=e+"Provider";function s(u){const d=p.useContext(r);if(d)return d;if(t!==void 0)return t;throw new Error(`\`${u}\` must be used within \`${e}\``)}return[i,s]}function ur(e,t=[]){let r=[];function i(u,d){const h=p.createContext(d),g=r.length;r=[...r,d];const y=v=>{const{scope:w,children:E,...j}=v,S=w?.[e]?.[g]||h,N=p.useMemo(()=>j,Object.values(j));return l.jsx(S.Provider,{value:N,children:E})};y.displayName=u+"Provider";function x(v,w){const E=w?.[e]?.[g]||h,j=p.useContext(E);if(j)return j;if(d!==void 0)return d;throw new Error(`\`${v}\` must be used within \`${u}\``)}return[y,x]}const s=()=>{const u=r.map(d=>p.createContext(d));return function(h){const g=h?.[e]||u;return p.useMemo(()=>({[`__scope${e}`]:{...h,[e]:g}}),[h,g])}};return s.scopeName=e,[i,DD(s,...t)]}function DD(...e){const t=e[0];if(e.length===1)return t;const r=()=>{const i=e.map(s=>({useScope:s(),scopeName:s.scopeName}));return function(u){const d=i.reduce((h,{useScope:g,scopeName:y})=>{const v=g(u)[`__scope${y}`];return{...h,...v}},{});return p.useMemo(()=>({[`__scope${t.scopeName}`]:d}),[d])}};return r.scopeName=t.scopeName,r}var on=globalThis?.document?p.useLayoutEffect:()=>{},MD=kp[" useId ".trim().toString()]||(()=>{}),zD=0;function Sn(e){const[t,r]=p.useState(MD());return on(()=>{r(i=>i??String(zD++))},[e]),e||(t?`radix-${t}`:"")}var kD=kp[" useInsertionEffect ".trim().toString()]||on;function Yi({prop:e,defaultProp:t,onChange:r=()=>{},caller:i}){const[s,u,d]=PD({defaultProp:t,onChange:r}),h=e!==void 0,g=h?e:s;{const x=p.useRef(e!==void 0);p.useEffect(()=>{const v=x.current;v!==h&&console.warn(`${i} is changing from ${v?"controlled":"uncontrolled"} to ${h?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),x.current=h},[h,i])}const y=p.useCallback(x=>{if(h){const v=KD(x)?x(e):x;v!==e&&d.current?.(v)}else u(x)},[h,e,u,d]);return[g,y]}function PD({defaultProp:e,onChange:t}){const[r,i]=p.useState(e),s=p.useRef(r),u=p.useRef(t);return kD(()=>{u.current=t},[t]),p.useEffect(()=>{s.current!==r&&(u.current?.(r),s.current=r)},[r,s]),[r,i,u]}function KD(e){return typeof e=="function"}function ID(e){const t=LD(e),r=p.forwardRef((i,s)=>{const{children:u,...d}=i,h=p.Children.toArray(u),g=h.find(qD);if(g){const y=g.props.children,x=h.map(v=>v===g?p.Children.count(y)>1?p.Children.only(null):p.isValidElement(y)?y.props.children:null:v);return l.jsx(t,{...d,ref:s,children:p.isValidElement(y)?p.cloneElement(y,void 0,x):null})}return l.jsx(t,{...d,ref:s,children:u})});return r.displayName=`${e}.Slot`,r}function LD(e){const t=p.forwardRef((r,i)=>{const{children:s,...u}=r;if(p.isValidElement(s)){const d=$D(s),h=FD(u,s.props);return s.type!==p.Fragment&&(h.ref=i?Mn(i,d):d),p.cloneElement(s,h)}return p.Children.count(s)>1?p.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var UD=Symbol("radix.slottable");function qD(e){return p.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===UD}function FD(e,t){const r={...t};for(const i in t){const s=e[i],u=t[i];/^on[A-Z]/.test(i)?s&&u?r[i]=(...h)=>{const g=u(...h);return s(...h),g}:s&&(r[i]=s):i==="style"?r[i]={...s,...u}:i==="className"&&(r[i]=[s,u].filter(Boolean).join(" "))}return{...e,...r}}function $D(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}var VD=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],rt=VD.reduce((e,t)=>{const r=ID(`Primitive.${t}`),i=p.forwardRef((s,u)=>{const{asChild:d,...h}=s,g=d?r:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(g,{...h,ref:u})});return i.displayName=`Primitive.${t}`,{...e,[t]:i}},{});function NS(e,t){e&&Ed.flushSync(()=>e.dispatchEvent(t))}function Fa(e){const t=p.useRef(e);return p.useEffect(()=>{t.current=e}),p.useMemo(()=>(...r)=>t.current?.(...r),[])}function HD(e,t=globalThis?.document){const r=Fa(e);p.useEffect(()=>{const i=s=>{s.key==="Escape"&&r(s)};return t.addEventListener("keydown",i,{capture:!0}),()=>t.removeEventListener("keydown",i,{capture:!0})},[r,t])}var BD="DismissableLayer",dp="dismissableLayer.update",GD="dismissableLayer.pointerDownOutside",XD="dismissableLayer.focusOutside",yw,AS=p.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),Es=p.forwardRef((e,t)=>{const{disableOutsidePointerEvents:r=!1,onEscapeKeyDown:i,onPointerDownOutside:s,onFocusOutside:u,onInteractOutside:d,onDismiss:h,...g}=e,y=p.useContext(AS),[x,v]=p.useState(null),w=x?.ownerDocument??globalThis?.document,[,E]=p.useState({}),j=dt(t,L=>v(L)),S=Array.from(y.layers),[N]=[...y.layersWithOutsidePointerEventsDisabled].slice(-1),D=S.indexOf(N),A=x?S.indexOf(x):-1,O=y.layersWithOutsidePointerEventsDisabled.size>0,C=A>=D,T=QD(L=>{const V=L.target,fe=[...y.branches].some(ge=>ge.contains(V));!C||fe||(s?.(L),d?.(L),L.defaultPrevented||h?.())},w),U=JD(L=>{const V=L.target;[...y.branches].some(ge=>ge.contains(V))||(u?.(L),d?.(L),L.defaultPrevented||h?.())},w);return HD(L=>{A===y.layers.size-1&&(i?.(L),!L.defaultPrevented&&h&&(L.preventDefault(),h()))},w),p.useEffect(()=>{if(x)return r&&(y.layersWithOutsidePointerEventsDisabled.size===0&&(yw=w.body.style.pointerEvents,w.body.style.pointerEvents="none"),y.layersWithOutsidePointerEventsDisabled.add(x)),y.layers.add(x),vw(),()=>{r&&y.layersWithOutsidePointerEventsDisabled.size===1&&(w.body.style.pointerEvents=yw)}},[x,w,r,y]),p.useEffect(()=>()=>{x&&(y.layers.delete(x),y.layersWithOutsidePointerEventsDisabled.delete(x),vw())},[x,y]),p.useEffect(()=>{const L=()=>E({});return document.addEventListener(dp,L),()=>document.removeEventListener(dp,L)},[]),l.jsx(rt.div,{...g,ref:j,style:{pointerEvents:O?C?"auto":"none":void 0,...e.style},onFocusCapture:Ce(e.onFocusCapture,U.onFocusCapture),onBlurCapture:Ce(e.onBlurCapture,U.onBlurCapture),onPointerDownCapture:Ce(e.onPointerDownCapture,T.onPointerDownCapture)})});Es.displayName=BD;var ZD="DismissableLayerBranch",YD=p.forwardRef((e,t)=>{const r=p.useContext(AS),i=p.useRef(null),s=dt(t,i);return p.useEffect(()=>{const u=i.current;if(u)return r.branches.add(u),()=>{r.branches.delete(u)}},[r.branches]),l.jsx(rt.div,{...e,ref:s})});YD.displayName=ZD;function QD(e,t=globalThis?.document){const r=Fa(e),i=p.useRef(!1),s=p.useRef(()=>{});return p.useEffect(()=>{const u=h=>{if(h.target&&!i.current){let g=function(){TS(GD,r,y,{discrete:!0})};const y={originalEvent:h};h.pointerType==="touch"?(t.removeEventListener("click",s.current),s.current=g,t.addEventListener("click",s.current,{once:!0})):g()}else t.removeEventListener("click",s.current);i.current=!1},d=window.setTimeout(()=>{t.addEventListener("pointerdown",u)},0);return()=>{window.clearTimeout(d),t.removeEventListener("pointerdown",u),t.removeEventListener("click",s.current)}},[t,r]),{onPointerDownCapture:()=>i.current=!0}}function JD(e,t=globalThis?.document){const r=Fa(e),i=p.useRef(!1);return p.useEffect(()=>{const s=u=>{u.target&&!i.current&&TS(XD,r,{originalEvent:u},{discrete:!1})};return t.addEventListener("focusin",s),()=>t.removeEventListener("focusin",s)},[t,r]),{onFocusCapture:()=>i.current=!0,onBlurCapture:()=>i.current=!1}}function vw(){const e=new CustomEvent(dp);document.dispatchEvent(e)}function TS(e,t,r,{discrete:i}){const s=r.originalEvent.target,u=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:r});t&&s.addEventListener(e,t,{once:!0}),i?NS(s,u):s.dispatchEvent(u)}var Am="focusScope.autoFocusOnMount",Tm="focusScope.autoFocusOnUnmount",xw={bubbles:!1,cancelable:!0},WD="FocusScope",ec=p.forwardRef((e,t)=>{const{loop:r=!1,trapped:i=!1,onMountAutoFocus:s,onUnmountAutoFocus:u,...d}=e,[h,g]=p.useState(null),y=Fa(s),x=Fa(u),v=p.useRef(null),w=dt(t,S=>g(S)),E=p.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;p.useEffect(()=>{if(i){let S=function(O){if(E.paused||!h)return;const C=O.target;h.contains(C)?v.current=C:di(v.current,{select:!0})},N=function(O){if(E.paused||!h)return;const C=O.relatedTarget;C!==null&&(h.contains(C)||di(v.current,{select:!0}))},D=function(O){if(document.activeElement===document.body)for(const T of O)T.removedNodes.length>0&&di(h)};document.addEventListener("focusin",S),document.addEventListener("focusout",N);const A=new MutationObserver(D);return h&&A.observe(h,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",S),document.removeEventListener("focusout",N),A.disconnect()}}},[i,h,E.paused]),p.useEffect(()=>{if(h){ww.add(E);const S=document.activeElement;if(!h.contains(S)){const D=new CustomEvent(Am,xw);h.addEventListener(Am,y),h.dispatchEvent(D),D.defaultPrevented||(eM(iM(DS(h)),{select:!0}),document.activeElement===S&&di(h))}return()=>{h.removeEventListener(Am,y),setTimeout(()=>{const D=new CustomEvent(Tm,xw);h.addEventListener(Tm,x),h.dispatchEvent(D),D.defaultPrevented||di(S??document.body,{select:!0}),h.removeEventListener(Tm,x),ww.remove(E)},0)}}},[h,y,x,E]);const j=p.useCallback(S=>{if(!r&&!i||E.paused)return;const N=S.key==="Tab"&&!S.altKey&&!S.ctrlKey&&!S.metaKey,D=document.activeElement;if(N&&D){const A=S.currentTarget,[O,C]=tM(A);O&&C?!S.shiftKey&&D===C?(S.preventDefault(),r&&di(O,{select:!0})):S.shiftKey&&D===O&&(S.preventDefault(),r&&di(C,{select:!0})):D===A&&S.preventDefault()}},[r,i,E.paused]);return l.jsx(rt.div,{tabIndex:-1,...d,ref:w,onKeyDown:j})});ec.displayName=WD;function eM(e,{select:t=!1}={}){const r=document.activeElement;for(const i of e)if(di(i,{select:t}),document.activeElement!==r)return}function tM(e){const t=DS(e),r=bw(t,e),i=bw(t.reverse(),e);return[r,i]}function DS(e){const t=[],r=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:i=>{const s=i.tagName==="INPUT"&&i.type==="hidden";return i.disabled||i.hidden||s?NodeFilter.FILTER_SKIP:i.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;r.nextNode();)t.push(r.currentNode);return t}function bw(e,t){for(const r of e)if(!nM(r,{upTo:t}))return r}function nM(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function aM(e){return e instanceof HTMLInputElement&&"select"in e}function di(e,{select:t=!1}={}){if(e&&e.focus){const r=document.activeElement;e.focus({preventScroll:!0}),e!==r&&aM(e)&&t&&e.select()}}var ww=rM();function rM(){let e=[];return{add(t){const r=e[0];t!==r&&r?.pause(),e=Sw(e,t),e.unshift(t)},remove(t){e=Sw(e,t),e[0]?.resume()}}}function Sw(e,t){const r=[...e],i=r.indexOf(t);return i!==-1&&r.splice(i,1),r}function iM(e){return e.filter(t=>t.tagName!=="A")}var oM="Portal",Cs=p.forwardRef((e,t)=>{const{container:r,...i}=e,[s,u]=p.useState(!1);on(()=>u(!0),[]);const d=r||s&&globalThis?.document?.body;return d?U0.createPortal(l.jsx(rt.div,{...i,ref:t}),d):null});Cs.displayName=oM;function sM(e,t){return p.useReducer((r,i)=>t[r][i]??r,e)}var ja=e=>{const{present:t,children:r}=e,i=lM(t),s=typeof r=="function"?r({present:i.isPresent}):p.Children.only(r),u=dt(i.ref,cM(s));return typeof r=="function"||i.isPresent?p.cloneElement(s,{ref:u}):null};ja.displayName="Presence";function lM(e){const[t,r]=p.useState(),i=p.useRef(null),s=p.useRef(e),u=p.useRef("none"),d=e?"mounted":"unmounted",[h,g]=sM(d,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return p.useEffect(()=>{const y=zu(i.current);u.current=h==="mounted"?y:"none"},[h]),on(()=>{const y=i.current,x=s.current;if(x!==e){const w=u.current,E=zu(y);e?g("MOUNT"):E==="none"||y?.display==="none"?g("UNMOUNT"):g(x&&w!==E?"ANIMATION_OUT":"UNMOUNT"),s.current=e}},[e,g]),on(()=>{if(t){let y;const x=t.ownerDocument.defaultView??window,v=E=>{const S=zu(i.current).includes(CSS.escape(E.animationName));if(E.target===t&&S&&(g("ANIMATION_END"),!s.current)){const N=t.style.animationFillMode;t.style.animationFillMode="forwards",y=x.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=N)})}},w=E=>{E.target===t&&(u.current=zu(i.current))};return t.addEventListener("animationstart",w),t.addEventListener("animationcancel",v),t.addEventListener("animationend",v),()=>{x.clearTimeout(y),t.removeEventListener("animationstart",w),t.removeEventListener("animationcancel",v),t.removeEventListener("animationend",v)}}else g("ANIMATION_END")},[t,g]),{isPresent:["mounted","unmountSuspended"].includes(h),ref:p.useCallback(y=>{i.current=y?getComputedStyle(y):null,r(y)},[])}}function zu(e){return e?.animationName||"none"}function cM(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}var Dm=0;function Od(){p.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??_w()),document.body.insertAdjacentElement("beforeend",e[1]??_w()),Dm++,()=>{Dm===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),Dm--}},[])}function _w(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var ar=function(){return ar=Object.assign||function(t){for(var r,i=1,s=arguments.length;i"u")return jM;var t=RM(e),r=document.documentElement.clientWidth,i=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,i-r+t[2]-t[0])}},NM=PS(),ds="data-scroll-locked",AM=function(e,t,r,i){var s=e.left,u=e.top,d=e.right,h=e.gap;return r===void 0&&(r="margin"),` - .`.concat(dM,` { - overflow: hidden `).concat(i,`; - padding-right: `).concat(h,"px ").concat(i,`; - } - body[`).concat(ds,`] { - overflow: hidden `).concat(i,`; - overscroll-behavior: contain; - `).concat([t&&"position: relative ".concat(i,";"),r==="margin"&&` - padding-left: `.concat(s,`px; - padding-top: `).concat(u,`px; - padding-right: `).concat(d,`px; - margin-left:0; - margin-top:0; - margin-right: `).concat(h,"px ").concat(i,`; - `),r==="padding"&&"padding-right: ".concat(h,"px ").concat(i,";")].filter(Boolean).join(""),` - } - - .`).concat(Ju,` { - right: `).concat(h,"px ").concat(i,`; - } - - .`).concat(Wu,` { - margin-right: `).concat(h,"px ").concat(i,`; - } - - .`).concat(Ju," .").concat(Ju,` { - right: 0 `).concat(i,`; - } - - .`).concat(Wu," .").concat(Wu,` { - margin-right: 0 `).concat(i,`; - } - - body[`).concat(ds,`] { - `).concat(fM,": ").concat(h,`px; - } -`)},Cw=function(){var e=parseInt(document.body.getAttribute(ds)||"0",10);return isFinite(e)?e:0},TM=function(){p.useEffect(function(){return document.body.setAttribute(ds,(Cw()+1).toString()),function(){var e=Cw()-1;e<=0?document.body.removeAttribute(ds):document.body.setAttribute(ds,e.toString())}},[])},DM=function(e){var t=e.noRelative,r=e.noImportant,i=e.gapMode,s=i===void 0?"margin":i;TM();var u=p.useMemo(function(){return OM(s)},[s]);return p.createElement(NM,{styles:AM(u,!t,s,r?"":"!important")})},fp=!1;if(typeof window<"u")try{var ku=Object.defineProperty({},"passive",{get:function(){return fp=!0,!0}});window.addEventListener("test",ku,ku),window.removeEventListener("test",ku,ku)}catch{fp=!1}var Jo=fp?{passive:!1}:!1,MM=function(e){return e.tagName==="TEXTAREA"},KS=function(e,t){if(!(e instanceof Element))return!1;var r=window.getComputedStyle(e);return r[t]!=="hidden"&&!(r.overflowY===r.overflowX&&!MM(e)&&r[t]==="visible")},zM=function(e){return KS(e,"overflowY")},kM=function(e){return KS(e,"overflowX")},jw=function(e,t){var r=t.ownerDocument,i=t;do{typeof ShadowRoot<"u"&&i instanceof ShadowRoot&&(i=i.host);var s=IS(e,i);if(s){var u=LS(e,i),d=u[1],h=u[2];if(d>h)return!0}i=i.parentNode}while(i&&i!==r.body);return!1},PM=function(e){var t=e.scrollTop,r=e.scrollHeight,i=e.clientHeight;return[t,r,i]},KM=function(e){var t=e.scrollLeft,r=e.scrollWidth,i=e.clientWidth;return[t,r,i]},IS=function(e,t){return e==="v"?zM(t):kM(t)},LS=function(e,t){return e==="v"?PM(t):KM(t)},IM=function(e,t){return e==="h"&&t==="rtl"?-1:1},LM=function(e,t,r,i,s){var u=IM(e,window.getComputedStyle(t).direction),d=u*i,h=r.target,g=t.contains(h),y=!1,x=d>0,v=0,w=0;do{if(!h)break;var E=LS(e,h),j=E[0],S=E[1],N=E[2],D=S-N-u*j;(j||D)&&IS(e,h)&&(v+=D,w+=j);var A=h.parentNode;h=A&&A.nodeType===Node.DOCUMENT_FRAGMENT_NODE?A.host:A}while(!g&&h!==document.body||g&&(t.contains(h)||t===h));return(x&&Math.abs(v)<1||!x&&Math.abs(w)<1)&&(y=!0),y},Pu=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},Rw=function(e){return[e.deltaX,e.deltaY]},Ow=function(e){return e&&"current"in e?e.current:e},UM=function(e,t){return e[0]===t[0]&&e[1]===t[1]},qM=function(e){return` - .block-interactivity-`.concat(e,` {pointer-events: none;} - .allow-interactivity-`).concat(e,` {pointer-events: all;} -`)},FM=0,Wo=[];function $M(e){var t=p.useRef([]),r=p.useRef([0,0]),i=p.useRef(),s=p.useState(FM++)[0],u=p.useState(PS)[0],d=p.useRef(e);p.useEffect(function(){d.current=e},[e]),p.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(s));var S=uM([e.lockRef.current],(e.shards||[]).map(Ow),!0).filter(Boolean);return S.forEach(function(N){return N.classList.add("allow-interactivity-".concat(s))}),function(){document.body.classList.remove("block-interactivity-".concat(s)),S.forEach(function(N){return N.classList.remove("allow-interactivity-".concat(s))})}}},[e.inert,e.lockRef.current,e.shards]);var h=p.useCallback(function(S,N){if("touches"in S&&S.touches.length===2||S.type==="wheel"&&S.ctrlKey)return!d.current.allowPinchZoom;var D=Pu(S),A=r.current,O="deltaX"in S?S.deltaX:A[0]-D[0],C="deltaY"in S?S.deltaY:A[1]-D[1],T,U=S.target,L=Math.abs(O)>Math.abs(C)?"h":"v";if("touches"in S&&L==="h"&&U.type==="range")return!1;var V=jw(L,U);if(!V)return!0;if(V?T=L:(T=L==="v"?"h":"v",V=jw(L,U)),!V)return!1;if(!i.current&&"changedTouches"in S&&(O||C)&&(i.current=T),!T)return!0;var fe=i.current||T;return LM(fe,N,S,fe==="h"?O:C)},[]),g=p.useCallback(function(S){var N=S;if(!(!Wo.length||Wo[Wo.length-1]!==u)){var D="deltaY"in N?Rw(N):Pu(N),A=t.current.filter(function(T){return T.name===N.type&&(T.target===N.target||N.target===T.shadowParent)&&UM(T.delta,D)})[0];if(A&&A.should){N.cancelable&&N.preventDefault();return}if(!A){var O=(d.current.shards||[]).map(Ow).filter(Boolean).filter(function(T){return T.contains(N.target)}),C=O.length>0?h(N,O[0]):!d.current.noIsolation;C&&N.cancelable&&N.preventDefault()}}},[]),y=p.useCallback(function(S,N,D,A){var O={name:S,delta:N,target:D,should:A,shadowParent:VM(D)};t.current.push(O),setTimeout(function(){t.current=t.current.filter(function(C){return C!==O})},1)},[]),x=p.useCallback(function(S){r.current=Pu(S),i.current=void 0},[]),v=p.useCallback(function(S){y(S.type,Rw(S),S.target,h(S,e.lockRef.current))},[]),w=p.useCallback(function(S){y(S.type,Pu(S),S.target,h(S,e.lockRef.current))},[]);p.useEffect(function(){return Wo.push(u),e.setCallbacks({onScrollCapture:v,onWheelCapture:v,onTouchMoveCapture:w}),document.addEventListener("wheel",g,Jo),document.addEventListener("touchmove",g,Jo),document.addEventListener("touchstart",x,Jo),function(){Wo=Wo.filter(function(S){return S!==u}),document.removeEventListener("wheel",g,Jo),document.removeEventListener("touchmove",g,Jo),document.removeEventListener("touchstart",x,Jo)}},[]);var E=e.removeScrollBar,j=e.inert;return p.createElement(p.Fragment,null,j?p.createElement(u,{styles:qM(s)}):null,E?p.createElement(DM,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function VM(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const HM=xM(kS,$M);var tc=p.forwardRef(function(e,t){return p.createElement(Nd,ar({},e,{ref:t,sideCar:HM}))});tc.classNames=Nd.classNames;var BM=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},es=new WeakMap,Ku=new WeakMap,Iu={},Pm=0,US=function(e){return e&&(e.host||US(e.parentNode))},GM=function(e,t){return t.map(function(r){if(e.contains(r))return r;var i=US(r);return i&&e.contains(i)?i:(console.error("aria-hidden",r,"in not contained inside",e,". Doing nothing"),null)}).filter(function(r){return!!r})},XM=function(e,t,r,i){var s=GM(t,Array.isArray(e)?e:[e]);Iu[r]||(Iu[r]=new WeakMap);var u=Iu[r],d=[],h=new Set,g=new Set(s),y=function(v){!v||h.has(v)||(h.add(v),y(v.parentNode))};s.forEach(y);var x=function(v){!v||g.has(v)||Array.prototype.forEach.call(v.children,function(w){if(h.has(w))x(w);else try{var E=w.getAttribute(i),j=E!==null&&E!=="false",S=(es.get(w)||0)+1,N=(u.get(w)||0)+1;es.set(w,S),u.set(w,N),d.push(w),S===1&&j&&Ku.set(w,!0),N===1&&w.setAttribute(r,"true"),j||w.setAttribute(i,"true")}catch(D){console.error("aria-hidden: cannot operate on ",w,D)}})};return x(t),h.clear(),Pm++,function(){d.forEach(function(v){var w=es.get(v)-1,E=u.get(v)-1;es.set(v,w),u.set(v,E),w||(Ku.has(v)||v.removeAttribute(i),Ku.delete(v)),E||v.removeAttribute(r)}),Pm--,Pm||(es=new WeakMap,es=new WeakMap,Ku=new WeakMap,Iu={})}},Ad=function(e,t,r){r===void 0&&(r="data-aria-hidden");var i=Array.from(Array.isArray(e)?e:[e]),s=BM(e);return s?(i.push.apply(i,Array.from(s.querySelectorAll("[aria-live], script"))),XM(i,s,r,"aria-hidden")):function(){return null}};function ZM(e){const t=YM(e),r=p.forwardRef((i,s)=>{const{children:u,...d}=i,h=p.Children.toArray(u),g=h.find(JM);if(g){const y=g.props.children,x=h.map(v=>v===g?p.Children.count(y)>1?p.Children.only(null):p.isValidElement(y)?y.props.children:null:v);return l.jsx(t,{...d,ref:s,children:p.isValidElement(y)?p.cloneElement(y,void 0,x):null})}return l.jsx(t,{...d,ref:s,children:u})});return r.displayName=`${e}.Slot`,r}function YM(e){const t=p.forwardRef((r,i)=>{const{children:s,...u}=r;if(p.isValidElement(s)){const d=ez(s),h=WM(u,s.props);return s.type!==p.Fragment&&(h.ref=i?Mn(i,d):d),p.cloneElement(s,h)}return p.Children.count(s)>1?p.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var QM=Symbol("radix.slottable");function JM(e){return p.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===QM}function WM(e,t){const r={...t};for(const i in t){const s=e[i],u=t[i];/^on[A-Z]/.test(i)?s&&u?r[i]=(...h)=>{const g=u(...h);return s(...h),g}:s&&(r[i]=s):i==="style"?r[i]={...s,...u}:i==="className"&&(r[i]=[s,u].filter(Boolean).join(" "))}return{...e,...r}}function ez(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}var Td="Dialog",[qS,FS]=ur(Td),[tz,Ba]=qS(Td),$S=e=>{const{__scopeDialog:t,children:r,open:i,defaultOpen:s,onOpenChange:u,modal:d=!0}=e,h=p.useRef(null),g=p.useRef(null),[y,x]=Yi({prop:i,defaultProp:s??!1,onChange:u,caller:Td});return l.jsx(tz,{scope:t,triggerRef:h,contentRef:g,contentId:Sn(),titleId:Sn(),descriptionId:Sn(),open:y,onOpenChange:x,onOpenToggle:p.useCallback(()=>x(v=>!v),[x]),modal:d,children:r})};$S.displayName=Td;var VS="DialogTrigger",HS=p.forwardRef((e,t)=>{const{__scopeDialog:r,...i}=e,s=Ba(VS,r),u=dt(t,s.triggerRef);return l.jsx(rt.button,{type:"button","aria-haspopup":"dialog","aria-expanded":s.open,"aria-controls":s.contentId,"data-state":Yp(s.open),...i,ref:u,onClick:Ce(e.onClick,s.onOpenToggle)})});HS.displayName=VS;var Xp="DialogPortal",[nz,BS]=qS(Xp,{forceMount:void 0}),GS=e=>{const{__scopeDialog:t,forceMount:r,children:i,container:s}=e,u=Ba(Xp,t);return l.jsx(nz,{scope:t,forceMount:r,children:p.Children.map(i,d=>l.jsx(ja,{present:r||u.open,children:l.jsx(Cs,{asChild:!0,container:s,children:d})}))})};GS.displayName=Xp;var cd="DialogOverlay",XS=p.forwardRef((e,t)=>{const r=BS(cd,e.__scopeDialog),{forceMount:i=r.forceMount,...s}=e,u=Ba(cd,e.__scopeDialog);return u.modal?l.jsx(ja,{present:i||u.open,children:l.jsx(rz,{...s,ref:t})}):null});XS.displayName=cd;var az=ZM("DialogOverlay.RemoveScroll"),rz=p.forwardRef((e,t)=>{const{__scopeDialog:r,...i}=e,s=Ba(cd,r);return l.jsx(tc,{as:az,allowPinchZoom:!0,shards:[s.contentRef],children:l.jsx(rt.div,{"data-state":Yp(s.open),...i,ref:t,style:{pointerEvents:"auto",...i.style}})})}),Qi="DialogContent",ZS=p.forwardRef((e,t)=>{const r=BS(Qi,e.__scopeDialog),{forceMount:i=r.forceMount,...s}=e,u=Ba(Qi,e.__scopeDialog);return l.jsx(ja,{present:i||u.open,children:u.modal?l.jsx(iz,{...s,ref:t}):l.jsx(oz,{...s,ref:t})})});ZS.displayName=Qi;var iz=p.forwardRef((e,t)=>{const r=Ba(Qi,e.__scopeDialog),i=p.useRef(null),s=dt(t,r.contentRef,i);return p.useEffect(()=>{const u=i.current;if(u)return Ad(u)},[]),l.jsx(YS,{...e,ref:s,trapFocus:r.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:Ce(e.onCloseAutoFocus,u=>{u.preventDefault(),r.triggerRef.current?.focus()}),onPointerDownOutside:Ce(e.onPointerDownOutside,u=>{const d=u.detail.originalEvent,h=d.button===0&&d.ctrlKey===!0;(d.button===2||h)&&u.preventDefault()}),onFocusOutside:Ce(e.onFocusOutside,u=>u.preventDefault())})}),oz=p.forwardRef((e,t)=>{const r=Ba(Qi,e.__scopeDialog),i=p.useRef(!1),s=p.useRef(!1);return l.jsx(YS,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:u=>{e.onCloseAutoFocus?.(u),u.defaultPrevented||(i.current||r.triggerRef.current?.focus(),u.preventDefault()),i.current=!1,s.current=!1},onInteractOutside:u=>{e.onInteractOutside?.(u),u.defaultPrevented||(i.current=!0,u.detail.originalEvent.type==="pointerdown"&&(s.current=!0));const d=u.target;r.triggerRef.current?.contains(d)&&u.preventDefault(),u.detail.originalEvent.type==="focusin"&&s.current&&u.preventDefault()}})}),YS=p.forwardRef((e,t)=>{const{__scopeDialog:r,trapFocus:i,onOpenAutoFocus:s,onCloseAutoFocus:u,...d}=e,h=Ba(Qi,r),g=p.useRef(null),y=dt(t,g);return Od(),l.jsxs(l.Fragment,{children:[l.jsx(ec,{asChild:!0,loop:!0,trapped:i,onMountAutoFocus:s,onUnmountAutoFocus:u,children:l.jsx(Es,{role:"dialog",id:h.contentId,"aria-describedby":h.descriptionId,"aria-labelledby":h.titleId,"data-state":Yp(h.open),...d,ref:y,onDismiss:()=>h.onOpenChange(!1)})}),l.jsxs(l.Fragment,{children:[l.jsx(lz,{titleId:h.titleId}),l.jsx(uz,{contentRef:g,descriptionId:h.descriptionId})]})]})}),Zp="DialogTitle",QS=p.forwardRef((e,t)=>{const{__scopeDialog:r,...i}=e,s=Ba(Zp,r);return l.jsx(rt.h2,{id:s.titleId,...i,ref:t})});QS.displayName=Zp;var JS="DialogDescription",WS=p.forwardRef((e,t)=>{const{__scopeDialog:r,...i}=e,s=Ba(JS,r);return l.jsx(rt.p,{id:s.descriptionId,...i,ref:t})});WS.displayName=JS;var e1="DialogClose",t1=p.forwardRef((e,t)=>{const{__scopeDialog:r,...i}=e,s=Ba(e1,r);return l.jsx(rt.button,{type:"button",...i,ref:t,onClick:Ce(e.onClick,()=>s.onOpenChange(!1))})});t1.displayName=e1;function Yp(e){return e?"open":"closed"}var n1="DialogTitleWarning",[sz,a1]=TD(n1,{contentName:Qi,titleName:Zp,docsSlug:"dialog"}),lz=({titleId:e})=>{const t=a1(n1),r=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users. - -If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component. - -For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return p.useEffect(()=>{e&&(document.getElementById(e)||console.error(r))},[r,e]),null},cz="DialogDescriptionWarning",uz=({contentRef:e,descriptionId:t})=>{const i=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${a1(cz).contentName}}.`;return p.useEffect(()=>{const s=e.current?.getAttribute("aria-describedby");t&&s&&(document.getElementById(t)||console.warn(i))},[i,e,t]),null},Dd=$S,r1=HS,Md=GS,zd=XS,kd=ZS,Qp=QS,Jp=WS,nc=t1,dz=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],vi=dz.reduce((e,t)=>{const r=Wl(`Primitive.${t}`),i=p.forwardRef((s,u)=>{const{asChild:d,...h}=s,g=d?r:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(g,{...h,ref:u})});return i.displayName=`Primitive.${t}`,{...e,[t]:i}},{}),_l='[cmdk-group=""]',Km='[cmdk-group-items=""]',fz='[cmdk-group-heading=""]',i1='[cmdk-item=""]',Nw=`${i1}:not([aria-disabled="true"])`,hp="cmdk-item-select",ns="data-value",hz=(e,t,r)=>AD(e,t,r),o1=p.createContext(void 0),ac=()=>p.useContext(o1),s1=p.createContext(void 0),Wp=()=>p.useContext(s1),l1=p.createContext(void 0),c1=p.forwardRef((e,t)=>{let r=as(()=>{var G,Y;return{search:"",value:(Y=(G=e.value)!=null?G:e.defaultValue)!=null?Y:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),i=as(()=>new Set),s=as(()=>new Map),u=as(()=>new Map),d=as(()=>new Set),h=u1(e),{label:g,children:y,value:x,onValueChange:v,filter:w,shouldFilter:E,loop:j,disablePointerSelection:S=!1,vimBindings:N=!0,...D}=e,A=Sn(),O=Sn(),C=Sn(),T=p.useRef(null),U=Ez();Ji(()=>{if(x!==void 0){let G=x.trim();r.current.value=G,L.emit()}},[x]),Ji(()=>{U(6,le)},[]);let L=p.useMemo(()=>({subscribe:G=>(d.current.add(G),()=>d.current.delete(G)),snapshot:()=>r.current,setState:(G,Y,ie)=>{var oe,ve,W,xe;if(!Object.is(r.current[G],Y)){if(r.current[G]=Y,G==="search")ae(),ge(),U(1,pe);else if(G==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let Oe=document.getElementById(C);Oe?Oe.focus():(oe=document.getElementById(A))==null||oe.focus()}if(U(7,()=>{var Oe;r.current.selectedItemId=(Oe=he())==null?void 0:Oe.id,L.emit()}),ie||U(5,le),((ve=h.current)==null?void 0:ve.value)!==void 0){let Oe=Y??"";(xe=(W=h.current).onValueChange)==null||xe.call(W,Oe);return}}L.emit()}},emit:()=>{d.current.forEach(G=>G())}}),[]),V=p.useMemo(()=>({value:(G,Y,ie)=>{var oe;Y!==((oe=u.current.get(G))==null?void 0:oe.value)&&(u.current.set(G,{value:Y,keywords:ie}),r.current.filtered.items.set(G,fe(Y,ie)),U(2,()=>{ge(),L.emit()}))},item:(G,Y)=>(i.current.add(G),Y&&(s.current.has(Y)?s.current.get(Y).add(G):s.current.set(Y,new Set([G]))),U(3,()=>{ae(),ge(),r.current.value||pe(),L.emit()}),()=>{u.current.delete(G),i.current.delete(G),r.current.filtered.items.delete(G);let ie=he();U(4,()=>{ae(),ie?.getAttribute("id")===G&&pe(),L.emit()})}),group:G=>(s.current.has(G)||s.current.set(G,new Set),()=>{u.current.delete(G),s.current.delete(G)}),filter:()=>h.current.shouldFilter,label:g||e["aria-label"],getDisablePointerSelection:()=>h.current.disablePointerSelection,listId:A,inputId:C,labelId:O,listInnerRef:T}),[]);function fe(G,Y){var ie,oe;let ve=(oe=(ie=h.current)==null?void 0:ie.filter)!=null?oe:hz;return G?ve(G,r.current.search,Y):0}function ge(){if(!r.current.search||h.current.shouldFilter===!1)return;let G=r.current.filtered.items,Y=[];r.current.filtered.groups.forEach(oe=>{let ve=s.current.get(oe),W=0;ve.forEach(xe=>{let Oe=G.get(xe);W=Math.max(Oe,W)}),Y.push([oe,W])});let ie=T.current;be().sort((oe,ve)=>{var W,xe;let Oe=oe.getAttribute("id"),Ue=ve.getAttribute("id");return((W=G.get(Ue))!=null?W:0)-((xe=G.get(Oe))!=null?xe:0)}).forEach(oe=>{let ve=oe.closest(Km);ve?ve.appendChild(oe.parentElement===ve?oe:oe.closest(`${Km} > *`)):ie.appendChild(oe.parentElement===ie?oe:oe.closest(`${Km} > *`))}),Y.sort((oe,ve)=>ve[1]-oe[1]).forEach(oe=>{var ve;let W=(ve=T.current)==null?void 0:ve.querySelector(`${_l}[${ns}="${encodeURIComponent(oe[0])}"]`);W?.parentElement.appendChild(W)})}function pe(){let G=be().find(ie=>ie.getAttribute("aria-disabled")!=="true"),Y=G?.getAttribute(ns);L.setState("value",Y||void 0)}function ae(){var G,Y,ie,oe;if(!r.current.search||h.current.shouldFilter===!1){r.current.filtered.count=i.current.size;return}r.current.filtered.groups=new Set;let ve=0;for(let W of i.current){let xe=(Y=(G=u.current.get(W))==null?void 0:G.value)!=null?Y:"",Oe=(oe=(ie=u.current.get(W))==null?void 0:ie.keywords)!=null?oe:[],Ue=fe(xe,Oe);r.current.filtered.items.set(W,Ue),Ue>0&&ve++}for(let[W,xe]of s.current)for(let Oe of xe)if(r.current.filtered.items.get(Oe)>0){r.current.filtered.groups.add(W);break}r.current.filtered.count=ve}function le(){var G,Y,ie;let oe=he();oe&&(((G=oe.parentElement)==null?void 0:G.firstChild)===oe&&((ie=(Y=oe.closest(_l))==null?void 0:Y.querySelector(fz))==null||ie.scrollIntoView({block:"nearest"})),oe.scrollIntoView({block:"nearest"}))}function he(){var G;return(G=T.current)==null?void 0:G.querySelector(`${i1}[aria-selected="true"]`)}function be(){var G;return Array.from(((G=T.current)==null?void 0:G.querySelectorAll(Nw))||[])}function R(G){let Y=be()[G];Y&&L.setState("value",Y.getAttribute(ns))}function P(G){var Y;let ie=he(),oe=be(),ve=oe.findIndex(xe=>xe===ie),W=oe[ve+G];(Y=h.current)!=null&&Y.loop&&(W=ve+G<0?oe[oe.length-1]:ve+G===oe.length?oe[0]:oe[ve+G]),W&&L.setState("value",W.getAttribute(ns))}function I(G){let Y=he(),ie=Y?.closest(_l),oe;for(;ie&&!oe;)ie=G>0?Sz(ie,_l):_z(ie,_l),oe=ie?.querySelector(Nw);oe?L.setState("value",oe.getAttribute(ns)):P(G)}let ee=()=>R(be().length-1),me=G=>{G.preventDefault(),G.metaKey?ee():G.altKey?I(1):P(1)},Re=G=>{G.preventDefault(),G.metaKey?R(0):G.altKey?I(-1):P(-1)};return p.createElement(vi.div,{ref:t,tabIndex:-1,...D,"cmdk-root":"",onKeyDown:G=>{var Y;(Y=D.onKeyDown)==null||Y.call(D,G);let ie=G.nativeEvent.isComposing||G.keyCode===229;if(!(G.defaultPrevented||ie))switch(G.key){case"n":case"j":{N&&G.ctrlKey&&me(G);break}case"ArrowDown":{me(G);break}case"p":case"k":{N&&G.ctrlKey&&Re(G);break}case"ArrowUp":{Re(G);break}case"Home":{G.preventDefault(),R(0);break}case"End":{G.preventDefault(),ee();break}case"Enter":{G.preventDefault();let oe=he();if(oe){let ve=new Event(hp);oe.dispatchEvent(ve)}}}}},p.createElement("label",{"cmdk-label":"",htmlFor:V.inputId,id:V.labelId,style:jz},g),Pd(e,G=>p.createElement(s1.Provider,{value:L},p.createElement(o1.Provider,{value:V},G))))}),mz=p.forwardRef((e,t)=>{var r,i;let s=Sn(),u=p.useRef(null),d=p.useContext(l1),h=ac(),g=u1(e),y=(i=(r=g.current)==null?void 0:r.forceMount)!=null?i:d?.forceMount;Ji(()=>{if(!y)return h.item(s,d?.id)},[y]);let x=d1(s,u,[e.value,e.children,u],e.keywords),v=Wp(),w=hi(U=>U.value&&U.value===x.current),E=hi(U=>y||h.filter()===!1?!0:U.search?U.filtered.items.get(s)>0:!0);p.useEffect(()=>{let U=u.current;if(!(!U||e.disabled))return U.addEventListener(hp,j),()=>U.removeEventListener(hp,j)},[E,e.onSelect,e.disabled]);function j(){var U,L;S(),(L=(U=g.current).onSelect)==null||L.call(U,x.current)}function S(){v.setState("value",x.current,!0)}if(!E)return null;let{disabled:N,value:D,onSelect:A,forceMount:O,keywords:C,...T}=e;return p.createElement(vi.div,{ref:Mn(u,t),...T,id:s,"cmdk-item":"",role:"option","aria-disabled":!!N,"aria-selected":!!w,"data-disabled":!!N,"data-selected":!!w,onPointerMove:N||h.getDisablePointerSelection()?void 0:S,onClick:N?void 0:j},e.children)}),pz=p.forwardRef((e,t)=>{let{heading:r,children:i,forceMount:s,...u}=e,d=Sn(),h=p.useRef(null),g=p.useRef(null),y=Sn(),x=ac(),v=hi(E=>s||x.filter()===!1?!0:E.search?E.filtered.groups.has(d):!0);Ji(()=>x.group(d),[]),d1(d,h,[e.value,e.heading,g]);let w=p.useMemo(()=>({id:d,forceMount:s}),[s]);return p.createElement(vi.div,{ref:Mn(h,t),...u,"cmdk-group":"",role:"presentation",hidden:v?void 0:!0},r&&p.createElement("div",{ref:g,"cmdk-group-heading":"","aria-hidden":!0,id:y},r),Pd(e,E=>p.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":r?y:void 0},p.createElement(l1.Provider,{value:w},E))))}),gz=p.forwardRef((e,t)=>{let{alwaysRender:r,...i}=e,s=p.useRef(null),u=hi(d=>!d.search);return!r&&!u?null:p.createElement(vi.div,{ref:Mn(s,t),...i,"cmdk-separator":"",role:"separator"})}),yz=p.forwardRef((e,t)=>{let{onValueChange:r,...i}=e,s=e.value!=null,u=Wp(),d=hi(y=>y.search),h=hi(y=>y.selectedItemId),g=ac();return p.useEffect(()=>{e.value!=null&&u.setState("search",e.value)},[e.value]),p.createElement(vi.input,{ref:t,...i,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":g.listId,"aria-labelledby":g.labelId,"aria-activedescendant":h,id:g.inputId,type:"text",value:s?e.value:d,onChange:y=>{s||u.setState("search",y.target.value),r?.(y.target.value)}})}),vz=p.forwardRef((e,t)=>{let{children:r,label:i="Suggestions",...s}=e,u=p.useRef(null),d=p.useRef(null),h=hi(y=>y.selectedItemId),g=ac();return p.useEffect(()=>{if(d.current&&u.current){let y=d.current,x=u.current,v,w=new ResizeObserver(()=>{v=requestAnimationFrame(()=>{let E=y.offsetHeight;x.style.setProperty("--cmdk-list-height",E.toFixed(1)+"px")})});return w.observe(y),()=>{cancelAnimationFrame(v),w.unobserve(y)}}},[]),p.createElement(vi.div,{ref:Mn(u,t),...s,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":h,"aria-label":i,id:g.listId},Pd(e,y=>p.createElement("div",{ref:Mn(d,g.listInnerRef),"cmdk-list-sizer":""},y)))}),xz=p.forwardRef((e,t)=>{let{open:r,onOpenChange:i,overlayClassName:s,contentClassName:u,container:d,...h}=e;return p.createElement(Dd,{open:r,onOpenChange:i},p.createElement(Md,{container:d},p.createElement(zd,{"cmdk-overlay":"",className:s}),p.createElement(kd,{"aria-label":e.label,"cmdk-dialog":"",className:u},p.createElement(c1,{ref:t,...h}))))}),bz=p.forwardRef((e,t)=>hi(r=>r.filtered.count===0)?p.createElement(vi.div,{ref:t,...e,"cmdk-empty":"",role:"presentation"}):null),wz=p.forwardRef((e,t)=>{let{progress:r,children:i,label:s="Loading...",...u}=e;return p.createElement(vi.div,{ref:t,...u,"cmdk-loading":"",role:"progressbar","aria-valuenow":r,"aria-valuemin":0,"aria-valuemax":100,"aria-label":s},Pd(e,d=>p.createElement("div",{"aria-hidden":!0},d)))}),js=Object.assign(c1,{List:vz,Item:mz,Input:yz,Group:pz,Separator:gz,Dialog:xz,Empty:bz,Loading:wz});function Sz(e,t){let r=e.nextElementSibling;for(;r;){if(r.matches(t))return r;r=r.nextElementSibling}}function _z(e,t){let r=e.previousElementSibling;for(;r;){if(r.matches(t))return r;r=r.previousElementSibling}}function u1(e){let t=p.useRef(e);return Ji(()=>{t.current=e}),t}var Ji=typeof window>"u"?p.useEffect:p.useLayoutEffect;function as(e){let t=p.useRef();return t.current===void 0&&(t.current=e()),t}function hi(e){let t=Wp(),r=()=>e(t.snapshot());return p.useSyncExternalStore(t.subscribe,r,r)}function d1(e,t,r,i=[]){let s=p.useRef(),u=ac();return Ji(()=>{var d;let h=(()=>{var y;for(let x of r){if(typeof x=="string")return x.trim();if(typeof x=="object"&&"current"in x)return x.current?(y=x.current.textContent)==null?void 0:y.trim():s.current}})(),g=i.map(y=>y.trim());u.value(e,h,g),(d=t.current)==null||d.setAttribute(ns,h),s.current=h}),s}var Ez=()=>{let[e,t]=p.useState(),r=as(()=>new Map);return Ji(()=>{r.current.forEach(i=>i()),r.current=new Map},[e]),(i,s)=>{r.current.set(i,s),t({})}};function Cz(e){let t=e.type;return typeof t=="function"?t(e.props):"render"in t?t.render(e.props):e}function Pd({asChild:e,children:t},r){return e&&p.isValidElement(t)?p.cloneElement(Cz(t),{ref:t.ref},r(t.props.children)):r(t)}var jz={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};function Et({...e}){return l.jsx(Dd,{"data-slot":"dialog",...e})}function or({...e}){return l.jsx(r1,{"data-slot":"dialog-trigger",...e})}function Rz({...e}){return l.jsx(Md,{"data-slot":"dialog-portal",...e})}function ud({...e}){return l.jsx(nc,{"data-slot":"dialog-close",...e})}function Oz({className:e,...t}){return l.jsx(zd,{"data-slot":"dialog-overlay",className:de("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",e),...t})}function Ct({className:e,children:t,showCloseButton:r=!0,...i}){return l.jsxs(Rz,{"data-slot":"dialog-portal",children:[l.jsx(Oz,{}),l.jsxs(kd,{"data-slot":"dialog-content",className:de("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",e),...i,children:[t,r&&l.jsxs(nc,{"data-slot":"dialog-close",className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[l.jsx($p,{}),l.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function jt({className:e,...t}){return l.jsx("div",{"data-slot":"dialog-header",className:de("flex flex-col gap-2 text-center sm:text-left",e),...t})}function Mt({className:e,...t}){return l.jsx("div",{"data-slot":"dialog-footer",className:de("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",e),...t})}function Rt({className:e,...t}){return l.jsx(Qp,{"data-slot":"dialog-title",className:de("text-lg leading-none font-semibold",e),...t})}function Im({className:e,...t}){return l.jsx(Jp,{"data-slot":"dialog-description",className:de("text-muted-foreground text-sm",e),...t})}function Nz({className:e,...t}){return l.jsx(js,{"data-slot":"command",className:de("bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",e),...t})}function Az({className:e,...t}){return l.jsxs("div",{"data-slot":"command-input-wrapper",className:"flex h-9 items-center gap-2 border-b px-3",children:[l.jsx(zr,{className:"size-4 shrink-0 opacity-50"}),l.jsx(js.Input,{"data-slot":"command-input",className:de("placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",e),...t})]})}function Tz({className:e,...t}){return l.jsx(js.List,{"data-slot":"command-list",className:de("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",e),...t})}function Dz({...e}){return l.jsx(js.Empty,{"data-slot":"command-empty",className:"py-6 text-center text-sm",...e})}function Mz({className:e,...t}){return l.jsx(js.Group,{"data-slot":"command-group",className:de("text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",e),...t})}function zz({className:e,...t}){return l.jsx(js.Item,{"data-slot":"command-item",className:de("data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...t})}const kz=["top","right","bottom","left"],mi=Math.min,ia=Math.max,dd=Math.round,Lu=Math.floor,ir=e=>({x:e,y:e}),Pz={left:"right",right:"left",bottom:"top",top:"bottom"},Kz={start:"end",end:"start"};function mp(e,t,r){return ia(e,mi(t,r))}function kr(e,t){return typeof e=="function"?e(t):e}function Pr(e){return e.split("-")[0]}function Rs(e){return e.split("-")[1]}function eg(e){return e==="x"?"y":"x"}function tg(e){return e==="y"?"height":"width"}const Iz=new Set(["top","bottom"]);function rr(e){return Iz.has(Pr(e))?"y":"x"}function ng(e){return eg(rr(e))}function Lz(e,t,r){r===void 0&&(r=!1);const i=Rs(e),s=ng(e),u=tg(s);let d=s==="x"?i===(r?"end":"start")?"right":"left":i==="start"?"bottom":"top";return t.reference[u]>t.floating[u]&&(d=fd(d)),[d,fd(d)]}function Uz(e){const t=fd(e);return[pp(e),t,pp(t)]}function pp(e){return e.replace(/start|end/g,t=>Kz[t])}const Aw=["left","right"],Tw=["right","left"],qz=["top","bottom"],Fz=["bottom","top"];function $z(e,t,r){switch(e){case"top":case"bottom":return r?t?Tw:Aw:t?Aw:Tw;case"left":case"right":return t?qz:Fz;default:return[]}}function Vz(e,t,r,i){const s=Rs(e);let u=$z(Pr(e),r==="start",i);return s&&(u=u.map(d=>d+"-"+s),t&&(u=u.concat(u.map(pp)))),u}function fd(e){return e.replace(/left|right|bottom|top/g,t=>Pz[t])}function Hz(e){return{top:0,right:0,bottom:0,left:0,...e}}function f1(e){return typeof e!="number"?Hz(e):{top:e,right:e,bottom:e,left:e}}function hd(e){const{x:t,y:r,width:i,height:s}=e;return{width:i,height:s,top:r,left:t,right:t+i,bottom:r+s,x:t,y:r}}function Dw(e,t,r){let{reference:i,floating:s}=e;const u=rr(t),d=ng(t),h=tg(d),g=Pr(t),y=u==="y",x=i.x+i.width/2-s.width/2,v=i.y+i.height/2-s.height/2,w=i[h]/2-s[h]/2;let E;switch(g){case"top":E={x,y:i.y-s.height};break;case"bottom":E={x,y:i.y+i.height};break;case"right":E={x:i.x+i.width,y:v};break;case"left":E={x:i.x-s.width,y:v};break;default:E={x:i.x,y:i.y}}switch(Rs(t)){case"start":E[d]-=w*(r&&y?-1:1);break;case"end":E[d]+=w*(r&&y?-1:1);break}return E}const Bz=async(e,t,r)=>{const{placement:i="bottom",strategy:s="absolute",middleware:u=[],platform:d}=r,h=u.filter(Boolean),g=await(d.isRTL==null?void 0:d.isRTL(t));let y=await d.getElementRects({reference:e,floating:t,strategy:s}),{x,y:v}=Dw(y,i,g),w=i,E={},j=0;for(let S=0;S({name:"arrow",options:e,async fn(t){const{x:r,y:i,placement:s,rects:u,platform:d,elements:h,middlewareData:g}=t,{element:y,padding:x=0}=kr(e,t)||{};if(y==null)return{};const v=f1(x),w={x:r,y:i},E=ng(s),j=tg(E),S=await d.getDimensions(y),N=E==="y",D=N?"top":"left",A=N?"bottom":"right",O=N?"clientHeight":"clientWidth",C=u.reference[j]+u.reference[E]-w[E]-u.floating[j],T=w[E]-u.reference[E],U=await(d.getOffsetParent==null?void 0:d.getOffsetParent(y));let L=U?U[O]:0;(!L||!await(d.isElement==null?void 0:d.isElement(U)))&&(L=h.floating[O]||u.floating[j]);const V=C/2-T/2,fe=L/2-S[j]/2-1,ge=mi(v[D],fe),pe=mi(v[A],fe),ae=ge,le=L-S[j]-pe,he=L/2-S[j]/2+V,be=mp(ae,he,le),R=!g.arrow&&Rs(s)!=null&&he!==be&&u.reference[j]/2-(hehe<=0)){var pe,ae;const he=(((pe=u.flip)==null?void 0:pe.index)||0)+1,be=L[he];if(be&&(!(v==="alignment"?A!==rr(be):!1)||ge.every(I=>rr(I.placement)===A?I.overflows[0]>0:!0)))return{data:{index:he,overflows:ge},reset:{placement:be}};let R=(ae=ge.filter(P=>P.overflows[0]<=0).sort((P,I)=>P.overflows[1]-I.overflows[1])[0])==null?void 0:ae.placement;if(!R)switch(E){case"bestFit":{var le;const P=(le=ge.filter(I=>{if(U){const ee=rr(I.placement);return ee===A||ee==="y"}return!0}).map(I=>[I.placement,I.overflows.filter(ee=>ee>0).reduce((ee,me)=>ee+me,0)]).sort((I,ee)=>I[1]-ee[1])[0])==null?void 0:le[0];P&&(R=P);break}case"initialPlacement":R=h;break}if(s!==R)return{reset:{placement:R}}}return{}}}};function Mw(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function zw(e){return kz.some(t=>e[t]>=0)}const Zz=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:r}=t,{strategy:i="referenceHidden",...s}=kr(e,t);switch(i){case"referenceHidden":{const u=await Bl(t,{...s,elementContext:"reference"}),d=Mw(u,r.reference);return{data:{referenceHiddenOffsets:d,referenceHidden:zw(d)}}}case"escaped":{const u=await Bl(t,{...s,altBoundary:!0}),d=Mw(u,r.floating);return{data:{escapedOffsets:d,escaped:zw(d)}}}default:return{}}}}},h1=new Set(["left","top"]);async function Yz(e,t){const{placement:r,platform:i,elements:s}=e,u=await(i.isRTL==null?void 0:i.isRTL(s.floating)),d=Pr(r),h=Rs(r),g=rr(r)==="y",y=h1.has(d)?-1:1,x=u&&g?-1:1,v=kr(t,e);let{mainAxis:w,crossAxis:E,alignmentAxis:j}=typeof v=="number"?{mainAxis:v,crossAxis:0,alignmentAxis:null}:{mainAxis:v.mainAxis||0,crossAxis:v.crossAxis||0,alignmentAxis:v.alignmentAxis};return h&&typeof j=="number"&&(E=h==="end"?j*-1:j),g?{x:E*x,y:w*y}:{x:w*y,y:E*x}}const Qz=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var r,i;const{x:s,y:u,placement:d,middlewareData:h}=t,g=await Yz(t,e);return d===((r=h.offset)==null?void 0:r.placement)&&(i=h.arrow)!=null&&i.alignmentOffset?{}:{x:s+g.x,y:u+g.y,data:{...g,placement:d}}}}},Jz=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:r,y:i,placement:s}=t,{mainAxis:u=!0,crossAxis:d=!1,limiter:h={fn:N=>{let{x:D,y:A}=N;return{x:D,y:A}}},...g}=kr(e,t),y={x:r,y:i},x=await Bl(t,g),v=rr(Pr(s)),w=eg(v);let E=y[w],j=y[v];if(u){const N=w==="y"?"top":"left",D=w==="y"?"bottom":"right",A=E+x[N],O=E-x[D];E=mp(A,E,O)}if(d){const N=v==="y"?"top":"left",D=v==="y"?"bottom":"right",A=j+x[N],O=j-x[D];j=mp(A,j,O)}const S=h.fn({...t,[w]:E,[v]:j});return{...S,data:{x:S.x-r,y:S.y-i,enabled:{[w]:u,[v]:d}}}}}},Wz=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:r,y:i,placement:s,rects:u,middlewareData:d}=t,{offset:h=0,mainAxis:g=!0,crossAxis:y=!0}=kr(e,t),x={x:r,y:i},v=rr(s),w=eg(v);let E=x[w],j=x[v];const S=kr(h,t),N=typeof S=="number"?{mainAxis:S,crossAxis:0}:{mainAxis:0,crossAxis:0,...S};if(g){const O=w==="y"?"height":"width",C=u.reference[w]-u.floating[O]+N.mainAxis,T=u.reference[w]+u.reference[O]-N.mainAxis;ET&&(E=T)}if(y){var D,A;const O=w==="y"?"width":"height",C=h1.has(Pr(s)),T=u.reference[v]-u.floating[O]+(C&&((D=d.offset)==null?void 0:D[v])||0)+(C?0:N.crossAxis),U=u.reference[v]+u.reference[O]+(C?0:((A=d.offset)==null?void 0:A[v])||0)-(C?N.crossAxis:0);jU&&(j=U)}return{[w]:E,[v]:j}}}},e4=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var r,i;const{placement:s,rects:u,platform:d,elements:h}=t,{apply:g=()=>{},...y}=kr(e,t),x=await Bl(t,y),v=Pr(s),w=Rs(s),E=rr(s)==="y",{width:j,height:S}=u.floating;let N,D;v==="top"||v==="bottom"?(N=v,D=w===(await(d.isRTL==null?void 0:d.isRTL(h.floating))?"start":"end")?"left":"right"):(D=v,N=w==="end"?"top":"bottom");const A=S-x.top-x.bottom,O=j-x.left-x.right,C=mi(S-x[N],A),T=mi(j-x[D],O),U=!t.middlewareData.shift;let L=C,V=T;if((r=t.middlewareData.shift)!=null&&r.enabled.x&&(V=O),(i=t.middlewareData.shift)!=null&&i.enabled.y&&(L=A),U&&!w){const ge=ia(x.left,0),pe=ia(x.right,0),ae=ia(x.top,0),le=ia(x.bottom,0);E?V=j-2*(ge!==0||pe!==0?ge+pe:ia(x.left,x.right)):L=S-2*(ae!==0||le!==0?ae+le:ia(x.top,x.bottom))}await g({...t,availableWidth:V,availableHeight:L});const fe=await d.getDimensions(h.floating);return j!==fe.width||S!==fe.height?{reset:{rects:!0}}:{}}}};function Kd(){return typeof window<"u"}function Os(e){return m1(e)?(e.nodeName||"").toLowerCase():"#document"}function sa(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function dr(e){var t;return(t=(m1(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function m1(e){return Kd()?e instanceof Node||e instanceof sa(e).Node:!1}function $a(e){return Kd()?e instanceof Element||e instanceof sa(e).Element:!1}function sr(e){return Kd()?e instanceof HTMLElement||e instanceof sa(e).HTMLElement:!1}function kw(e){return!Kd()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof sa(e).ShadowRoot}const t4=new Set(["inline","contents"]);function rc(e){const{overflow:t,overflowX:r,overflowY:i,display:s}=Va(e);return/auto|scroll|overlay|hidden|clip/.test(t+i+r)&&!t4.has(s)}const n4=new Set(["table","td","th"]);function a4(e){return n4.has(Os(e))}const r4=[":popover-open",":modal"];function Id(e){return r4.some(t=>{try{return e.matches(t)}catch{return!1}})}const i4=["transform","translate","scale","rotate","perspective"],o4=["transform","translate","scale","rotate","perspective","filter"],s4=["paint","layout","strict","content"];function ag(e){const t=rg(),r=$a(e)?Va(e):e;return i4.some(i=>r[i]?r[i]!=="none":!1)||(r.containerType?r.containerType!=="normal":!1)||!t&&(r.backdropFilter?r.backdropFilter!=="none":!1)||!t&&(r.filter?r.filter!=="none":!1)||o4.some(i=>(r.willChange||"").includes(i))||s4.some(i=>(r.contain||"").includes(i))}function l4(e){let t=pi(e);for(;sr(t)&&!gs(t);){if(ag(t))return t;if(Id(t))return null;t=pi(t)}return null}function rg(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const c4=new Set(["html","body","#document"]);function gs(e){return c4.has(Os(e))}function Va(e){return sa(e).getComputedStyle(e)}function Ld(e){return $a(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function pi(e){if(Os(e)==="html")return e;const t=e.assignedSlot||e.parentNode||kw(e)&&e.host||dr(e);return kw(t)?t.host:t}function p1(e){const t=pi(e);return gs(t)?e.ownerDocument?e.ownerDocument.body:e.body:sr(t)&&rc(t)?t:p1(t)}function Gl(e,t,r){var i;t===void 0&&(t=[]),r===void 0&&(r=!0);const s=p1(e),u=s===((i=e.ownerDocument)==null?void 0:i.body),d=sa(s);if(u){const h=gp(d);return t.concat(d,d.visualViewport||[],rc(s)?s:[],h&&r?Gl(h):[])}return t.concat(s,Gl(s,[],r))}function gp(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function g1(e){const t=Va(e);let r=parseFloat(t.width)||0,i=parseFloat(t.height)||0;const s=sr(e),u=s?e.offsetWidth:r,d=s?e.offsetHeight:i,h=dd(r)!==u||dd(i)!==d;return h&&(r=u,i=d),{width:r,height:i,$:h}}function ig(e){return $a(e)?e:e.contextElement}function fs(e){const t=ig(e);if(!sr(t))return ir(1);const r=t.getBoundingClientRect(),{width:i,height:s,$:u}=g1(t);let d=(u?dd(r.width):r.width)/i,h=(u?dd(r.height):r.height)/s;return(!d||!Number.isFinite(d))&&(d=1),(!h||!Number.isFinite(h))&&(h=1),{x:d,y:h}}const u4=ir(0);function y1(e){const t=sa(e);return!rg()||!t.visualViewport?u4:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function d4(e,t,r){return t===void 0&&(t=!1),!r||t&&r!==sa(e)?!1:t}function Wi(e,t,r,i){t===void 0&&(t=!1),r===void 0&&(r=!1);const s=e.getBoundingClientRect(),u=ig(e);let d=ir(1);t&&(i?$a(i)&&(d=fs(i)):d=fs(e));const h=d4(u,r,i)?y1(u):ir(0);let g=(s.left+h.x)/d.x,y=(s.top+h.y)/d.y,x=s.width/d.x,v=s.height/d.y;if(u){const w=sa(u),E=i&&$a(i)?sa(i):i;let j=w,S=gp(j);for(;S&&i&&E!==j;){const N=fs(S),D=S.getBoundingClientRect(),A=Va(S),O=D.left+(S.clientLeft+parseFloat(A.paddingLeft))*N.x,C=D.top+(S.clientTop+parseFloat(A.paddingTop))*N.y;g*=N.x,y*=N.y,x*=N.x,v*=N.y,g+=O,y+=C,j=sa(S),S=gp(j)}}return hd({width:x,height:v,x:g,y})}function Ud(e,t){const r=Ld(e).scrollLeft;return t?t.left+r:Wi(dr(e)).left+r}function v1(e,t){const r=e.getBoundingClientRect(),i=r.left+t.scrollLeft-Ud(e,r),s=r.top+t.scrollTop;return{x:i,y:s}}function f4(e){let{elements:t,rect:r,offsetParent:i,strategy:s}=e;const u=s==="fixed",d=dr(i),h=t?Id(t.floating):!1;if(i===d||h&&u)return r;let g={scrollLeft:0,scrollTop:0},y=ir(1);const x=ir(0),v=sr(i);if((v||!v&&!u)&&((Os(i)!=="body"||rc(d))&&(g=Ld(i)),sr(i))){const E=Wi(i);y=fs(i),x.x=E.x+i.clientLeft,x.y=E.y+i.clientTop}const w=d&&!v&&!u?v1(d,g):ir(0);return{width:r.width*y.x,height:r.height*y.y,x:r.x*y.x-g.scrollLeft*y.x+x.x+w.x,y:r.y*y.y-g.scrollTop*y.y+x.y+w.y}}function h4(e){return Array.from(e.getClientRects())}function m4(e){const t=dr(e),r=Ld(e),i=e.ownerDocument.body,s=ia(t.scrollWidth,t.clientWidth,i.scrollWidth,i.clientWidth),u=ia(t.scrollHeight,t.clientHeight,i.scrollHeight,i.clientHeight);let d=-r.scrollLeft+Ud(e);const h=-r.scrollTop;return Va(i).direction==="rtl"&&(d+=ia(t.clientWidth,i.clientWidth)-s),{width:s,height:u,x:d,y:h}}const Pw=25;function p4(e,t){const r=sa(e),i=dr(e),s=r.visualViewport;let u=i.clientWidth,d=i.clientHeight,h=0,g=0;if(s){u=s.width,d=s.height;const x=rg();(!x||x&&t==="fixed")&&(h=s.offsetLeft,g=s.offsetTop)}const y=Ud(i);if(y<=0){const x=i.ownerDocument,v=x.body,w=getComputedStyle(v),E=x.compatMode==="CSS1Compat"&&parseFloat(w.marginLeft)+parseFloat(w.marginRight)||0,j=Math.abs(i.clientWidth-v.clientWidth-E);j<=Pw&&(u-=j)}else y<=Pw&&(u+=y);return{width:u,height:d,x:h,y:g}}const g4=new Set(["absolute","fixed"]);function y4(e,t){const r=Wi(e,!0,t==="fixed"),i=r.top+e.clientTop,s=r.left+e.clientLeft,u=sr(e)?fs(e):ir(1),d=e.clientWidth*u.x,h=e.clientHeight*u.y,g=s*u.x,y=i*u.y;return{width:d,height:h,x:g,y}}function Kw(e,t,r){let i;if(t==="viewport")i=p4(e,r);else if(t==="document")i=m4(dr(e));else if($a(t))i=y4(t,r);else{const s=y1(e);i={x:t.x-s.x,y:t.y-s.y,width:t.width,height:t.height}}return hd(i)}function x1(e,t){const r=pi(e);return r===t||!$a(r)||gs(r)?!1:Va(r).position==="fixed"||x1(r,t)}function v4(e,t){const r=t.get(e);if(r)return r;let i=Gl(e,[],!1).filter(h=>$a(h)&&Os(h)!=="body"),s=null;const u=Va(e).position==="fixed";let d=u?pi(e):e;for(;$a(d)&&!gs(d);){const h=Va(d),g=ag(d);!g&&h.position==="fixed"&&(s=null),(u?!g&&!s:!g&&h.position==="static"&&!!s&&g4.has(s.position)||rc(d)&&!g&&x1(e,d))?i=i.filter(x=>x!==d):s=h,d=pi(d)}return t.set(e,i),i}function x4(e){let{element:t,boundary:r,rootBoundary:i,strategy:s}=e;const d=[...r==="clippingAncestors"?Id(t)?[]:v4(t,this._c):[].concat(r),i],h=d[0],g=d.reduce((y,x)=>{const v=Kw(t,x,s);return y.top=ia(v.top,y.top),y.right=mi(v.right,y.right),y.bottom=mi(v.bottom,y.bottom),y.left=ia(v.left,y.left),y},Kw(t,h,s));return{width:g.right-g.left,height:g.bottom-g.top,x:g.left,y:g.top}}function b4(e){const{width:t,height:r}=g1(e);return{width:t,height:r}}function w4(e,t,r){const i=sr(t),s=dr(t),u=r==="fixed",d=Wi(e,!0,u,t);let h={scrollLeft:0,scrollTop:0};const g=ir(0);function y(){g.x=Ud(s)}if(i||!i&&!u)if((Os(t)!=="body"||rc(s))&&(h=Ld(t)),i){const E=Wi(t,!0,u,t);g.x=E.x+t.clientLeft,g.y=E.y+t.clientTop}else s&&y();u&&!i&&s&&y();const x=s&&!i&&!u?v1(s,h):ir(0),v=d.left+h.scrollLeft-g.x-x.x,w=d.top+h.scrollTop-g.y-x.y;return{x:v,y:w,width:d.width,height:d.height}}function Lm(e){return Va(e).position==="static"}function Iw(e,t){if(!sr(e)||Va(e).position==="fixed")return null;if(t)return t(e);let r=e.offsetParent;return dr(e)===r&&(r=r.ownerDocument.body),r}function b1(e,t){const r=sa(e);if(Id(e))return r;if(!sr(e)){let s=pi(e);for(;s&&!gs(s);){if($a(s)&&!Lm(s))return s;s=pi(s)}return r}let i=Iw(e,t);for(;i&&a4(i)&&Lm(i);)i=Iw(i,t);return i&&gs(i)&&Lm(i)&&!ag(i)?r:i||l4(e)||r}const S4=async function(e){const t=this.getOffsetParent||b1,r=this.getDimensions,i=await r(e.floating);return{reference:w4(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:i.width,height:i.height}}};function _4(e){return Va(e).direction==="rtl"}const E4={convertOffsetParentRelativeRectToViewportRelativeRect:f4,getDocumentElement:dr,getClippingRect:x4,getOffsetParent:b1,getElementRects:S4,getClientRects:h4,getDimensions:b4,getScale:fs,isElement:$a,isRTL:_4};function w1(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function C4(e,t){let r=null,i;const s=dr(e);function u(){var h;clearTimeout(i),(h=r)==null||h.disconnect(),r=null}function d(h,g){h===void 0&&(h=!1),g===void 0&&(g=1),u();const y=e.getBoundingClientRect(),{left:x,top:v,width:w,height:E}=y;if(h||t(),!w||!E)return;const j=Lu(v),S=Lu(s.clientWidth-(x+w)),N=Lu(s.clientHeight-(v+E)),D=Lu(x),O={rootMargin:-j+"px "+-S+"px "+-N+"px "+-D+"px",threshold:ia(0,mi(1,g))||1};let C=!0;function T(U){const L=U[0].intersectionRatio;if(L!==g){if(!C)return d();L?d(!1,L):i=setTimeout(()=>{d(!1,1e-7)},1e3)}L===1&&!w1(y,e.getBoundingClientRect())&&d(),C=!1}try{r=new IntersectionObserver(T,{...O,root:s.ownerDocument})}catch{r=new IntersectionObserver(T,O)}r.observe(e)}return d(!0),u}function j4(e,t,r,i){i===void 0&&(i={});const{ancestorScroll:s=!0,ancestorResize:u=!0,elementResize:d=typeof ResizeObserver=="function",layoutShift:h=typeof IntersectionObserver=="function",animationFrame:g=!1}=i,y=ig(e),x=s||u?[...y?Gl(y):[],...Gl(t)]:[];x.forEach(D=>{s&&D.addEventListener("scroll",r,{passive:!0}),u&&D.addEventListener("resize",r)});const v=y&&h?C4(y,r):null;let w=-1,E=null;d&&(E=new ResizeObserver(D=>{let[A]=D;A&&A.target===y&&E&&(E.unobserve(t),cancelAnimationFrame(w),w=requestAnimationFrame(()=>{var O;(O=E)==null||O.observe(t)})),r()}),y&&!g&&E.observe(y),E.observe(t));let j,S=g?Wi(e):null;g&&N();function N(){const D=Wi(e);S&&!w1(S,D)&&r(),S=D,j=requestAnimationFrame(N)}return r(),()=>{var D;x.forEach(A=>{s&&A.removeEventListener("scroll",r),u&&A.removeEventListener("resize",r)}),v?.(),(D=E)==null||D.disconnect(),E=null,g&&cancelAnimationFrame(j)}}const R4=Qz,O4=Jz,N4=Xz,A4=e4,T4=Zz,Lw=Gz,D4=Wz,M4=(e,t,r)=>{const i=new Map,s={platform:E4,...r},u={...s.platform,_c:i};return Bz(e,t,{...s,platform:u})};var z4=typeof document<"u",k4=function(){},ed=z4?p.useLayoutEffect:k4;function md(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let r,i,s;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(r=e.length,r!==t.length)return!1;for(i=r;i--!==0;)if(!md(e[i],t[i]))return!1;return!0}if(s=Object.keys(e),r=s.length,r!==Object.keys(t).length)return!1;for(i=r;i--!==0;)if(!{}.hasOwnProperty.call(t,s[i]))return!1;for(i=r;i--!==0;){const u=s[i];if(!(u==="_owner"&&e.$$typeof)&&!md(e[u],t[u]))return!1}return!0}return e!==e&&t!==t}function S1(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Uw(e,t){const r=S1(e);return Math.round(t*r)/r}function Um(e){const t=p.useRef(e);return ed(()=>{t.current=e}),t}function P4(e){e===void 0&&(e={});const{placement:t="bottom",strategy:r="absolute",middleware:i=[],platform:s,elements:{reference:u,floating:d}={},transform:h=!0,whileElementsMounted:g,open:y}=e,[x,v]=p.useState({x:0,y:0,strategy:r,placement:t,middlewareData:{},isPositioned:!1}),[w,E]=p.useState(i);md(w,i)||E(i);const[j,S]=p.useState(null),[N,D]=p.useState(null),A=p.useCallback(I=>{I!==U.current&&(U.current=I,S(I))},[]),O=p.useCallback(I=>{I!==L.current&&(L.current=I,D(I))},[]),C=u||j,T=d||N,U=p.useRef(null),L=p.useRef(null),V=p.useRef(x),fe=g!=null,ge=Um(g),pe=Um(s),ae=Um(y),le=p.useCallback(()=>{if(!U.current||!L.current)return;const I={placement:t,strategy:r,middleware:w};pe.current&&(I.platform=pe.current),M4(U.current,L.current,I).then(ee=>{const me={...ee,isPositioned:ae.current!==!1};he.current&&!md(V.current,me)&&(V.current=me,Ed.flushSync(()=>{v(me)}))})},[w,t,r,pe,ae]);ed(()=>{y===!1&&V.current.isPositioned&&(V.current.isPositioned=!1,v(I=>({...I,isPositioned:!1})))},[y]);const he=p.useRef(!1);ed(()=>(he.current=!0,()=>{he.current=!1}),[]),ed(()=>{if(C&&(U.current=C),T&&(L.current=T),C&&T){if(ge.current)return ge.current(C,T,le);le()}},[C,T,le,ge,fe]);const be=p.useMemo(()=>({reference:U,floating:L,setReference:A,setFloating:O}),[A,O]),R=p.useMemo(()=>({reference:C,floating:T}),[C,T]),P=p.useMemo(()=>{const I={position:r,left:0,top:0};if(!R.floating)return I;const ee=Uw(R.floating,x.x),me=Uw(R.floating,x.y);return h?{...I,transform:"translate("+ee+"px, "+me+"px)",...S1(R.floating)>=1.5&&{willChange:"transform"}}:{position:r,left:ee,top:me}},[r,h,R.floating,x.x,x.y]);return p.useMemo(()=>({...x,update:le,refs:be,elements:R,floatingStyles:P}),[x,le,be,R,P])}const K4=e=>{function t(r){return{}.hasOwnProperty.call(r,"current")}return{name:"arrow",options:e,fn(r){const{element:i,padding:s}=typeof e=="function"?e(r):e;return i&&t(i)?i.current!=null?Lw({element:i.current,padding:s}).fn(r):{}:i?Lw({element:i,padding:s}).fn(r):{}}}},I4=(e,t)=>({...R4(e),options:[e,t]}),L4=(e,t)=>({...O4(e),options:[e,t]}),U4=(e,t)=>({...D4(e),options:[e,t]}),q4=(e,t)=>({...N4(e),options:[e,t]}),F4=(e,t)=>({...A4(e),options:[e,t]}),$4=(e,t)=>({...T4(e),options:[e,t]}),V4=(e,t)=>({...K4(e),options:[e,t]});var H4="Arrow",_1=p.forwardRef((e,t)=>{const{children:r,width:i=10,height:s=5,...u}=e;return l.jsx(rt.svg,{...u,ref:t,width:i,height:s,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?r:l.jsx("polygon",{points:"0,0 30,0 15,10"})})});_1.displayName=H4;var B4=_1;function G4(e){const[t,r]=p.useState(void 0);return on(()=>{if(e){r({width:e.offsetWidth,height:e.offsetHeight});const i=new ResizeObserver(s=>{if(!Array.isArray(s)||!s.length)return;const u=s[0];let d,h;if("borderBoxSize"in u){const g=u.borderBoxSize,y=Array.isArray(g)?g[0]:g;d=y.inlineSize,h=y.blockSize}else d=e.offsetWidth,h=e.offsetHeight;r({width:d,height:h})});return i.observe(e,{box:"border-box"}),()=>i.unobserve(e)}else r(void 0)},[e]),t}var og="Popper",[E1,xi]=ur(og),[X4,C1]=E1(og),j1=e=>{const{__scopePopper:t,children:r}=e,[i,s]=p.useState(null);return l.jsx(X4,{scope:t,anchor:i,onAnchorChange:s,children:r})};j1.displayName=og;var R1="PopperAnchor",O1=p.forwardRef((e,t)=>{const{__scopePopper:r,virtualRef:i,...s}=e,u=C1(R1,r),d=p.useRef(null),h=dt(t,d),g=p.useRef(null);return p.useEffect(()=>{const y=g.current;g.current=i?.current||d.current,y!==g.current&&u.onAnchorChange(g.current)}),i?null:l.jsx(rt.div,{...s,ref:h})});O1.displayName=R1;var sg="PopperContent",[Z4,Y4]=E1(sg),N1=p.forwardRef((e,t)=>{const{__scopePopper:r,side:i="bottom",sideOffset:s=0,align:u="center",alignOffset:d=0,arrowPadding:h=0,avoidCollisions:g=!0,collisionBoundary:y=[],collisionPadding:x=0,sticky:v="partial",hideWhenDetached:w=!1,updatePositionStrategy:E="optimized",onPlaced:j,...S}=e,N=C1(sg,r),[D,A]=p.useState(null),O=dt(t,W=>A(W)),[C,T]=p.useState(null),U=G4(C),L=U?.width??0,V=U?.height??0,fe=i+(u!=="center"?"-"+u:""),ge=typeof x=="number"?x:{top:0,right:0,bottom:0,left:0,...x},pe=Array.isArray(y)?y:[y],ae=pe.length>0,le={padding:ge,boundary:pe.filter(J4),altBoundary:ae},{refs:he,floatingStyles:be,placement:R,isPositioned:P,middlewareData:I}=P4({strategy:"fixed",placement:fe,whileElementsMounted:(...W)=>j4(...W,{animationFrame:E==="always"}),elements:{reference:N.anchor},middleware:[I4({mainAxis:s+V,alignmentAxis:d}),g&&L4({mainAxis:!0,crossAxis:!1,limiter:v==="partial"?U4():void 0,...le}),g&&q4({...le}),F4({...le,apply:({elements:W,rects:xe,availableWidth:Oe,availableHeight:Ue})=>{const{width:Ye,height:Ze}=xe.reference,Kt=W.floating.style;Kt.setProperty("--radix-popper-available-width",`${Oe}px`),Kt.setProperty("--radix-popper-available-height",`${Ue}px`),Kt.setProperty("--radix-popper-anchor-width",`${Ye}px`),Kt.setProperty("--radix-popper-anchor-height",`${Ze}px`)}}),C&&V4({element:C,padding:h}),W4({arrowWidth:L,arrowHeight:V}),w&&$4({strategy:"referenceHidden",...le})]}),[ee,me]=D1(R),Re=Fa(j);on(()=>{P&&Re?.()},[P,Re]);const G=I.arrow?.x,Y=I.arrow?.y,ie=I.arrow?.centerOffset!==0,[oe,ve]=p.useState();return on(()=>{D&&ve(window.getComputedStyle(D).zIndex)},[D]),l.jsx("div",{ref:he.setFloating,"data-radix-popper-content-wrapper":"",style:{...be,transform:P?be.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:oe,"--radix-popper-transform-origin":[I.transformOrigin?.x,I.transformOrigin?.y].join(" "),...I.hide?.referenceHidden&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:l.jsx(Z4,{scope:r,placedSide:ee,onArrowChange:T,arrowX:G,arrowY:Y,shouldHideArrow:ie,children:l.jsx(rt.div,{"data-side":ee,"data-align":me,...S,ref:O,style:{...S.style,animation:P?void 0:"none"}})})})});N1.displayName=sg;var A1="PopperArrow",Q4={top:"bottom",right:"left",bottom:"top",left:"right"},T1=p.forwardRef(function(t,r){const{__scopePopper:i,...s}=t,u=Y4(A1,i),d=Q4[u.placedSide];return l.jsx("span",{ref:u.onArrowChange,style:{position:"absolute",left:u.arrowX,top:u.arrowY,[d]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[u.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[u.placedSide],visibility:u.shouldHideArrow?"hidden":void 0},children:l.jsx(B4,{...s,ref:r,style:{...s.style,display:"block"}})})});T1.displayName=A1;function J4(e){return e!==null}var W4=e=>({name:"transformOrigin",options:e,fn(t){const{placement:r,rects:i,middlewareData:s}=t,d=s.arrow?.centerOffset!==0,h=d?0:e.arrowWidth,g=d?0:e.arrowHeight,[y,x]=D1(r),v={start:"0%",center:"50%",end:"100%"}[x],w=(s.arrow?.x??0)+h/2,E=(s.arrow?.y??0)+g/2;let j="",S="";return y==="bottom"?(j=d?v:`${w}px`,S=`${-g}px`):y==="top"?(j=d?v:`${w}px`,S=`${i.floating.height+g}px`):y==="right"?(j=`${-g}px`,S=d?v:`${E}px`):y==="left"&&(j=`${i.floating.width+g}px`,S=d?v:`${E}px`),{data:{x:j,y:S}}}});function D1(e){const[t,r="center"]=e.split("-");return[t,r]}var qd=j1,ic=O1,Fd=N1,$d=T1;function ek(e){const t=tk(e),r=p.forwardRef((i,s)=>{const{children:u,...d}=i,h=p.Children.toArray(u),g=h.find(ak);if(g){const y=g.props.children,x=h.map(v=>v===g?p.Children.count(y)>1?p.Children.only(null):p.isValidElement(y)?y.props.children:null:v);return l.jsx(t,{...d,ref:s,children:p.isValidElement(y)?p.cloneElement(y,void 0,x):null})}return l.jsx(t,{...d,ref:s,children:u})});return r.displayName=`${e}.Slot`,r}function tk(e){const t=p.forwardRef((r,i)=>{const{children:s,...u}=r;if(p.isValidElement(s)){const d=ik(s),h=rk(u,s.props);return s.type!==p.Fragment&&(h.ref=i?Mn(i,d):d),p.cloneElement(s,h)}return p.Children.count(s)>1?p.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var nk=Symbol("radix.slottable");function ak(e){return p.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===nk}function rk(e,t){const r={...t};for(const i in t){const s=e[i],u=t[i];/^on[A-Z]/.test(i)?s&&u?r[i]=(...h)=>{const g=u(...h);return s(...h),g}:s&&(r[i]=s):i==="style"?r[i]={...s,...u}:i==="className"&&(r[i]=[s,u].filter(Boolean).join(" "))}return{...e,...r}}function ik(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}var Vd="Popover",[M1]=ur(Vd,[xi]),oc=xi(),[ok,bi]=M1(Vd),z1=e=>{const{__scopePopover:t,children:r,open:i,defaultOpen:s,onOpenChange:u,modal:d=!1}=e,h=oc(t),g=p.useRef(null),[y,x]=p.useState(!1),[v,w]=Yi({prop:i,defaultProp:s??!1,onChange:u,caller:Vd});return l.jsx(qd,{...h,children:l.jsx(ok,{scope:t,contentId:Sn(),triggerRef:g,open:v,onOpenChange:w,onOpenToggle:p.useCallback(()=>w(E=>!E),[w]),hasCustomAnchor:y,onCustomAnchorAdd:p.useCallback(()=>x(!0),[]),onCustomAnchorRemove:p.useCallback(()=>x(!1),[]),modal:d,children:r})})};z1.displayName=Vd;var k1="PopoverAnchor",sk=p.forwardRef((e,t)=>{const{__scopePopover:r,...i}=e,s=bi(k1,r),u=oc(r),{onCustomAnchorAdd:d,onCustomAnchorRemove:h}=s;return p.useEffect(()=>(d(),()=>h()),[d,h]),l.jsx(ic,{...u,...i,ref:t})});sk.displayName=k1;var P1="PopoverTrigger",K1=p.forwardRef((e,t)=>{const{__scopePopover:r,...i}=e,s=bi(P1,r),u=oc(r),d=dt(t,s.triggerRef),h=l.jsx(rt.button,{type:"button","aria-haspopup":"dialog","aria-expanded":s.open,"aria-controls":s.contentId,"data-state":F1(s.open),...i,ref:d,onClick:Ce(e.onClick,s.onOpenToggle)});return s.hasCustomAnchor?h:l.jsx(ic,{asChild:!0,...u,children:h})});K1.displayName=P1;var lg="PopoverPortal",[lk,ck]=M1(lg,{forceMount:void 0}),I1=e=>{const{__scopePopover:t,forceMount:r,children:i,container:s}=e,u=bi(lg,t);return l.jsx(lk,{scope:t,forceMount:r,children:l.jsx(ja,{present:r||u.open,children:l.jsx(Cs,{asChild:!0,container:s,children:i})})})};I1.displayName=lg;var ys="PopoverContent",L1=p.forwardRef((e,t)=>{const r=ck(ys,e.__scopePopover),{forceMount:i=r.forceMount,...s}=e,u=bi(ys,e.__scopePopover);return l.jsx(ja,{present:i||u.open,children:u.modal?l.jsx(dk,{...s,ref:t}):l.jsx(fk,{...s,ref:t})})});L1.displayName=ys;var uk=ek("PopoverContent.RemoveScroll"),dk=p.forwardRef((e,t)=>{const r=bi(ys,e.__scopePopover),i=p.useRef(null),s=dt(t,i),u=p.useRef(!1);return p.useEffect(()=>{const d=i.current;if(d)return Ad(d)},[]),l.jsx(tc,{as:uk,allowPinchZoom:!0,children:l.jsx(U1,{...e,ref:s,trapFocus:r.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:Ce(e.onCloseAutoFocus,d=>{d.preventDefault(),u.current||r.triggerRef.current?.focus()}),onPointerDownOutside:Ce(e.onPointerDownOutside,d=>{const h=d.detail.originalEvent,g=h.button===0&&h.ctrlKey===!0,y=h.button===2||g;u.current=y},{checkForDefaultPrevented:!1}),onFocusOutside:Ce(e.onFocusOutside,d=>d.preventDefault(),{checkForDefaultPrevented:!1})})})}),fk=p.forwardRef((e,t)=>{const r=bi(ys,e.__scopePopover),i=p.useRef(!1),s=p.useRef(!1);return l.jsx(U1,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:u=>{e.onCloseAutoFocus?.(u),u.defaultPrevented||(i.current||r.triggerRef.current?.focus(),u.preventDefault()),i.current=!1,s.current=!1},onInteractOutside:u=>{e.onInteractOutside?.(u),u.defaultPrevented||(i.current=!0,u.detail.originalEvent.type==="pointerdown"&&(s.current=!0));const d=u.target;r.triggerRef.current?.contains(d)&&u.preventDefault(),u.detail.originalEvent.type==="focusin"&&s.current&&u.preventDefault()}})}),U1=p.forwardRef((e,t)=>{const{__scopePopover:r,trapFocus:i,onOpenAutoFocus:s,onCloseAutoFocus:u,disableOutsidePointerEvents:d,onEscapeKeyDown:h,onPointerDownOutside:g,onFocusOutside:y,onInteractOutside:x,...v}=e,w=bi(ys,r),E=oc(r);return Od(),l.jsx(ec,{asChild:!0,loop:!0,trapped:i,onMountAutoFocus:s,onUnmountAutoFocus:u,children:l.jsx(Es,{asChild:!0,disableOutsidePointerEvents:d,onInteractOutside:x,onEscapeKeyDown:h,onPointerDownOutside:g,onFocusOutside:y,onDismiss:()=>w.onOpenChange(!1),children:l.jsx(Fd,{"data-state":F1(w.open),role:"dialog",id:w.contentId,...E,...v,ref:t,style:{...v.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),q1="PopoverClose",hk=p.forwardRef((e,t)=>{const{__scopePopover:r,...i}=e,s=bi(q1,r);return l.jsx(rt.button,{type:"button",...i,ref:t,onClick:Ce(e.onClick,()=>s.onOpenChange(!1))})});hk.displayName=q1;var mk="PopoverArrow",pk=p.forwardRef((e,t)=>{const{__scopePopover:r,...i}=e,s=oc(r);return l.jsx($d,{...s,...i,ref:t})});pk.displayName=mk;function F1(e){return e?"open":"closed"}var gk=z1,yk=K1,vk=I1,xk=L1;function bk({...e}){return l.jsx(gk,{"data-slot":"popover",...e})}function wk({...e}){return l.jsx(yk,{"data-slot":"popover-trigger",...e})}function Sk({className:e,align:t="center",sideOffset:r=4,...i}){return l.jsx(vk,{children:l.jsx(xk,{"data-slot":"popover-content",align:t,sideOffset:r,className:de("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",e),...i})})}const _k=({orgs:e})=>{const[t,r]=p.useState(!1),[i,s]=p.useState(La.get()??"");p.useEffect(()=>La.subscribe(d=>s(d??"")),[]);const u=e.find(d=>d.id===i);return l.jsxs(bk,{open:t,onOpenChange:r,children:[l.jsx(wk,{asChild:!0,children:l.jsxs(se,{variant:"ghost",className:"h-9 w-full justify-between px-2","aria-label":"Switch organization",children:[l.jsxs("span",{className:"flex items-center gap-2 truncate",children:[l.jsx(nS,{className:"h-4 w-4"}),l.jsx("span",{className:"truncate",children:u?.name??"Select org"})]}),l.jsx(YO,{className:"ml-2 h-4 w-4 opacity-50"})]})}),l.jsx(Sk,{className:"w-[280px] p-0",align:"start",children:l.jsxs(Nz,{children:[l.jsx(Az,{placeholder:"Search orgs..."}),l.jsxs(Tz,{children:[l.jsx(Dz,{children:"No orgs found."}),l.jsx(Mz,{heading:"Organizations",children:e.map(d=>l.jsxs(zz,{value:d.id,onSelect:h=>{La.set(h),r(!1)},children:[l.jsx(aS,{className:de("mr-2 h-4 w-4",i===d.id?"opacity-100":"opacity-0")}),l.jsx("span",{className:"truncate",children:d.name})]},d.id))})]})]})})]})};function Ek(){return rn({queryKey:["me"],queryFn:()=>Vi.getMe(),staleTime:300*1e3})}function Ck(e,t=[]){let r=[];function i(u,d){const h=p.createContext(d);h.displayName=u+"Context";const g=r.length;r=[...r,d];const y=v=>{const{scope:w,children:E,...j}=v,S=w?.[e]?.[g]||h,N=p.useMemo(()=>j,Object.values(j));return l.jsx(S.Provider,{value:N,children:E})};y.displayName=u+"Provider";function x(v,w){const E=w?.[e]?.[g]||h,j=p.useContext(E);if(j)return j;if(d!==void 0)return d;throw new Error(`\`${v}\` must be used within \`${u}\``)}return[y,x]}const s=()=>{const u=r.map(d=>p.createContext(d));return function(h){const g=h?.[e]||u;return p.useMemo(()=>({[`__scope${e}`]:{...h,[e]:g}}),[h,g])}};return s.scopeName=e,[i,jk(s,...t)]}function jk(...e){const t=e[0];if(e.length===1)return t;const r=()=>{const i=e.map(s=>({useScope:s(),scopeName:s.scopeName}));return function(u){const d=i.reduce((h,{useScope:g,scopeName:y})=>{const v=g(u)[`__scope${y}`];return{...h,...v}},{});return p.useMemo(()=>({[`__scope${t.scopeName}`]:d}),[d])}};return r.scopeName=t.scopeName,r}var Rk=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],cg=Rk.reduce((e,t)=>{const r=Wl(`Primitive.${t}`),i=p.forwardRef((s,u)=>{const{asChild:d,...h}=s,g=d?r:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(g,{...h,ref:u})});return i.displayName=`Primitive.${t}`,{...e,[t]:i}},{}),qm={exports:{}},Fm={};var qw;function Ok(){if(qw)return Fm;qw=1;var e=q0();function t(v,w){return v===w&&(v!==0||1/v===1/w)||v!==v&&w!==w}var r=typeof Object.is=="function"?Object.is:t,i=e.useState,s=e.useEffect,u=e.useLayoutEffect,d=e.useDebugValue;function h(v,w){var E=w(),j=i({inst:{value:E,getSnapshot:w}}),S=j[0].inst,N=j[1];return u(function(){S.value=E,S.getSnapshot=w,g(S)&&N({inst:S})},[v,E,w]),s(function(){return g(S)&&N({inst:S}),v(function(){g(S)&&N({inst:S})})},[v]),d(E),E}function g(v){var w=v.getSnapshot;v=v.value;try{var E=w();return!r(v,E)}catch{return!0}}function y(v,w){return w()}var x=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?y:h;return Fm.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:x,Fm}var Fw;function Nk(){return Fw||(Fw=1,qm.exports=Ok()),qm.exports}var Ak=Nk();function Tk(){return Ak.useSyncExternalStore(Dk,()=>!0,()=>!1)}function Dk(){return()=>{}}var ug="Avatar",[Mk]=Ck(ug),[zk,$1]=Mk(ug),V1=p.forwardRef((e,t)=>{const{__scopeAvatar:r,...i}=e,[s,u]=p.useState("idle");return l.jsx(zk,{scope:r,imageLoadingStatus:s,onImageLoadingStatusChange:u,children:l.jsx(cg.span,{...i,ref:t})})});V1.displayName=ug;var H1="AvatarImage",kk=p.forwardRef((e,t)=>{const{__scopeAvatar:r,src:i,onLoadingStatusChange:s=()=>{},...u}=e,d=$1(H1,r),h=Pk(i,u),g=Fa(y=>{s(y),d.onImageLoadingStatusChange(y)});return on(()=>{h!=="idle"&&g(h)},[h,g]),h==="loaded"?l.jsx(cg.img,{...u,ref:t,src:i}):null});kk.displayName=H1;var B1="AvatarFallback",G1=p.forwardRef((e,t)=>{const{__scopeAvatar:r,delayMs:i,...s}=e,u=$1(B1,r),[d,h]=p.useState(i===void 0);return p.useEffect(()=>{if(i!==void 0){const g=window.setTimeout(()=>h(!0),i);return()=>window.clearTimeout(g)}},[i]),d&&u.imageLoadingStatus!=="loaded"?l.jsx(cg.span,{...s,ref:t}):null});G1.displayName=B1;function $w(e,t){return e?t?(e.src!==t&&(e.src=t),e.complete&&e.naturalWidth>0?"loaded":"loading"):"error":"idle"}function Pk(e,{referrerPolicy:t,crossOrigin:r}){const i=Tk(),s=p.useRef(null),u=i?(s.current||(s.current=new window.Image),s.current):null,[d,h]=p.useState(()=>$w(u,e));return on(()=>{h($w(u,e))},[u,e]),on(()=>{const g=v=>()=>{h(v)};if(!u)return;const y=g("loaded"),x=g("error");return u.addEventListener("load",y),u.addEventListener("error",x),t&&(u.referrerPolicy=t),typeof r=="string"&&(u.crossOrigin=r),()=>{u.removeEventListener("load",y),u.removeEventListener("error",x)}},[u,r,t]),d}var Kk=V1,Ik=G1;function Lk({className:e,...t}){return l.jsx(Kk,{"data-slot":"avatar",className:de("relative flex size-8 shrink-0 overflow-hidden rounded-full",e),...t})}function Uk({className:e,...t}){return l.jsx(Ik,{"data-slot":"avatar-fallback",className:de("bg-muted flex size-full items-center justify-center rounded-full",e),...t})}function qk({...e}){return l.jsx("nav",{"aria-label":"breadcrumb","data-slot":"breadcrumb",...e})}function Fk({className:e,...t}){return l.jsx("ol",{"data-slot":"breadcrumb-list",className:de("text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5",e),...t})}function Vw({className:e,...t}){return l.jsx("li",{"data-slot":"breadcrumb-item",className:de("inline-flex items-center gap-1.5",e),...t})}function Hw({asChild:e,className:t,...r}){const i=e?_s:"a";return l.jsx(i,{"data-slot":"breadcrumb-link",className:de("hover:text-foreground transition-colors",t),...r})}function $k({className:e,...t}){return l.jsx("span",{"data-slot":"breadcrumb-page",role:"link","aria-disabled":"true","aria-current":"page",className:de("text-foreground font-normal",e),...t})}function Vk({children:e,className:t,...r}){return l.jsx("li",{"data-slot":"breadcrumb-separator",role:"presentation","aria-hidden":"true",className:de("[&>svg]:size-3.5",t),...r,children:e??l.jsx(BO,{})})}const $m=768;function Hk(){const[e,t]=p.useState(void 0);return p.useEffect(()=>{const r=window.matchMedia(`(max-width: ${$m-1}px)`),i=()=>{t(window.innerWidth<$m)};return r.addEventListener("change",i),t(window.innerWidth<$m),()=>r.removeEventListener("change",i)},[]),!!e}function Fe({className:e,type:t,...r}){return l.jsx("input",{type:t,"data-slot":"input",className:de("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",e),...r})}var Bk=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Gk=Bk.reduce((e,t)=>{const r=Wl(`Primitive.${t}`),i=p.forwardRef((s,u)=>{const{asChild:d,...h}=s,g=d?r:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(g,{...h,ref:u})});return i.displayName=`Primitive.${t}`,{...e,[t]:i}},{}),Xk="Separator",Bw="horizontal",Zk=["horizontal","vertical"],X1=p.forwardRef((e,t)=>{const{decorative:r,orientation:i=Bw,...s}=e,u=Yk(i)?i:Bw,h=r?{role:"none"}:{"aria-orientation":u==="vertical"?u:void 0,role:"separator"};return l.jsx(Gk.div,{"data-orientation":u,...h,...s,ref:t})});X1.displayName=Xk;function Yk(e){return Zk.includes(e)}var Qk=X1;function Jk({className:e,orientation:t="horizontal",decorative:r=!0,...i}){return l.jsx(Qk,{"data-slot":"separator",decorative:r,orientation:t,className:de("bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",e),...i})}function Wk({...e}){return l.jsx(Dd,{"data-slot":"sheet",...e})}function e3({...e}){return l.jsx(Md,{"data-slot":"sheet-portal",...e})}function t3({className:e,...t}){return l.jsx(zd,{"data-slot":"sheet-overlay",className:de("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",e),...t})}function n3({className:e,children:t,side:r="right",...i}){return l.jsxs(e3,{children:[l.jsx(t3,{}),l.jsxs(kd,{"data-slot":"sheet-content",className:de("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",r==="right"&&"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",r==="left"&&"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",r==="top"&&"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",r==="bottom"&&"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",e),...i,children:[t,l.jsxs(nc,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none",children:[l.jsx($p,{className:"size-4"}),l.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function a3({className:e,...t}){return l.jsx("div",{"data-slot":"sheet-header",className:de("flex flex-col gap-1.5 p-4",e),...t})}function r3({className:e,...t}){return l.jsx(Qp,{"data-slot":"sheet-title",className:de("text-foreground font-semibold",e),...t})}function i3({className:e,...t}){return l.jsx(Jp,{"data-slot":"sheet-description",className:de("text-muted-foreground text-sm",e),...t})}var o3=Symbol("radix.slottable");function s3(e){const t=({children:r})=>l.jsx(l.Fragment,{children:r});return t.displayName=`${e}.Slottable`,t.__radixId=o3,t}var Z1=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),l3="VisuallyHidden",Y1=p.forwardRef((e,t)=>l.jsx(rt.span,{...e,ref:t,style:{...Z1,...e.style}}));Y1.displayName=l3;var c3=Y1,[Hd]=ur("Tooltip",[xi]),Bd=xi(),Q1="TooltipProvider",u3=700,yp="tooltip.open",[d3,dg]=Hd(Q1),J1=e=>{const{__scopeTooltip:t,delayDuration:r=u3,skipDelayDuration:i=300,disableHoverableContent:s=!1,children:u}=e,d=p.useRef(!0),h=p.useRef(!1),g=p.useRef(0);return p.useEffect(()=>{const y=g.current;return()=>window.clearTimeout(y)},[]),l.jsx(d3,{scope:t,isOpenDelayedRef:d,delayDuration:r,onOpen:p.useCallback(()=>{window.clearTimeout(g.current),d.current=!1},[]),onClose:p.useCallback(()=>{window.clearTimeout(g.current),g.current=window.setTimeout(()=>d.current=!0,i)},[i]),isPointerInTransitRef:h,onPointerInTransitChange:p.useCallback(y=>{h.current=y},[]),disableHoverableContent:s,children:u})};J1.displayName=Q1;var Xl="Tooltip",[f3,sc]=Hd(Xl),W1=e=>{const{__scopeTooltip:t,children:r,open:i,defaultOpen:s,onOpenChange:u,disableHoverableContent:d,delayDuration:h}=e,g=dg(Xl,e.__scopeTooltip),y=Bd(t),[x,v]=p.useState(null),w=Sn(),E=p.useRef(0),j=d??g.disableHoverableContent,S=h??g.delayDuration,N=p.useRef(!1),[D,A]=Yi({prop:i,defaultProp:s??!1,onChange:L=>{L?(g.onOpen(),document.dispatchEvent(new CustomEvent(yp))):g.onClose(),u?.(L)},caller:Xl}),O=p.useMemo(()=>D?N.current?"delayed-open":"instant-open":"closed",[D]),C=p.useCallback(()=>{window.clearTimeout(E.current),E.current=0,N.current=!1,A(!0)},[A]),T=p.useCallback(()=>{window.clearTimeout(E.current),E.current=0,A(!1)},[A]),U=p.useCallback(()=>{window.clearTimeout(E.current),E.current=window.setTimeout(()=>{N.current=!0,A(!0),E.current=0},S)},[S,A]);return p.useEffect(()=>()=>{E.current&&(window.clearTimeout(E.current),E.current=0)},[]),l.jsx(qd,{...y,children:l.jsx(f3,{scope:t,contentId:w,open:D,stateAttribute:O,trigger:x,onTriggerChange:v,onTriggerEnter:p.useCallback(()=>{g.isOpenDelayedRef.current?U():C()},[g.isOpenDelayedRef,U,C]),onTriggerLeave:p.useCallback(()=>{j?T():(window.clearTimeout(E.current),E.current=0)},[T,j]),onOpen:C,onClose:T,disableHoverableContent:j,children:r})})};W1.displayName=Xl;var vp="TooltipTrigger",e_=p.forwardRef((e,t)=>{const{__scopeTooltip:r,...i}=e,s=sc(vp,r),u=dg(vp,r),d=Bd(r),h=p.useRef(null),g=dt(t,h,s.onTriggerChange),y=p.useRef(!1),x=p.useRef(!1),v=p.useCallback(()=>y.current=!1,[]);return p.useEffect(()=>()=>document.removeEventListener("pointerup",v),[v]),l.jsx(ic,{asChild:!0,...d,children:l.jsx(rt.button,{"aria-describedby":s.open?s.contentId:void 0,"data-state":s.stateAttribute,...i,ref:g,onPointerMove:Ce(e.onPointerMove,w=>{w.pointerType!=="touch"&&!x.current&&!u.isPointerInTransitRef.current&&(s.onTriggerEnter(),x.current=!0)}),onPointerLeave:Ce(e.onPointerLeave,()=>{s.onTriggerLeave(),x.current=!1}),onPointerDown:Ce(e.onPointerDown,()=>{s.open&&s.onClose(),y.current=!0,document.addEventListener("pointerup",v,{once:!0})}),onFocus:Ce(e.onFocus,()=>{y.current||s.onOpen()}),onBlur:Ce(e.onBlur,s.onClose),onClick:Ce(e.onClick,s.onClose)})})});e_.displayName=vp;var fg="TooltipPortal",[h3,m3]=Hd(fg,{forceMount:void 0}),t_=e=>{const{__scopeTooltip:t,forceMount:r,children:i,container:s}=e,u=sc(fg,t);return l.jsx(h3,{scope:t,forceMount:r,children:l.jsx(ja,{present:r||u.open,children:l.jsx(Cs,{asChild:!0,container:s,children:i})})})};t_.displayName=fg;var vs="TooltipContent",n_=p.forwardRef((e,t)=>{const r=m3(vs,e.__scopeTooltip),{forceMount:i=r.forceMount,side:s="top",...u}=e,d=sc(vs,e.__scopeTooltip);return l.jsx(ja,{present:i||d.open,children:d.disableHoverableContent?l.jsx(a_,{side:s,...u,ref:t}):l.jsx(p3,{side:s,...u,ref:t})})}),p3=p.forwardRef((e,t)=>{const r=sc(vs,e.__scopeTooltip),i=dg(vs,e.__scopeTooltip),s=p.useRef(null),u=dt(t,s),[d,h]=p.useState(null),{trigger:g,onClose:y}=r,x=s.current,{onPointerInTransitChange:v}=i,w=p.useCallback(()=>{h(null),v(!1)},[v]),E=p.useCallback((j,S)=>{const N=j.currentTarget,D={x:j.clientX,y:j.clientY},A=x3(D,N.getBoundingClientRect()),O=b3(D,A),C=w3(S.getBoundingClientRect()),T=_3([...O,...C]);h(T),v(!0)},[v]);return p.useEffect(()=>()=>w(),[w]),p.useEffect(()=>{if(g&&x){const j=N=>E(N,x),S=N=>E(N,g);return g.addEventListener("pointerleave",j),x.addEventListener("pointerleave",S),()=>{g.removeEventListener("pointerleave",j),x.removeEventListener("pointerleave",S)}}},[g,x,E,w]),p.useEffect(()=>{if(d){const j=S=>{const N=S.target,D={x:S.clientX,y:S.clientY},A=g?.contains(N)||x?.contains(N),O=!S3(D,d);A?w():O&&(w(),y())};return document.addEventListener("pointermove",j),()=>document.removeEventListener("pointermove",j)}},[g,x,d,y,w]),l.jsx(a_,{...e,ref:u})}),[g3,y3]=Hd(Xl,{isInside:!1}),v3=s3("TooltipContent"),a_=p.forwardRef((e,t)=>{const{__scopeTooltip:r,children:i,"aria-label":s,onEscapeKeyDown:u,onPointerDownOutside:d,...h}=e,g=sc(vs,r),y=Bd(r),{onClose:x}=g;return p.useEffect(()=>(document.addEventListener(yp,x),()=>document.removeEventListener(yp,x)),[x]),p.useEffect(()=>{if(g.trigger){const v=w=>{w.target?.contains(g.trigger)&&x()};return window.addEventListener("scroll",v,{capture:!0}),()=>window.removeEventListener("scroll",v,{capture:!0})}},[g.trigger,x]),l.jsx(Es,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:u,onPointerDownOutside:d,onFocusOutside:v=>v.preventDefault(),onDismiss:x,children:l.jsxs(Fd,{"data-state":g.stateAttribute,...y,...h,ref:t,style:{...h.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[l.jsx(v3,{children:i}),l.jsx(g3,{scope:r,isInside:!0,children:l.jsx(c3,{id:g.contentId,role:"tooltip",children:s||i})})]})})});n_.displayName=vs;var r_="TooltipArrow",i_=p.forwardRef((e,t)=>{const{__scopeTooltip:r,...i}=e,s=Bd(r);return y3(r_,r).isInside?null:l.jsx($d,{...s,...i,ref:t})});i_.displayName=r_;function x3(e,t){const r=Math.abs(t.top-e.y),i=Math.abs(t.bottom-e.y),s=Math.abs(t.right-e.x),u=Math.abs(t.left-e.x);switch(Math.min(r,i,s,u)){case u:return"left";case s:return"right";case r:return"top";case i:return"bottom";default:throw new Error("unreachable")}}function b3(e,t,r=5){const i=[];switch(t){case"top":i.push({x:e.x-r,y:e.y+r},{x:e.x+r,y:e.y+r});break;case"bottom":i.push({x:e.x-r,y:e.y-r},{x:e.x+r,y:e.y-r});break;case"left":i.push({x:e.x+r,y:e.y-r},{x:e.x+r,y:e.y+r});break;case"right":i.push({x:e.x-r,y:e.y-r},{x:e.x-r,y:e.y+r});break}return i}function w3(e){const{top:t,right:r,bottom:i,left:s}=e;return[{x:s,y:t},{x:r,y:t},{x:r,y:i},{x:s,y:i}]}function S3(e,t){const{x:r,y:i}=e;let s=!1;for(let u=0,d=t.length-1;ui!=w>i&&r<(v-y)*(i-x)/(w-x)+y&&(s=!s)}return s}function _3(e){const t=e.slice();return t.sort((r,i)=>r.xi.x?1:r.yi.y?1:0),E3(t)}function E3(e){if(e.length<=1)return e.slice();const t=[];for(let i=0;i=2;){const u=t[t.length-1],d=t[t.length-2];if((u.x-d.x)*(s.y-d.y)>=(u.y-d.y)*(s.x-d.x))t.pop();else break}t.push(s)}t.pop();const r=[];for(let i=e.length-1;i>=0;i--){const s=e[i];for(;r.length>=2;){const u=r[r.length-1],d=r[r.length-2];if((u.x-d.x)*(s.y-d.y)>=(u.y-d.y)*(s.x-d.x))r.pop();else break}r.push(s)}return r.pop(),t.length===1&&r.length===1&&t[0].x===r[0].x&&t[0].y===r[0].y?t:t.concat(r)}var C3=J1,j3=W1,R3=e_,O3=t_,N3=n_,A3=i_;function Gd({delayDuration:e=0,...t}){return l.jsx(C3,{"data-slot":"tooltip-provider",delayDuration:e,...t})}function o_({...e}){return l.jsx(Gd,{children:l.jsx(j3,{"data-slot":"tooltip",...e})})}function s_({...e}){return l.jsx(R3,{"data-slot":"tooltip-trigger",...e})}function l_({className:e,sideOffset:t=0,children:r,...i}){return l.jsx(O3,{children:l.jsxs(N3,{"data-slot":"tooltip-content",sideOffset:t,className:de("bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",e),...i,children:[r,l.jsx(A3,{className:"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]"})]})})}const T3="sidebar_state",D3=3600*24*7,M3="16rem",z3="18rem",k3="3rem",P3="b",c_=p.createContext(null);function hg(){const e=p.useContext(c_);if(!e)throw new Error("useSidebar must be used within a SidebarProvider.");return e}function K3({defaultOpen:e=!0,open:t,onOpenChange:r,className:i,style:s,children:u,...d}){const h=Hk(),[g,y]=p.useState(!1),[x,v]=p.useState(e),w=t??x,E=p.useCallback(D=>{const A=typeof D=="function"?D(w):D;r?r(A):v(A),document.cookie=`${T3}=${A}; path=/; max-age=${D3}`},[r,w]),j=p.useCallback(()=>h?y(D=>!D):E(D=>!D),[h,E,y]);p.useEffect(()=>{const D=A=>{A.key===P3&&(A.metaKey||A.ctrlKey)&&(A.preventDefault(),j())};return window.addEventListener("keydown",D),()=>window.removeEventListener("keydown",D)},[j]);const S=w?"expanded":"collapsed",N=p.useMemo(()=>({state:S,open:w,setOpen:E,isMobile:h,openMobile:g,setOpenMobile:y,toggleSidebar:j}),[S,w,E,h,g,y,j]);return l.jsx(c_.Provider,{value:N,children:l.jsx(Gd,{delayDuration:0,children:l.jsx("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":M3,"--sidebar-width-icon":k3,...s},className:de("group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full",i),...d,children:u})})})}function I3({side:e="left",variant:t="sidebar",collapsible:r="offcanvas",className:i,children:s,...u}){const{isMobile:d,state:h,openMobile:g,setOpenMobile:y}=hg();return r==="none"?l.jsx("div",{"data-slot":"sidebar",className:de("bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col",i),...u,children:s}):d?l.jsx(Wk,{open:g,onOpenChange:y,...u,children:l.jsxs(n3,{"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",className:"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden",style:{"--sidebar-width":z3},side:e,children:[l.jsxs(a3,{className:"sr-only",children:[l.jsx(r3,{children:"Sidebar"}),l.jsx(i3,{children:"Displays the mobile sidebar."})]}),l.jsx("div",{className:"flex h-full w-full flex-col",children:s})]})}):l.jsxs("div",{className:"group peer text-sidebar-foreground hidden md:block","data-state":h,"data-collapsible":h==="collapsed"?r:"","data-variant":t,"data-side":e,"data-slot":"sidebar",children:[l.jsx("div",{"data-slot":"sidebar-gap",className:de("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",t==="floating"||t==="inset"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),l.jsx("div",{"data-slot":"sidebar-container",className:de("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",e==="left"?"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]":"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",t==="floating"||t==="inset"?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",i),...u,children:l.jsx("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm",children:s})})]})}function L3({className:e,onClick:t,...r}){const{toggleSidebar:i}=hg();return l.jsxs(se,{"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon",className:de("size-7",e),onClick:s=>{t?.(s),i()},...r,children:[l.jsx(x2,{}),l.jsx("span",{className:"sr-only",children:"Toggle Sidebar"})]})}function U3({className:e,...t}){return l.jsx("main",{"data-slot":"sidebar-inset",className:de("bg-background relative flex w-full flex-1 flex-col","md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",e),...t})}function q3({className:e,...t}){return l.jsx("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:de("flex flex-col gap-2 p-2",e),...t})}function F3({className:e,...t}){return l.jsx("div",{"data-slot":"sidebar-footer","data-sidebar":"footer",className:de("flex flex-col gap-2 p-2",e),...t})}function $3({className:e,...t}){return l.jsx("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:de("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",e),...t})}function Uu({className:e,...t}){return l.jsx("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:de("relative flex w-full min-w-0 flex-col p-2",e),...t})}function qu({className:e,asChild:t=!1,...r}){const i=t?_s:"div";return l.jsx(i,{"data-slot":"sidebar-group-label","data-sidebar":"group-label",className:de("text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0","group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",e),...r})}function Fu({className:e,...t}){return l.jsx("div",{"data-slot":"sidebar-group-content","data-sidebar":"group-content",className:de("w-full text-sm",e),...t})}function $u({className:e,...t}){return l.jsx("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:de("flex w-full min-w-0 flex-col gap-1",e),...t})}function Vu({className:e,...t}){return l.jsx("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:de("group/menu-item relative",e),...t})}const V3=Bp("peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",{variants:{variant:{default:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"h-12 text-sm group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}});function Hu({asChild:e=!1,isActive:t=!1,variant:r="default",size:i="default",tooltip:s,className:u,...d}){const h=e?_s:"button",{isMobile:g,state:y}=hg(),x=l.jsx(h,{"data-slot":"sidebar-menu-button","data-sidebar":"menu-button","data-size":i,"data-active":t,className:de(V3({variant:r,size:i}),u),...d});return s?(typeof s=="string"&&(s={children:s}),l.jsxs(o_,{children:[l.jsx(s_,{asChild:!0,children:x}),l.jsx(l_,{side:"right",align:"center",hidden:y!=="collapsed"||g,...s})]})):x}const H3=()=>{const e=Pp(),{data:t,isLoading:r}=Ek(),i=p.useMemo(()=>{const u=e.pathname.split("/").filter(Boolean),d=[];let h="";for(const g of u)h+=`/${g}`,d.push({to:h,label:g});return d},[e.pathname]),s=p.useMemo(()=>{if(!t)return"U";const d=(t.display_name||t.primary_email||"").trim().split(/\s+/);return d.length>=2?(d[0][0]+d[1][0]).toUpperCase():d.length===1&&d[0]?d[0][0].toUpperCase():"U"},[t]);return l.jsxs("div",{className:"flex h-12 items-center gap-2 border-b px-3",children:[l.jsx(L3,{}),l.jsx("div",{className:"flex-1",children:l.jsx(qk,{children:l.jsxs(Fk,{children:[l.jsx(Vw,{children:l.jsx(Hw,{asChild:!0,children:l.jsx(xm,{to:"/",children:"Home"})})}),i.map((u,d)=>l.jsxs("span",{className:"flex items-center",children:[l.jsx(Vk,{}),l.jsx(Vw,{children:d===i.length-1?l.jsx($k,{className:"capitalize",children:u.label}):l.jsx(Hw,{asChild:!0,children:l.jsx(xm,{to:u.to,className:"capitalize",children:u.label})})})]},u.to))]})})}),l.jsx(se,{variant:"ghost",size:"sm",asChild:!0,children:l.jsx(xm,{to:"/me",children:r?"…":t?.display_name||"Profile"})}),l.jsx(Lk,{className:"h-7 w-7",children:l.jsx(Uk,{children:s})})]})};async function B3(){const e=wn.get();if(!e?.refresh_token){wn.logout();return}try{const t={refresh_token:e.refresh_token};await uT().logout({body:t})}catch(t){console.warn("Logout API failed; clearing local state anyway",t)}finally{wn.logout()}}function G3(){return{logout:p.useCallback(()=>B3(),[])}}const X3=()=>{const[e,t]=p.useState([]),{logout:r}=G3();return p.useEffect(()=>{let i=!0;return(async()=>{try{const u=((await Vi.getMe()).organizations??[]).map(d=>({id:d.id,name:d.name??d.id}));if(!i)return;t(u),!La.get()&&u.length>0&&La.set(u[0].id)}catch{}})(),()=>{i=!1}},[]),l.jsxs(K3,{defaultOpen:!0,children:[l.jsxs(I3,{collapsible:"icon",variant:"floating",children:[l.jsx(q3,{children:l.jsx("div",{className:"px-2 py-2",children:l.jsx(_k,{orgs:e})})}),l.jsxs($3,{children:[l.jsxs(Uu,{children:[l.jsx(qu,{children:"Navigation"}),l.jsx(Fu,{children:l.jsx($u,{children:TT.map(i=>l.jsx(Vu,{children:l.jsx(Hu,{asChild:!0,tooltip:i.label,children:l.jsxs(Cu,{to:i.to,className:({isActive:s})=>de("flex items-center gap-2",s&&"text-primary"),children:[l.jsx(i.icon,{className:"h-4 w-4"}),l.jsx("span",{children:i.label})]})})},i.to))})})]}),l.jsxs(Uu,{children:[l.jsx(qu,{children:"Organization"}),l.jsx(Fu,{children:l.jsx($u,{children:DT.map(i=>l.jsx(Vu,{children:l.jsx(Hu,{asChild:!0,tooltip:i.label,children:l.jsxs(Cu,{to:i.to,className:({isActive:s})=>de("flex items-center gap-2",s&&"text-primary"),children:[l.jsx(i.icon,{className:"h-4 w-4"}),l.jsx("span",{children:i.label})]})})},i.to))})})]}),l.jsxs(Uu,{children:[l.jsx(qu,{children:"User"}),l.jsx(Fu,{children:l.jsx($u,{children:MT.map(i=>l.jsx(Vu,{children:l.jsx(Hu,{asChild:!0,tooltip:i.label,children:l.jsxs(Cu,{to:i.to,className:({isActive:s})=>de("flex items-center gap-2",s&&"text-primary"),children:[l.jsx(i.icon,{className:"h-4 w-4"}),l.jsx("span",{children:i.label})]})})},i.to))})})]}),l.jsxs(Uu,{children:[l.jsx(qu,{children:"Admin"}),l.jsx(Fu,{children:l.jsx($u,{children:zT.map(i=>l.jsx(Vu,{children:l.jsx(Hu,{asChild:!0,tooltip:i.label,children:l.jsxs(Cu,{to:i.to,className:({isActive:s})=>de("flex items-center gap-2",s&&"text-primary"),children:[l.jsx(i.icon,{className:"h-4 w-4"}),l.jsx("span",{children:i.label})]})})},i.to))})})]})]}),l.jsx(F3,{children:l.jsx("div",{className:"px-2 py-2",children:l.jsx(se,{variant:"ghost",size:"sm",className:"w-full",onClick:()=>void r(),children:"Sign out"})})})]}),l.jsxs(U3,{className:"min-h-screen",children:[l.jsx(H3,{}),l.jsx("main",{className:"p-4",children:l.jsx(F0,{})})]})]})},Z3=()=>{const e=p.useSyncExternalStore(t=>wn.subscribe(t),()=>wn.get(),()=>wn.get());return{tokens:e,authed:!!e?.access_token,isExpired:wn.isExpired(),willExpireSoon:wn.willExpireSoon()}},Y3=()=>{const{authed:e}=Z3(),t=Pp();return e?l.jsx(F0,{}):l.jsx(KR,{to:`/login?to=${encodeURIComponent(t.pathname+t.search)}`,replace:!0})},El=yT(),kl={listAnnotations:()=>Pe(async()=>await El.listAnnotations()),createAnnotation:e=>Pe(async()=>await El.createAnnotation({body:e})),getAnnotation:e=>Pe(async()=>await El.getAnnotation({id:e})),deleteAnnotation:e=>Pe(async()=>{await El.deleteAnnotation({id:e})}),updateAnnotation:(e,t)=>Pe(async()=>await El.updateAnnotation({id:e,body:t}))},Cl=gT(),Pl={listLabels:()=>Pe(async()=>await Cl.listLabels()),createLabel:e=>Pe(async()=>await Cl.createLabel({body:e})),getLabel:e=>Pe(async()=>await Cl.getLabel({id:e})),deleteLabel:e=>Pe(async()=>{await Cl.deleteLabel({id:e})}),updateLabel:(e,t)=>Pe(async()=>await Cl.updateLabel({id:e,body:t}))};var lc=e=>e.type==="checkbox",Bi=e=>e instanceof Date,Gn=e=>e==null;const u_=e=>typeof e=="object";var Yt=e=>!Gn(e)&&!Array.isArray(e)&&u_(e)&&!Bi(e),d_=e=>Yt(e)&&e.target?lc(e.target)?e.target.checked:e.target.value:e,Q3=e=>e.substring(0,e.search(/\.\d+(\.|$)/))||e,f_=(e,t)=>e.has(Q3(t)),J3=e=>{const t=e.constructor&&e.constructor.prototype;return Yt(t)&&t.hasOwnProperty("isPrototypeOf")},mg=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function nn(e){let t;const r=Array.isArray(e),i=typeof FileList<"u"?e instanceof FileList:!1;if(e instanceof Date)t=new Date(e);else if(!(mg&&(e instanceof Blob||i))&&(r||Yt(e)))if(t=r?[]:Object.create(Object.getPrototypeOf(e)),!r&&!J3(e))t=e;else for(const s in e)e.hasOwnProperty(s)&&(t[s]=nn(e[s]));else return e;return t}var Xd=e=>/^\w*$/.test(e),Ut=e=>e===void 0,pg=e=>Array.isArray(e)?e.filter(Boolean):[],gg=e=>pg(e.replace(/["|']|\]/g,"").split(/\.|\[/)),we=(e,t,r)=>{if(!t||!Yt(e))return r;const i=(Xd(t)?[t]:gg(t)).reduce((s,u)=>Gn(s)?s:s[u],e);return Ut(i)||i===e?Ut(e[t])?r:e[t]:i},ra=e=>typeof e=="boolean",xt=(e,t,r)=>{let i=-1;const s=Xd(t)?[t]:gg(t),u=s.length,d=u-1;for(;++iQ.useContext(yg),W3=e=>{const{children:t,...r}=e;return Q.createElement(yg.Provider,{value:r},t)};var h_=(e,t,r,i=!0)=>{const s={defaultValues:t._defaultValues};for(const u in e)Object.defineProperty(s,u,{get:()=>{const d=u;return t._proxyFormState[d]!==ka.all&&(t._proxyFormState[d]=!i||ka.all),r&&(r[d]=!0),e[d]}});return s};const vg=typeof window<"u"?Q.useLayoutEffect:Q.useEffect;function m_(e){const t=Zd(),{control:r=t.control,disabled:i,name:s,exact:u}=e||{},[d,h]=Q.useState(r._formState),g=Q.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1});return vg(()=>r._subscribe({name:s,formState:g.current,exact:u,callback:y=>{!i&&h({...r._formState,...y})}}),[s,i,u]),Q.useEffect(()=>{g.current.isValid&&r._setValid(!0)},[r]),Q.useMemo(()=>h_(d,r,g.current,!1),[d,r])}var oa=e=>typeof e=="string",xp=(e,t,r,i,s)=>oa(e)?(i&&t.watch.add(e),we(r,e,s)):Array.isArray(e)?e.map(u=>(i&&t.watch.add(u),we(r,u))):(i&&(t.watchAll=!0),r),bp=e=>Gn(e)||!u_(e);function Pa(e,t,r=new WeakSet){if(bp(e)||bp(t))return e===t;if(Bi(e)&&Bi(t))return e.getTime()===t.getTime();const i=Object.keys(e),s=Object.keys(t);if(i.length!==s.length)return!1;if(r.has(e)||r.has(t))return!0;r.add(e),r.add(t);for(const u of i){const d=e[u];if(!s.includes(u))return!1;if(u!=="ref"){const h=t[u];if(Bi(d)&&Bi(h)||Yt(d)&&Yt(h)||Array.isArray(d)&&Array.isArray(h)?!Pa(d,h,r):d!==h)return!1}}return!0}function e5(e){const t=Zd(),{control:r=t.control,name:i,defaultValue:s,disabled:u,exact:d,compute:h}=e||{},g=Q.useRef(s),y=Q.useRef(h),x=Q.useRef(void 0),v=Q.useRef(r),w=Q.useRef(i);y.current=h;const[E,j]=Q.useState(()=>{const C=r._getWatch(i,g.current);return y.current?y.current(C):C}),S=Q.useCallback(C=>{const T=xp(i,r._names,C||r._formValues,!1,g.current);return y.current?y.current(T):T},[r._formValues,r._names,i]),N=Q.useCallback(C=>{if(!u){const T=xp(i,r._names,C||r._formValues,!1,g.current);if(y.current){const U=y.current(T);Pa(U,x.current)||(j(U),x.current=U)}else j(T)}},[r._formValues,r._names,u,i]);vg(()=>((v.current!==r||!Pa(w.current,i))&&(v.current=r,w.current=i,N()),r._subscribe({name:i,formState:{values:!0},exact:d,callback:C=>{N(C.values)}})),[r,d,i,N]),Q.useEffect(()=>r._removeUnmounted());const D=v.current!==r,A=w.current,O=Q.useMemo(()=>{if(u)return null;const C=!D&&!Pa(A,i);return D||C?S():null},[u,D,i,A,S]);return O!==null?O:E}function t5(e){const t=Zd(),{name:r,disabled:i,control:s=t.control,shouldUnregister:u,defaultValue:d}=e,h=f_(s._names.array,r),g=Q.useMemo(()=>we(s._formValues,r,we(s._defaultValues,r,d)),[s,r,d]),y=e5({control:s,name:r,defaultValue:g,exact:!0}),x=m_({control:s,name:r,exact:!0}),v=Q.useRef(e),w=Q.useRef(void 0),E=Q.useRef(s.register(r,{...e.rules,value:y,...ra(e.disabled)?{disabled:e.disabled}:{}}));v.current=e;const j=Q.useMemo(()=>Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!we(x.errors,r)},isDirty:{enumerable:!0,get:()=>!!we(x.dirtyFields,r)},isTouched:{enumerable:!0,get:()=>!!we(x.touchedFields,r)},isValidating:{enumerable:!0,get:()=>!!we(x.validatingFields,r)},error:{enumerable:!0,get:()=>we(x.errors,r)}}),[x,r]),S=Q.useCallback(O=>E.current.onChange({target:{value:d_(O),name:r},type:pd.CHANGE}),[r]),N=Q.useCallback(()=>E.current.onBlur({target:{value:we(s._formValues,r),name:r},type:pd.BLUR}),[r,s._formValues]),D=Q.useCallback(O=>{const C=we(s._fields,r);C&&O&&(C._f.ref={focus:()=>O.focus&&O.focus(),select:()=>O.select&&O.select(),setCustomValidity:T=>O.setCustomValidity(T),reportValidity:()=>O.reportValidity()})},[s._fields,r]),A=Q.useMemo(()=>({name:r,value:y,...ra(i)||x.disabled?{disabled:x.disabled||i}:{},onChange:S,onBlur:N,ref:D}),[r,i,x.disabled,S,N,D,y]);return Q.useEffect(()=>{const O=s._options.shouldUnregister||u,C=w.current;C&&C!==r&&!h&&s.unregister(C),s.register(r,{...v.current.rules,...ra(v.current.disabled)?{disabled:v.current.disabled}:{}});const T=(U,L)=>{const V=we(s._fields,U);V&&V._f&&(V._f.mount=L)};if(T(r,!0),O){const U=nn(we(s._options.defaultValues,r,v.current.defaultValue));xt(s._defaultValues,r,U),Ut(we(s._formValues,r))&&xt(s._formValues,r,U)}return!h&&s.register(r),w.current=r,()=>{(h?O&&!s._state.action:O)?s.unregister(r):T(r,!1)}},[r,s,h,u]),Q.useEffect(()=>{s._setDisabledField({disabled:i,name:r})},[i,r,s]),Q.useMemo(()=>({field:A,formState:x,fieldState:j}),[A,x,j])}const n5=e=>e.render(t5(e));var xg=(e,t,r,i,s)=>t?{...r[e],types:{...r[e]&&r[e].types?r[e].types:{},[i]:s||!0}}:{},$l=e=>Array.isArray(e)?e:[e],Gw=()=>{let e=[];return{get observers(){return e},next:s=>{for(const u of e)u.next&&u.next(s)},subscribe:s=>(e.push(s),{unsubscribe:()=>{e=e.filter(u=>u!==s)}}),unsubscribe:()=>{e=[]}}};function p_(e,t){const r={};for(const i in e)if(e.hasOwnProperty(i)){const s=e[i],u=t[i];if(s&&Yt(s)&&u){const d=p_(s,u);Yt(d)&&(r[i]=d)}else e[i]&&(r[i]=u)}return r}var An=e=>Yt(e)&&!Object.keys(e).length,bg=e=>e.type==="file",Ka=e=>typeof e=="function",gd=e=>{if(!mg)return!1;const t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},g_=e=>e.type==="select-multiple",wg=e=>e.type==="radio",a5=e=>wg(e)||lc(e),Vm=e=>gd(e)&&e.isConnected;function r5(e,t){const r=t.slice(0,-1).length;let i=0;for(;i{for(const t in e)if(Ka(e[t]))return!0;return!1};function y_(e){return Array.isArray(e)||Yt(e)&&!o5(e)}function wp(e,t={}){for(const r in e)y_(e[r])?(t[r]=Array.isArray(e[r])?[]:{},wp(e[r],t[r])):Ut(e[r])||(t[r]=!0);return t}function rs(e,t,r){r||(r=wp(t));for(const i in e)y_(e[i])?Ut(t)||bp(r[i])?r[i]=wp(e[i],Array.isArray(e[i])?[]:{}):rs(e[i],Gn(t)?{}:t[i],r[i]):r[i]=!Pa(e[i],t[i]);return r}const Xw={value:!1,isValid:!1},Zw={value:!0,isValid:!0};var v_=e=>{if(Array.isArray(e)){if(e.length>1){const t=e.filter(r=>r&&r.checked&&!r.disabled).map(r=>r.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!Ut(e[0].attributes.value)?Ut(e[0].value)||e[0].value===""?Zw:{value:e[0].value,isValid:!0}:Zw:Xw}return Xw},x_=(e,{valueAsNumber:t,valueAsDate:r,setValueAs:i})=>Ut(e)?e:t?e===""?NaN:e&&+e:r&&oa(e)?new Date(e):i?i(e):e;const Yw={isValid:!1,value:null};var b_=e=>Array.isArray(e)?e.reduce((t,r)=>r&&r.checked&&!r.disabled?{isValid:!0,value:r.value}:t,Yw):Yw;function Qw(e){const t=e.ref;return bg(t)?t.files:wg(t)?b_(e.refs).value:g_(t)?[...t.selectedOptions].map(({value:r})=>r):lc(t)?v_(e.refs).value:x_(Ut(t.value)?e.ref.value:t.value,e)}var s5=(e,t,r,i)=>{const s={};for(const u of e){const d=we(t,u);d&&xt(s,u,d._f)}return{criteriaMode:r,names:[...e],fields:s,shouldUseNativeValidation:i}},yd=e=>e instanceof RegExp,jl=e=>Ut(e)?e:yd(e)?e.source:Yt(e)?yd(e.value)?e.value.source:e.value:e,Jw=e=>({isOnSubmit:!e||e===ka.onSubmit,isOnBlur:e===ka.onBlur,isOnChange:e===ka.onChange,isOnAll:e===ka.all,isOnTouch:e===ka.onTouched});const Ww="AsyncFunction";var l5=e=>!!e&&!!e.validate&&!!(Ka(e.validate)&&e.validate.constructor.name===Ww||Yt(e.validate)&&Object.values(e.validate).find(t=>t.constructor.name===Ww)),c5=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate),e0=(e,t,r)=>!r&&(t.watchAll||t.watch.has(e)||[...t.watch].some(i=>e.startsWith(i)&&/^\.\w+/.test(e.slice(i.length))));const Vl=(e,t,r,i)=>{for(const s of r||Object.keys(e)){const u=we(e,s);if(u){const{_f:d,...h}=u;if(d){if(d.refs&&d.refs[0]&&t(d.refs[0],s)&&!i)return!0;if(d.ref&&t(d.ref,d.name)&&!i)return!0;if(Vl(h,t))break}else if(Yt(h)&&Vl(h,t))break}}};function t0(e,t,r){const i=we(e,r);if(i||Xd(r))return{error:i,name:r};const s=r.split(".");for(;s.length;){const u=s.join("."),d=we(t,u),h=we(e,u);if(d&&!Array.isArray(d)&&r!==u)return{name:r};if(h&&h.type)return{name:u,error:h};if(h&&h.root&&h.root.type)return{name:`${u}.root`,error:h.root};s.pop()}return{name:r}}var u5=(e,t,r,i)=>{r(e);const{name:s,...u}=e;return An(u)||Object.keys(u).length>=Object.keys(t).length||Object.keys(u).find(d=>t[d]===(!i||ka.all))},d5=(e,t,r)=>!e||!t||e===t||$l(e).some(i=>i&&(r?i===t:i.startsWith(t)||t.startsWith(i))),f5=(e,t,r,i,s)=>s.isOnAll?!1:!r&&s.isOnTouch?!(t||e):(r?i.isOnBlur:s.isOnBlur)?!e:(r?i.isOnChange:s.isOnChange)?e:!0,h5=(e,t)=>!pg(we(e,t)).length&&Xt(e,t),m5=(e,t,r)=>{const i=$l(we(e,r));return xt(i,"root",t[r]),xt(e,r,i),e};function n0(e,t,r="validate"){if(oa(e)||Array.isArray(e)&&e.every(oa)||ra(e)&&!e)return{type:r,message:oa(e)?e:"",ref:t}}var ts=e=>Yt(e)&&!yd(e)?e:{value:e,message:""},a0=async(e,t,r,i,s,u)=>{const{ref:d,refs:h,required:g,maxLength:y,minLength:x,min:v,max:w,pattern:E,validate:j,name:S,valueAsNumber:N,mount:D}=e._f,A=we(r,S);if(!D||t.has(S))return{};const O=h?h[0]:d,C=ae=>{s&&O.reportValidity&&(O.setCustomValidity(ra(ae)?"":ae||""),O.reportValidity())},T={},U=wg(d),L=lc(d),V=U||L,fe=(N||bg(d))&&Ut(d.value)&&Ut(A)||gd(d)&&d.value===""||A===""||Array.isArray(A)&&!A.length,ge=xg.bind(null,S,i,T),pe=(ae,le,he,be=Tr.maxLength,R=Tr.minLength)=>{const P=ae?le:he;T[S]={type:ae?be:R,message:P,ref:d,...ge(ae?be:R,P)}};if(u?!Array.isArray(A)||!A.length:g&&(!V&&(fe||Gn(A))||ra(A)&&!A||L&&!v_(h).isValid||U&&!b_(h).isValid)){const{value:ae,message:le}=oa(g)?{value:!!g,message:g}:ts(g);if(ae&&(T[S]={type:Tr.required,message:le,ref:O,...ge(Tr.required,le)},!i))return C(le),T}if(!fe&&(!Gn(v)||!Gn(w))){let ae,le;const he=ts(w),be=ts(v);if(!Gn(A)&&!isNaN(A)){const R=d.valueAsNumber||A&&+A;Gn(he.value)||(ae=R>he.value),Gn(be.value)||(le=Rnew Date(new Date().toDateString()+" "+me),I=d.type=="time",ee=d.type=="week";oa(he.value)&&A&&(ae=I?P(A)>P(he.value):ee?A>he.value:R>new Date(he.value)),oa(be.value)&&A&&(le=I?P(A)+ae.value,be=!Gn(le.value)&&A.length<+le.value;if((he||be)&&(pe(he,ae.message,le.message),!i))return C(T[S].message),T}if(E&&!fe&&oa(A)){const{value:ae,message:le}=ts(E);if(yd(ae)&&!A.match(ae)&&(T[S]={type:Tr.pattern,message:le,ref:d,...ge(Tr.pattern,le)},!i))return C(le),T}if(j){if(Ka(j)){const ae=await j(A,r),le=n0(ae,O);if(le&&(T[S]={...le,...ge(Tr.validate,le.message)},!i))return C(le.message),T}else if(Yt(j)){let ae={};for(const le in j){if(!An(ae)&&!i)break;const he=n0(await j[le](A,r),O,le);he&&(ae={...he,...ge(le,he.message)},C(he.message),i&&(T[S]=ae))}if(!An(ae)&&(T[S]={ref:O,...ae},!i))return T}}return C(!0),T};const p5={mode:ka.onSubmit,reValidateMode:ka.onChange,shouldFocusError:!0};function g5(e={}){let t={...p5,...e},r={submitCount:0,isDirty:!1,isReady:!1,isLoading:Ka(t.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1},i={},s=Yt(t.defaultValues)||Yt(t.values)?nn(t.defaultValues||t.values)||{}:{},u=t.shouldUnregister?{}:nn(s),d={action:!1,mount:!1,watch:!1},h={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set},g,y=0;const x={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1};let v={...x};const w={array:Gw(),state:Gw()},E=t.criteriaMode===ka.all,j=z=>$=>{clearTimeout(y),y=setTimeout(z,$)},S=async z=>{if(!t.disabled&&(x.isValid||v.isValid||z)){const $=t.resolver?An((await L()).errors):await fe(i,!0);$!==r.isValid&&w.state.next({isValid:$})}},N=(z,$)=>{!t.disabled&&(x.isValidating||x.validatingFields||v.isValidating||v.validatingFields)&&((z||Array.from(h.mount)).forEach(Z=>{Z&&($?xt(r.validatingFields,Z,$):Xt(r.validatingFields,Z))}),w.state.next({validatingFields:r.validatingFields,isValidating:!An(r.validatingFields)}))},D=(z,$=[],Z,ye,ce=!0,ue=!0)=>{if(ye&&Z&&!t.disabled){if(d.action=!0,ue&&Array.isArray(we(i,z))){const De=Z(we(i,z),ye.argA,ye.argB);ce&&xt(i,z,De)}if(ue&&Array.isArray(we(r.errors,z))){const De=Z(we(r.errors,z),ye.argA,ye.argB);ce&&xt(r.errors,z,De),h5(r.errors,z)}if((x.touchedFields||v.touchedFields)&&ue&&Array.isArray(we(r.touchedFields,z))){const De=Z(we(r.touchedFields,z),ye.argA,ye.argB);ce&&xt(r.touchedFields,z,De)}(x.dirtyFields||v.dirtyFields)&&(r.dirtyFields=rs(s,u)),w.state.next({name:z,isDirty:pe(z,$),dirtyFields:r.dirtyFields,errors:r.errors,isValid:r.isValid})}else xt(u,z,$)},A=(z,$)=>{xt(r.errors,z,$),w.state.next({errors:r.errors})},O=z=>{r.errors=z,w.state.next({errors:r.errors,isValid:!1})},C=(z,$,Z,ye)=>{const ce=we(i,z);if(ce){const ue=we(u,z,Ut(Z)?we(s,z):Z);Ut(ue)||ye&&ye.defaultChecked||$?xt(u,z,$?ue:Qw(ce._f)):he(z,ue),d.mount&&S()}},T=(z,$,Z,ye,ce)=>{let ue=!1,De=!1;const lt={name:z};if(!t.disabled){if(!Z||ye){(x.isDirty||v.isDirty)&&(De=r.isDirty,r.isDirty=lt.isDirty=pe(),ue=De!==lt.isDirty);const ct=Pa(we(s,z),$);De=!!we(r.dirtyFields,z),ct?Xt(r.dirtyFields,z):xt(r.dirtyFields,z,!0),lt.dirtyFields=r.dirtyFields,ue=ue||(x.dirtyFields||v.dirtyFields)&&De!==!ct}if(Z){const ct=we(r.touchedFields,z);ct||(xt(r.touchedFields,z,Z),lt.touchedFields=r.touchedFields,ue=ue||(x.touchedFields||v.touchedFields)&&ct!==Z)}ue&&ce&&w.state.next(lt)}return ue?lt:{}},U=(z,$,Z,ye)=>{const ce=we(r.errors,z),ue=(x.isValid||v.isValid)&&ra($)&&r.isValid!==$;if(t.delayError&&Z?(g=j(()=>A(z,Z)),g(t.delayError)):(clearTimeout(y),g=null,Z?xt(r.errors,z,Z):Xt(r.errors,z)),(Z?!Pa(ce,Z):ce)||!An(ye)||ue){const De={...ye,...ue&&ra($)?{isValid:$}:{},errors:r.errors,name:z};r={...r,...De},w.state.next(De)}},L=async z=>{N(z,!0);const $=await t.resolver(u,t.context,s5(z||h.mount,i,t.criteriaMode,t.shouldUseNativeValidation));return N(z),$},V=async z=>{const{errors:$}=await L(z);if(z)for(const Z of z){const ye=we($,Z);ye?xt(r.errors,Z,ye):Xt(r.errors,Z)}else r.errors=$;return $},fe=async(z,$,Z={valid:!0})=>{for(const ye in z){const ce=z[ye];if(ce){const{_f:ue,...De}=ce;if(ue){const lt=h.array.has(ue.name),ct=ce._f&&l5(ce._f);ct&&x.validatingFields&&N([ue.name],!0);const sn=await a0(ce,h.disabled,u,E,t.shouldUseNativeValidation&&!$,lt);if(ct&&x.validatingFields&&N([ue.name]),sn[ue.name]&&(Z.valid=!1,$))break;!$&&(we(sn,ue.name)?lt?m5(r.errors,sn,ue.name):xt(r.errors,ue.name,sn[ue.name]):Xt(r.errors,ue.name))}!An(De)&&await fe(De,$,Z)}}return Z.valid},ge=()=>{for(const z of h.unMount){const $=we(i,z);$&&($._f.refs?$._f.refs.every(Z=>!Vm(Z)):!Vm($._f.ref))&&W(z)}h.unMount=new Set},pe=(z,$)=>!t.disabled&&(z&&$&&xt(u,z,$),!Pa(me(),s)),ae=(z,$,Z)=>xp(z,h,{...d.mount?u:Ut($)?s:oa(z)?{[z]:$}:$},Z,$),le=z=>pg(we(d.mount?u:s,z,t.shouldUnregister?we(s,z,[]):[])),he=(z,$,Z={})=>{const ye=we(i,z);let ce=$;if(ye){const ue=ye._f;ue&&(!ue.disabled&&xt(u,z,x_($,ue)),ce=gd(ue.ref)&&Gn($)?"":$,g_(ue.ref)?[...ue.ref.options].forEach(De=>De.selected=ce.includes(De.value)):ue.refs?lc(ue.ref)?ue.refs.forEach(De=>{(!De.defaultChecked||!De.disabled)&&(Array.isArray(ce)?De.checked=!!ce.find(lt=>lt===De.value):De.checked=ce===De.value||!!ce)}):ue.refs.forEach(De=>De.checked=De.value===ce):bg(ue.ref)?ue.ref.value="":(ue.ref.value=ce,ue.ref.type||w.state.next({name:z,values:nn(u)})))}(Z.shouldDirty||Z.shouldTouch)&&T(z,ce,Z.shouldTouch,Z.shouldDirty,!0),Z.shouldValidate&&ee(z)},be=(z,$,Z)=>{for(const ye in $){if(!$.hasOwnProperty(ye))return;const ce=$[ye],ue=z+"."+ye,De=we(i,ue);(h.array.has(z)||Yt(ce)||De&&!De._f)&&!Bi(ce)?be(ue,ce,Z):he(ue,ce,Z)}},R=(z,$,Z={})=>{const ye=we(i,z),ce=h.array.has(z),ue=nn($);xt(u,z,ue),ce?(w.array.next({name:z,values:nn(u)}),(x.isDirty||x.dirtyFields||v.isDirty||v.dirtyFields)&&Z.shouldDirty&&w.state.next({name:z,dirtyFields:rs(s,u),isDirty:pe(z,ue)})):ye&&!ye._f&&!Gn(ue)?be(z,ue,Z):he(z,ue,Z),e0(z,h)&&w.state.next({...r,name:z}),w.state.next({name:d.mount?z:void 0,values:nn(u)})},P=async z=>{d.mount=!0;const $=z.target;let Z=$.name,ye=!0;const ce=we(i,Z),ue=ct=>{ye=Number.isNaN(ct)||Bi(ct)&&isNaN(ct.getTime())||Pa(ct,we(u,Z,ct))},De=Jw(t.mode),lt=Jw(t.reValidateMode);if(ce){let ct,sn;const kn=$.type?Qw(ce._f):d_(z),Zn=z.type===pd.BLUR||z.type===pd.FOCUS_OUT,Xa=!c5(ce._f)&&!t.resolver&&!we(r.errors,Z)&&!ce._f.deps||f5(Zn,we(r.touchedFields,Z),r.isSubmitted,lt,De),Na=e0(Z,h,Zn);xt(u,Z,kn),Zn?(!$||!$.readOnly)&&(ce._f.onBlur&&ce._f.onBlur(z),g&&g(0)):ce._f.onChange&&ce._f.onChange(z);const Jt=T(Z,kn,Zn),Yn=!An(Jt)||Na;if(!Zn&&w.state.next({name:Z,type:z.type,values:nn(u)}),Xa)return(x.isValid||v.isValid)&&(t.mode==="onBlur"?Zn&&S():Zn||S()),Yn&&w.state.next({name:Z,...Na?{}:Jt});if(!Zn&&Na&&w.state.next({...r}),t.resolver){const{errors:Wt}=await L([Z]);if(ue(kn),ye){const As=t0(r.errors,i,Z),Ir=t0(Wt,i,As.name||Z);ct=Ir.error,Z=Ir.name,sn=An(Wt)}}else N([Z],!0),ct=(await a0(ce,h.disabled,u,E,t.shouldUseNativeValidation))[Z],N([Z]),ue(kn),ye&&(ct?sn=!1:(x.isValid||v.isValid)&&(sn=await fe(i,!0)));ye&&(ce._f.deps&&(!Array.isArray(ce._f.deps)||ce._f.deps.length>0)&&ee(ce._f.deps),U(Z,sn,ct,Jt))}},I=(z,$)=>{if(we(r.errors,$)&&z.focus)return z.focus(),1},ee=async(z,$={})=>{let Z,ye;const ce=$l(z);if(t.resolver){const ue=await V(Ut(z)?z:ce);Z=An(ue),ye=z?!ce.some(De=>we(ue,De)):Z}else z?(ye=(await Promise.all(ce.map(async ue=>{const De=we(i,ue);return await fe(De&&De._f?{[ue]:De}:De)}))).every(Boolean),!(!ye&&!r.isValid)&&S()):ye=Z=await fe(i);return w.state.next({...!oa(z)||(x.isValid||v.isValid)&&Z!==r.isValid?{}:{name:z},...t.resolver||!z?{isValid:Z}:{},errors:r.errors}),$.shouldFocus&&!ye&&Vl(i,I,z?ce:h.mount),ye},me=(z,$)=>{let Z={...d.mount?u:s};return $&&(Z=p_($.dirtyFields?r.dirtyFields:r.touchedFields,Z)),Ut(z)?Z:oa(z)?we(Z,z):z.map(ye=>we(Z,ye))},Re=(z,$)=>({invalid:!!we(($||r).errors,z),isDirty:!!we(($||r).dirtyFields,z),error:we(($||r).errors,z),isValidating:!!we(r.validatingFields,z),isTouched:!!we(($||r).touchedFields,z)}),G=z=>{z&&$l(z).forEach($=>Xt(r.errors,$)),w.state.next({errors:z?r.errors:{}})},Y=(z,$,Z)=>{const ye=(we(i,z,{_f:{}})._f||{}).ref,ce=we(r.errors,z)||{},{ref:ue,message:De,type:lt,...ct}=ce;xt(r.errors,z,{...ct,...$,ref:ye}),w.state.next({name:z,errors:r.errors,isValid:!1}),Z&&Z.shouldFocus&&ye&&ye.focus&&ye.focus()},ie=(z,$)=>Ka(z)?w.state.subscribe({next:Z=>"values"in Z&&z(ae(void 0,$),Z)}):ae(z,$,!0),oe=z=>w.state.subscribe({next:$=>{d5(z.name,$.name,z.exact)&&u5($,z.formState||x,Qe,z.reRenderRoot)&&z.callback({values:{...u},...r,...$,defaultValues:s})}}).unsubscribe,ve=z=>(d.mount=!0,v={...v,...z.formState},oe({...z,formState:v})),W=(z,$={})=>{for(const Z of z?$l(z):h.mount)h.mount.delete(Z),h.array.delete(Z),$.keepValue||(Xt(i,Z),Xt(u,Z)),!$.keepError&&Xt(r.errors,Z),!$.keepDirty&&Xt(r.dirtyFields,Z),!$.keepTouched&&Xt(r.touchedFields,Z),!$.keepIsValidating&&Xt(r.validatingFields,Z),!t.shouldUnregister&&!$.keepDefaultValue&&Xt(s,Z);w.state.next({values:nn(u)}),w.state.next({...r,...$.keepDirty?{isDirty:pe()}:{}}),!$.keepIsValid&&S()},xe=({disabled:z,name:$})=>{(ra(z)&&d.mount||z||h.disabled.has($))&&(z?h.disabled.add($):h.disabled.delete($))},Oe=(z,$={})=>{let Z=we(i,z);const ye=ra($.disabled)||ra(t.disabled);return xt(i,z,{...Z||{},_f:{...Z&&Z._f?Z._f:{ref:{name:z}},name:z,mount:!0,...$}}),h.mount.add(z),Z?xe({disabled:ra($.disabled)?$.disabled:t.disabled,name:z}):C(z,!0,$.value),{...ye?{disabled:$.disabled||t.disabled}:{},...t.progressive?{required:!!$.required,min:jl($.min),max:jl($.max),minLength:jl($.minLength),maxLength:jl($.maxLength),pattern:jl($.pattern)}:{},name:z,onChange:P,onBlur:P,ref:ce=>{if(ce){Oe(z,$),Z=we(i,z);const ue=Ut(ce.value)&&ce.querySelectorAll&&ce.querySelectorAll("input,select,textarea")[0]||ce,De=a5(ue),lt=Z._f.refs||[];if(De?lt.find(ct=>ct===ue):ue===Z._f.ref)return;xt(i,z,{_f:{...Z._f,...De?{refs:[...lt.filter(Vm),ue,...Array.isArray(we(s,z))?[{}]:[]],ref:{type:ue.type,name:z}}:{ref:ue}}}),C(z,!1,void 0,ue)}else Z=we(i,z,{}),Z._f&&(Z._f.mount=!1),(t.shouldUnregister||$.shouldUnregister)&&!(f_(h.array,z)&&d.action)&&h.unMount.add(z)}}},Ue=()=>t.shouldFocusError&&Vl(i,I,h.mount),Ye=z=>{ra(z)&&(w.state.next({disabled:z}),Vl(i,($,Z)=>{const ye=we(i,Z);ye&&($.disabled=ye._f.disabled||z,Array.isArray(ye._f.refs)&&ye._f.refs.forEach(ce=>{ce.disabled=ye._f.disabled||z}))},0,!1))},Ze=(z,$)=>async Z=>{let ye;Z&&(Z.preventDefault&&Z.preventDefault(),Z.persist&&Z.persist());let ce=nn(u);if(w.state.next({isSubmitting:!0}),t.resolver){const{errors:ue,values:De}=await L();r.errors=ue,ce=nn(De)}else await fe(i);if(h.disabled.size)for(const ue of h.disabled)Xt(ce,ue);if(Xt(r.errors,"root"),An(r.errors)){w.state.next({errors:{}});try{await z(ce,Z)}catch(ue){ye=ue}}else $&&await $({...r.errors},Z),Ue(),setTimeout(Ue);if(w.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:An(r.errors)&&!ye,submitCount:r.submitCount+1,errors:r.errors}),ye)throw ye},Kt=(z,$={})=>{we(i,z)&&(Ut($.defaultValue)?R(z,nn(we(s,z))):(R(z,$.defaultValue),xt(s,z,nn($.defaultValue))),$.keepTouched||Xt(r.touchedFields,z),$.keepDirty||(Xt(r.dirtyFields,z),r.isDirty=$.defaultValue?pe(z,nn(we(s,z))):pe()),$.keepError||(Xt(r.errors,z),x.isValid&&S()),w.state.next({...r}))},B=(z,$={})=>{const Z=z?nn(z):s,ye=nn(Z),ce=An(z),ue=ce?s:ye;if($.keepDefaultValues||(s=Z),!$.keepValues){if($.keepDirtyValues){const De=new Set([...h.mount,...Object.keys(rs(s,u))]);for(const lt of Array.from(De))we(r.dirtyFields,lt)?xt(ue,lt,we(u,lt)):R(lt,we(ue,lt))}else{if(mg&&Ut(z))for(const De of h.mount){const lt=we(i,De);if(lt&<._f){const ct=Array.isArray(lt._f.refs)?lt._f.refs[0]:lt._f.ref;if(gd(ct)){const sn=ct.closest("form");if(sn){sn.reset();break}}}}if($.keepFieldsRef)for(const De of h.mount)R(De,we(ue,De));else i={}}u=t.shouldUnregister?$.keepDefaultValues?nn(s):{}:nn(ue),w.array.next({values:{...ue}}),w.state.next({values:{...ue}})}h={mount:$.keepDirtyValues?h.mount:new Set,unMount:new Set,array:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},d.mount=!x.isValid||!!$.keepIsValid||!!$.keepDirtyValues||!t.shouldUnregister&&!An(ue),d.watch=!!t.shouldUnregister,w.state.next({submitCount:$.keepSubmitCount?r.submitCount:0,isDirty:ce?!1:$.keepDirty?r.isDirty:!!($.keepDefaultValues&&!Pa(z,s)),isSubmitted:$.keepIsSubmitted?r.isSubmitted:!1,dirtyFields:ce?{}:$.keepDirtyValues?$.keepDefaultValues&&u?rs(s,u):r.dirtyFields:$.keepDefaultValues&&z?rs(s,z):$.keepDirty?r.dirtyFields:{},touchedFields:$.keepTouched?r.touchedFields:{},errors:$.keepErrors?r.errors:{},isSubmitSuccessful:$.keepIsSubmitSuccessful?r.isSubmitSuccessful:!1,isSubmitting:!1,defaultValues:s})},qe=(z,$)=>B(Ka(z)?z(u):z,$),ke=(z,$={})=>{const Z=we(i,z),ye=Z&&Z._f;if(ye){const ce=ye.refs?ye.refs[0]:ye.ref;ce.focus&&(ce.focus(),$.shouldSelect&&Ka(ce.select)&&ce.select())}},Qe=z=>{r={...r,...z}},jn={control:{register:Oe,unregister:W,getFieldState:Re,handleSubmit:Ze,setError:Y,_subscribe:oe,_runSchema:L,_focusError:Ue,_getWatch:ae,_getDirty:pe,_setValid:S,_setFieldArray:D,_setDisabledField:xe,_setErrors:O,_getFieldArray:le,_reset:B,_resetDefaultValues:()=>Ka(t.defaultValues)&&t.defaultValues().then(z=>{qe(z,t.resetOptions),w.state.next({isLoading:!1})}),_removeUnmounted:ge,_disableForm:Ye,_subjects:w,_proxyFormState:x,get _fields(){return i},get _formValues(){return u},get _state(){return d},set _state(z){d=z},get _defaultValues(){return s},get _names(){return h},set _names(z){h=z},get _formState(){return r},get _options(){return t},set _options(z){t={...t,...z}}},subscribe:ve,trigger:ee,register:Oe,handleSubmit:Ze,watch:ie,setValue:R,getValues:me,reset:qe,resetField:Kt,clearErrors:G,unregister:W,setError:Y,setFocus:ke,getFieldState:Re};return{...jn,formControl:jn}}function _n(e={}){const t=Q.useRef(void 0),r=Q.useRef(void 0),[i,s]=Q.useState({isDirty:!1,isValidating:!1,isLoading:Ka(e.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:e.errors||{},disabled:e.disabled||!1,isReady:!1,defaultValues:Ka(e.defaultValues)?void 0:e.defaultValues});if(!t.current)if(e.formControl)t.current={...e.formControl,formState:i},e.defaultValues&&!Ka(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{const{formControl:d,...h}=g5(e);t.current={...h,formState:i}}const u=t.current.control;return u._options=e,vg(()=>{const d=u._subscribe({formState:u._proxyFormState,callback:()=>s({...u._formState}),reRenderRoot:!0});return s(h=>({...h,isReady:!0})),u._formState.isReady=!0,d},[u]),Q.useEffect(()=>u._disableForm(e.disabled),[u,e.disabled]),Q.useEffect(()=>{e.mode&&(u._options.mode=e.mode),e.reValidateMode&&(u._options.reValidateMode=e.reValidateMode)},[u,e.mode,e.reValidateMode]),Q.useEffect(()=>{e.errors&&(u._setErrors(e.errors),u._focusError())},[u,e.errors]),Q.useEffect(()=>{e.shouldUnregister&&u._subjects.state.next({values:u._getWatch()})},[u,e.shouldUnregister]),Q.useEffect(()=>{if(u._proxyFormState.isDirty){const d=u._getDirty();d!==i.isDirty&&u._subjects.state.next({isDirty:d})}},[u,i.isDirty]),Q.useEffect(()=>{e.values&&!Pa(e.values,r.current)?(u._reset(e.values,{keepFieldsRef:!0,...u._options.resetOptions}),r.current=e.values,s(d=>({...d}))):u._resetDefaultValues()},[u,e.values]),Q.useEffect(()=>{u._state.mount||(u._setValid(),u._state.mount=!0),u._state.watch&&(u._state.watch=!1,u._subjects.state.next({...u._formState})),u._removeUnmounted()}),t.current.formState=h_(i,u),t.current}const r0=(e,t,r)=>{if(e&&"reportValidity"in e){const i=we(r,t);e.setCustomValidity(i&&i.message||""),e.reportValidity()}},Sp=(e,t)=>{for(const r in t.fields){const i=t.fields[r];i&&i.ref&&"reportValidity"in i.ref?r0(i.ref,r,e):i&&i.refs&&i.refs.forEach(s=>r0(s,r,e))}},i0=(e,t)=>{t.shouldUseNativeValidation&&Sp(e,t);const r={};for(const i in e){const s=we(t.fields,i),u=Object.assign(e[i]||{},{ref:s&&s.ref});if(y5(t.names||Object.keys(e),i)){const d=Object.assign({},we(r,i));xt(d,"root",u),xt(r,i,d)}else xt(r,i,u)}return r},y5=(e,t)=>{const r=o0(t);return e.some(i=>o0(i).match(`^${r}\\.\\d+`))};function o0(e){return e.replace(/\]|\[/g,"")}function re(e,t,r){function i(h,g){var y;Object.defineProperty(h,"_zod",{value:h._zod??{},enumerable:!1}),(y=h._zod).traits??(y.traits=new Set),h._zod.traits.add(e),t(h,g);for(const x in d.prototype)x in h||Object.defineProperty(h,x,{value:d.prototype[x].bind(h)});h._zod.constr=d,h._zod.def=g}const s=r?.Parent??Object;class u extends s{}Object.defineProperty(u,"name",{value:e});function d(h){var g;const y=r?.Parent?new u:this;i(y,h),(g=y._zod).deferred??(g.deferred=[]);for(const x of y._zod.deferred)x();return y}return Object.defineProperty(d,"init",{value:i}),Object.defineProperty(d,Symbol.hasInstance,{value:h=>r?.Parent&&h instanceof r.Parent?!0:h?._zod?.traits?.has(e)}),Object.defineProperty(d,"name",{value:e}),d}class hs extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}class w_ extends Error{constructor(t){super(`Encountered unidirectional transform during encode: ${t}`),this.name="ZodEncodeError"}}const S_={};function eo(e){return S_}function v5(e){const t=Object.values(e).filter(i=>typeof i=="number");return Object.entries(e).filter(([i,s])=>t.indexOf(+i)===-1).map(([i,s])=>s)}function _p(e,t){return typeof t=="bigint"?t.toString():t}function Sg(e){return{get value(){{const t=e();return Object.defineProperty(this,"value",{value:t}),t}}}}function _g(e){return e==null}function Eg(e){const t=e.startsWith("^")?1:0,r=e.endsWith("$")?e.length-1:e.length;return e.slice(t,r)}function x5(e,t){const r=(e.toString().split(".")[1]||"").length,i=t.toString();let s=(i.split(".")[1]||"").length;if(s===0&&/\d?e-\d?/.test(i)){const g=i.match(/\d?e-(\d?)/);g?.[1]&&(s=Number.parseInt(g[1]))}const u=r>s?r:s,d=Number.parseInt(e.toFixed(u).replace(".","")),h=Number.parseInt(t.toFixed(u).replace(".",""));return d%h/10**u}const s0=Symbol("evaluating");function Ot(e,t,r){let i;Object.defineProperty(e,t,{get(){if(i!==s0)return i===void 0&&(i=s0,i=r()),i},set(s){Object.defineProperty(e,t,{value:s})},configurable:!0})}function io(e,t,r){Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0})}function oo(...e){const t={};for(const r of e){const i=Object.getOwnPropertyDescriptors(r);Object.assign(t,i)}return Object.defineProperties({},t)}function l0(e){return JSON.stringify(e)}const __="captureStackTrace"in Error?Error.captureStackTrace:(...e)=>{};function vd(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const b5=Sg(()=>{if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{const e=Function;return new e(""),!0}catch{return!1}});function Zl(e){if(vd(e)===!1)return!1;const t=e.constructor;if(t===void 0)return!0;const r=t.prototype;return!(vd(r)===!1||Object.prototype.hasOwnProperty.call(r,"isPrototypeOf")===!1)}function E_(e){return Zl(e)?{...e}:Array.isArray(e)?[...e]:e}const w5=new Set(["string","number","symbol"]);function xs(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function wi(e,t,r){const i=new e._zod.constr(t??e._zod.def);return(!t||r?.parent)&&(i._zod.parent=e),i}function Ie(e){const t=e;if(!t)return{};if(typeof t=="string")return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error=="string"?{...t,error:()=>t.error}:t}function S5(e){return Object.keys(e).filter(t=>e[t]._zod.optin==="optional"&&e[t]._zod.optout==="optional")}const _5={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function E5(e,t){const r=e._zod.def,i=oo(e._zod.def,{get shape(){const s={};for(const u in t){if(!(u in r.shape))throw new Error(`Unrecognized key: "${u}"`);t[u]&&(s[u]=r.shape[u])}return io(this,"shape",s),s},checks:[]});return wi(e,i)}function C5(e,t){const r=e._zod.def,i=oo(e._zod.def,{get shape(){const s={...e._zod.def.shape};for(const u in t){if(!(u in r.shape))throw new Error(`Unrecognized key: "${u}"`);t[u]&&delete s[u]}return io(this,"shape",s),s},checks:[]});return wi(e,i)}function j5(e,t){if(!Zl(t))throw new Error("Invalid input to extend: expected a plain object");const r=e._zod.def.checks;if(r&&r.length>0)throw new Error("Object schemas containing refinements cannot be extended. Use `.safeExtend()` instead.");const s=oo(e._zod.def,{get shape(){const u={...e._zod.def.shape,...t};return io(this,"shape",u),u},checks:[]});return wi(e,s)}function R5(e,t){if(!Zl(t))throw new Error("Invalid input to safeExtend: expected a plain object");const r={...e._zod.def,get shape(){const i={...e._zod.def.shape,...t};return io(this,"shape",i),i},checks:e._zod.def.checks};return wi(e,r)}function O5(e,t){const r=oo(e._zod.def,{get shape(){const i={...e._zod.def.shape,...t._zod.def.shape};return io(this,"shape",i),i},get catchall(){return t._zod.def.catchall},checks:[]});return wi(e,r)}function N5(e,t,r){const i=oo(t._zod.def,{get shape(){const s=t._zod.def.shape,u={...s};if(r)for(const d in r){if(!(d in s))throw new Error(`Unrecognized key: "${d}"`);r[d]&&(u[d]=e?new e({type:"optional",innerType:s[d]}):s[d])}else for(const d in s)u[d]=e?new e({type:"optional",innerType:s[d]}):s[d];return io(this,"shape",u),u},checks:[]});return wi(t,i)}function A5(e,t,r){const i=oo(t._zod.def,{get shape(){const s=t._zod.def.shape,u={...s};if(r)for(const d in r){if(!(d in u))throw new Error(`Unrecognized key: "${d}"`);r[d]&&(u[d]=new e({type:"nonoptional",innerType:s[d]}))}else for(const d in s)u[d]=new e({type:"nonoptional",innerType:s[d]});return io(this,"shape",u),u},checks:[]});return wi(t,i)}function us(e,t=0){if(e.aborted===!0)return!0;for(let r=t;r{var i;return(i=r).path??(i.path=[]),r.path.unshift(e),r})}function Bu(e){return typeof e=="string"?e:e?.message}function to(e,t,r){const i={...e,path:e.path??[]};if(!e.message){const s=Bu(e.inst?._zod.def?.error?.(e))??Bu(t?.error?.(e))??Bu(r.customError?.(e))??Bu(r.localeError?.(e))??"Invalid input";i.message=s}return delete i.inst,delete i.continue,t?.reportInput||delete i.input,i}function Cg(e){return Array.isArray(e)?"array":typeof e=="string"?"string":"unknown"}function Yl(...e){const[t,r,i]=e;return typeof t=="string"?{message:t,code:"custom",input:r,inst:i}:{...t}}const j_=(e,t)=>{e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,_p,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},jg=re("$ZodError",j_),Yd=re("$ZodError",j_,{Parent:Error});function T5(e,t=r=>r.message){const r={},i=[];for(const s of e.issues)s.path.length>0?(r[s.path[0]]=r[s.path[0]]||[],r[s.path[0]].push(t(s))):i.push(t(s));return{formErrors:i,fieldErrors:r}}function D5(e,t=r=>r.message){const r={_errors:[]},i=s=>{for(const u of s.issues)if(u.code==="invalid_union"&&u.errors.length)u.errors.map(d=>i({issues:d}));else if(u.code==="invalid_key")i({issues:u.issues});else if(u.code==="invalid_element")i({issues:u.issues});else if(u.path.length===0)r._errors.push(t(u));else{let d=r,h=0;for(;h(t,r,i,s)=>{const u=i?Object.assign(i,{async:!1}):{async:!1},d=t._zod.run({value:r,issues:[]},u);if(d instanceof Promise)throw new hs;if(d.issues.length){const h=new(s?.Err??e)(d.issues.map(g=>to(g,u,eo())));throw __(h,s?.callee),h}return d.value},M5=Qd(Yd),Jd=e=>async(t,r,i,s)=>{const u=i?Object.assign(i,{async:!0}):{async:!0};let d=t._zod.run({value:r,issues:[]},u);if(d instanceof Promise&&(d=await d),d.issues.length){const h=new(s?.Err??e)(d.issues.map(g=>to(g,u,eo())));throw __(h,s?.callee),h}return d.value},z5=Jd(Yd),Wd=e=>(t,r,i)=>{const s=i?{...i,async:!1}:{async:!1},u=t._zod.run({value:r,issues:[]},s);if(u instanceof Promise)throw new hs;return u.issues.length?{success:!1,error:new(e??jg)(u.issues.map(d=>to(d,s,eo())))}:{success:!0,data:u.value}},k5=Wd(Yd),ef=e=>async(t,r,i)=>{const s=i?Object.assign(i,{async:!0}):{async:!0};let u=t._zod.run({value:r,issues:[]},s);return u instanceof Promise&&(u=await u),u.issues.length?{success:!1,error:new e(u.issues.map(d=>to(d,s,eo())))}:{success:!0,data:u.value}},P5=ef(Yd),K5=e=>(t,r,i)=>{const s=i?Object.assign(i,{direction:"backward"}):{direction:"backward"};return Qd(e)(t,r,s)},I5=e=>(t,r,i)=>Qd(e)(t,r,i),L5=e=>async(t,r,i)=>{const s=i?Object.assign(i,{direction:"backward"}):{direction:"backward"};return Jd(e)(t,r,s)},U5=e=>async(t,r,i)=>Jd(e)(t,r,i),q5=e=>(t,r,i)=>{const s=i?Object.assign(i,{direction:"backward"}):{direction:"backward"};return Wd(e)(t,r,s)},F5=e=>(t,r,i)=>Wd(e)(t,r,i),$5=e=>async(t,r,i)=>{const s=i?Object.assign(i,{direction:"backward"}):{direction:"backward"};return ef(e)(t,r,s)},V5=e=>async(t,r,i)=>ef(e)(t,r,i),H5=/^[cC][^\s-]{8,}$/,B5=/^[0-9a-z]+$/,G5=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,X5=/^[0-9a-vA-V]{20}$/,Z5=/^[A-Za-z0-9]{27}$/,Y5=/^[a-zA-Z0-9_-]{21}$/,Q5=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,J5=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,c0=e=>e?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,W5=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,e6="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";function t6(){return new RegExp(e6,"u")}const n6=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,a6=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,r6=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,i6=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,o6=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,R_=/^[A-Za-z0-9_-]*$/,s6=/^(?=.{1,253}\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\.?$/,l6=/^\+(?:[0-9]){6,14}[0-9]$/,O_="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",c6=new RegExp(`^${O_}$`);function N_(e){const t="(?:[01]\\d|2[0-3]):[0-5]\\d";return typeof e.precision=="number"?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function u6(e){return new RegExp(`^${N_(e)}$`)}function d6(e){const t=N_({precision:e.precision}),r=["Z"];e.local&&r.push(""),e.offset&&r.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");const i=`${t}(?:${r.join("|")})`;return new RegExp(`^${O_}T(?:${i})$`)}const f6=e=>{const t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${t}$`)},h6=/^-?\d+$/,m6=/^-?\d+(?:\.\d+)?/,p6=/^[^A-Z]*$/,g6=/^[^a-z]*$/,Xn=re("$ZodCheck",(e,t)=>{var r;e._zod??(e._zod={}),e._zod.def=t,(r=e._zod).onattach??(r.onattach=[])}),A_={number:"number",bigint:"bigint",object:"date"},T_=re("$ZodCheckLessThan",(e,t)=>{Xn.init(e,t);const r=A_[typeof t.value];e._zod.onattach.push(i=>{const s=i._zod.bag,u=(t.inclusive?s.maximum:s.exclusiveMaximum)??Number.POSITIVE_INFINITY;t.value{(t.inclusive?i.value<=t.value:i.value{Xn.init(e,t);const r=A_[typeof t.value];e._zod.onattach.push(i=>{const s=i._zod.bag,u=(t.inclusive?s.minimum:s.exclusiveMinimum)??Number.NEGATIVE_INFINITY;t.value>u&&(t.inclusive?s.minimum=t.value:s.exclusiveMinimum=t.value)}),e._zod.check=i=>{(t.inclusive?i.value>=t.value:i.value>t.value)||i.issues.push({origin:r,code:"too_small",minimum:t.value,input:i.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),y6=re("$ZodCheckMultipleOf",(e,t)=>{Xn.init(e,t),e._zod.onattach.push(r=>{var i;(i=r._zod.bag).multipleOf??(i.multipleOf=t.value)}),e._zod.check=r=>{if(typeof r.value!=typeof t.value)throw new Error("Cannot mix number and bigint in multiple_of check.");(typeof r.value=="bigint"?r.value%t.value===BigInt(0):x5(r.value,t.value)===0)||r.issues.push({origin:typeof r.value,code:"not_multiple_of",divisor:t.value,input:r.value,inst:e,continue:!t.abort})}}),v6=re("$ZodCheckNumberFormat",(e,t)=>{Xn.init(e,t),t.format=t.format||"float64";const r=t.format?.includes("int"),i=r?"int":"number",[s,u]=_5[t.format];e._zod.onattach.push(d=>{const h=d._zod.bag;h.format=t.format,h.minimum=s,h.maximum=u,r&&(h.pattern=h6)}),e._zod.check=d=>{const h=d.value;if(r){if(!Number.isInteger(h)){d.issues.push({expected:i,format:t.format,code:"invalid_type",continue:!1,input:h,inst:e});return}if(!Number.isSafeInteger(h)){h>0?d.issues.push({input:h,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:i,continue:!t.abort}):d.issues.push({input:h,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:i,continue:!t.abort});return}}hu&&d.issues.push({origin:"number",input:h,code:"too_big",maximum:u,inst:e})}}),x6=re("$ZodCheckMaxLength",(e,t)=>{var r;Xn.init(e,t),(r=e._zod.def).when??(r.when=i=>{const s=i.value;return!_g(s)&&s.length!==void 0}),e._zod.onattach.push(i=>{const s=i._zod.bag.maximum??Number.POSITIVE_INFINITY;t.maximum{const s=i.value;if(s.length<=t.maximum)return;const d=Cg(s);i.issues.push({origin:d,code:"too_big",maximum:t.maximum,inclusive:!0,input:s,inst:e,continue:!t.abort})}}),b6=re("$ZodCheckMinLength",(e,t)=>{var r;Xn.init(e,t),(r=e._zod.def).when??(r.when=i=>{const s=i.value;return!_g(s)&&s.length!==void 0}),e._zod.onattach.push(i=>{const s=i._zod.bag.minimum??Number.NEGATIVE_INFINITY;t.minimum>s&&(i._zod.bag.minimum=t.minimum)}),e._zod.check=i=>{const s=i.value;if(s.length>=t.minimum)return;const d=Cg(s);i.issues.push({origin:d,code:"too_small",minimum:t.minimum,inclusive:!0,input:s,inst:e,continue:!t.abort})}}),w6=re("$ZodCheckLengthEquals",(e,t)=>{var r;Xn.init(e,t),(r=e._zod.def).when??(r.when=i=>{const s=i.value;return!_g(s)&&s.length!==void 0}),e._zod.onattach.push(i=>{const s=i._zod.bag;s.minimum=t.length,s.maximum=t.length,s.length=t.length}),e._zod.check=i=>{const s=i.value,u=s.length;if(u===t.length)return;const d=Cg(s),h=u>t.length;i.issues.push({origin:d,...h?{code:"too_big",maximum:t.length}:{code:"too_small",minimum:t.length},inclusive:!0,exact:!0,input:i.value,inst:e,continue:!t.abort})}}),tf=re("$ZodCheckStringFormat",(e,t)=>{var r,i;Xn.init(e,t),e._zod.onattach.push(s=>{const u=s._zod.bag;u.format=t.format,t.pattern&&(u.patterns??(u.patterns=new Set),u.patterns.add(t.pattern))}),t.pattern?(r=e._zod).check??(r.check=s=>{t.pattern.lastIndex=0,!t.pattern.test(s.value)&&s.issues.push({origin:"string",code:"invalid_format",format:t.format,input:s.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(i=e._zod).check??(i.check=()=>{})}),S6=re("$ZodCheckRegex",(e,t)=>{tf.init(e,t),e._zod.check=r=>{t.pattern.lastIndex=0,!t.pattern.test(r.value)&&r.issues.push({origin:"string",code:"invalid_format",format:"regex",input:r.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),_6=re("$ZodCheckLowerCase",(e,t)=>{t.pattern??(t.pattern=p6),tf.init(e,t)}),E6=re("$ZodCheckUpperCase",(e,t)=>{t.pattern??(t.pattern=g6),tf.init(e,t)}),C6=re("$ZodCheckIncludes",(e,t)=>{Xn.init(e,t);const r=xs(t.includes),i=new RegExp(typeof t.position=="number"?`^.{${t.position}}${r}`:r);t.pattern=i,e._zod.onattach.push(s=>{const u=s._zod.bag;u.patterns??(u.patterns=new Set),u.patterns.add(i)}),e._zod.check=s=>{s.value.includes(t.includes,t.position)||s.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:t.includes,input:s.value,inst:e,continue:!t.abort})}}),j6=re("$ZodCheckStartsWith",(e,t)=>{Xn.init(e,t);const r=new RegExp(`^${xs(t.prefix)}.*`);t.pattern??(t.pattern=r),e._zod.onattach.push(i=>{const s=i._zod.bag;s.patterns??(s.patterns=new Set),s.patterns.add(r)}),e._zod.check=i=>{i.value.startsWith(t.prefix)||i.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:t.prefix,input:i.value,inst:e,continue:!t.abort})}}),R6=re("$ZodCheckEndsWith",(e,t)=>{Xn.init(e,t);const r=new RegExp(`.*${xs(t.suffix)}$`);t.pattern??(t.pattern=r),e._zod.onattach.push(i=>{const s=i._zod.bag;s.patterns??(s.patterns=new Set),s.patterns.add(r)}),e._zod.check=i=>{i.value.endsWith(t.suffix)||i.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:t.suffix,input:i.value,inst:e,continue:!t.abort})}}),O6=re("$ZodCheckOverwrite",(e,t)=>{Xn.init(e,t),e._zod.check=r=>{r.value=t.tx(r.value)}});class N6{constructor(t=[]){this.content=[],this.indent=0,this&&(this.args=t)}indented(t){this.indent+=1,t(this),this.indent-=1}write(t){if(typeof t=="function"){t(this,{execution:"sync"}),t(this,{execution:"async"});return}const i=t.split(` -`).filter(d=>d),s=Math.min(...i.map(d=>d.length-d.trimStart().length)),u=i.map(d=>d.slice(s)).map(d=>" ".repeat(this.indent*2)+d);for(const d of u)this.content.push(d)}compile(){const t=Function,r=this?.args,s=[...(this?.content??[""]).map(u=>` ${u}`)];return new t(...r,s.join(` -`))}}const A6={major:4,minor:1,patch:12},$t=re("$ZodType",(e,t)=>{var r;e??(e={}),e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=A6;const i=[...e._zod.def.checks??[]];e._zod.traits.has("$ZodCheck")&&i.unshift(e);for(const s of i)for(const u of s._zod.onattach)u(e);if(i.length===0)(r=e._zod).deferred??(r.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{const s=(d,h,g)=>{let y=us(d),x;for(const v of h){if(v._zod.def.when){if(!v._zod.def.when(d))continue}else if(y)continue;const w=d.issues.length,E=v._zod.check(d);if(E instanceof Promise&&g?.async===!1)throw new hs;if(x||E instanceof Promise)x=(x??Promise.resolve()).then(async()=>{await E,d.issues.length!==w&&(y||(y=us(d,w)))});else{if(d.issues.length===w)continue;y||(y=us(d,w))}}return x?x.then(()=>d):d},u=(d,h,g)=>{if(us(d))return d.aborted=!0,d;const y=s(h,i,g);if(y instanceof Promise){if(g.async===!1)throw new hs;return y.then(x=>e._zod.parse(x,g))}return e._zod.parse(y,g)};e._zod.run=(d,h)=>{if(h.skipChecks)return e._zod.parse(d,h);if(h.direction==="backward"){const y=e._zod.parse({value:d.value,issues:[]},{...h,skipChecks:!0});return y instanceof Promise?y.then(x=>u(x,d,h)):u(y,d,h)}const g=e._zod.parse(d,h);if(g instanceof Promise){if(h.async===!1)throw new hs;return g.then(y=>s(y,i,h))}return s(g,i,h)}}e["~standard"]={validate:s=>{try{const u=k5(e,s);return u.success?{value:u.data}:{issues:u.error?.issues}}catch{return P5(e,s).then(d=>d.success?{value:d.data}:{issues:d.error?.issues})}},vendor:"zod",version:1}}),Rg=re("$ZodString",(e,t)=>{$t.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??f6(e._zod.bag),e._zod.parse=(r,i)=>{if(t.coerce)try{r.value=String(r.value)}catch{}return typeof r.value=="string"||r.issues.push({expected:"string",code:"invalid_type",input:r.value,inst:e}),r}}),zt=re("$ZodStringFormat",(e,t)=>{tf.init(e,t),Rg.init(e,t)}),T6=re("$ZodGUID",(e,t)=>{t.pattern??(t.pattern=J5),zt.init(e,t)}),D6=re("$ZodUUID",(e,t)=>{if(t.version){const i={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(i===void 0)throw new Error(`Invalid UUID version: "${t.version}"`);t.pattern??(t.pattern=c0(i))}else t.pattern??(t.pattern=c0());zt.init(e,t)}),M6=re("$ZodEmail",(e,t)=>{t.pattern??(t.pattern=W5),zt.init(e,t)}),z6=re("$ZodURL",(e,t)=>{zt.init(e,t),e._zod.check=r=>{try{const i=r.value.trim(),s=new URL(i);t.hostname&&(t.hostname.lastIndex=0,t.hostname.test(s.hostname)||r.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:s6.source,input:r.value,inst:e,continue:!t.abort})),t.protocol&&(t.protocol.lastIndex=0,t.protocol.test(s.protocol.endsWith(":")?s.protocol.slice(0,-1):s.protocol)||r.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:t.protocol.source,input:r.value,inst:e,continue:!t.abort})),t.normalize?r.value=s.href:r.value=i;return}catch{r.issues.push({code:"invalid_format",format:"url",input:r.value,inst:e,continue:!t.abort})}}}),k6=re("$ZodEmoji",(e,t)=>{t.pattern??(t.pattern=t6()),zt.init(e,t)}),P6=re("$ZodNanoID",(e,t)=>{t.pattern??(t.pattern=Y5),zt.init(e,t)}),K6=re("$ZodCUID",(e,t)=>{t.pattern??(t.pattern=H5),zt.init(e,t)}),I6=re("$ZodCUID2",(e,t)=>{t.pattern??(t.pattern=B5),zt.init(e,t)}),L6=re("$ZodULID",(e,t)=>{t.pattern??(t.pattern=G5),zt.init(e,t)}),U6=re("$ZodXID",(e,t)=>{t.pattern??(t.pattern=X5),zt.init(e,t)}),q6=re("$ZodKSUID",(e,t)=>{t.pattern??(t.pattern=Z5),zt.init(e,t)}),F6=re("$ZodISODateTime",(e,t)=>{t.pattern??(t.pattern=d6(t)),zt.init(e,t)}),$6=re("$ZodISODate",(e,t)=>{t.pattern??(t.pattern=c6),zt.init(e,t)}),V6=re("$ZodISOTime",(e,t)=>{t.pattern??(t.pattern=u6(t)),zt.init(e,t)}),H6=re("$ZodISODuration",(e,t)=>{t.pattern??(t.pattern=Q5),zt.init(e,t)}),B6=re("$ZodIPv4",(e,t)=>{t.pattern??(t.pattern=n6),zt.init(e,t),e._zod.onattach.push(r=>{const i=r._zod.bag;i.format="ipv4"})}),G6=re("$ZodIPv6",(e,t)=>{t.pattern??(t.pattern=a6),zt.init(e,t),e._zod.onattach.push(r=>{const i=r._zod.bag;i.format="ipv6"}),e._zod.check=r=>{try{new URL(`http://[${r.value}]`)}catch{r.issues.push({code:"invalid_format",format:"ipv6",input:r.value,inst:e,continue:!t.abort})}}}),X6=re("$ZodCIDRv4",(e,t)=>{t.pattern??(t.pattern=r6),zt.init(e,t)}),Z6=re("$ZodCIDRv6",(e,t)=>{t.pattern??(t.pattern=i6),zt.init(e,t),e._zod.check=r=>{const i=r.value.split("/");try{if(i.length!==2)throw new Error;const[s,u]=i;if(!u)throw new Error;const d=Number(u);if(`${d}`!==u)throw new Error;if(d<0||d>128)throw new Error;new URL(`http://[${s}]`)}catch{r.issues.push({code:"invalid_format",format:"cidrv6",input:r.value,inst:e,continue:!t.abort})}}});function M_(e){if(e==="")return!0;if(e.length%4!==0)return!1;try{return atob(e),!0}catch{return!1}}const Y6=re("$ZodBase64",(e,t)=>{t.pattern??(t.pattern=o6),zt.init(e,t),e._zod.onattach.push(r=>{r._zod.bag.contentEncoding="base64"}),e._zod.check=r=>{M_(r.value)||r.issues.push({code:"invalid_format",format:"base64",input:r.value,inst:e,continue:!t.abort})}});function Q6(e){if(!R_.test(e))return!1;const t=e.replace(/[-_]/g,i=>i==="-"?"+":"/"),r=t.padEnd(Math.ceil(t.length/4)*4,"=");return M_(r)}const J6=re("$ZodBase64URL",(e,t)=>{t.pattern??(t.pattern=R_),zt.init(e,t),e._zod.onattach.push(r=>{r._zod.bag.contentEncoding="base64url"}),e._zod.check=r=>{Q6(r.value)||r.issues.push({code:"invalid_format",format:"base64url",input:r.value,inst:e,continue:!t.abort})}}),W6=re("$ZodE164",(e,t)=>{t.pattern??(t.pattern=l6),zt.init(e,t)});function eP(e,t=null){try{const r=e.split(".");if(r.length!==3)return!1;const[i]=r;if(!i)return!1;const s=JSON.parse(atob(i));return!("typ"in s&&s?.typ!=="JWT"||!s.alg||t&&(!("alg"in s)||s.alg!==t))}catch{return!1}}const tP=re("$ZodJWT",(e,t)=>{zt.init(e,t),e._zod.check=r=>{eP(r.value,t.alg)||r.issues.push({code:"invalid_format",format:"jwt",input:r.value,inst:e,continue:!t.abort})}}),z_=re("$ZodNumber",(e,t)=>{$t.init(e,t),e._zod.pattern=e._zod.bag.pattern??m6,e._zod.parse=(r,i)=>{if(t.coerce)try{r.value=Number(r.value)}catch{}const s=r.value;if(typeof s=="number"&&!Number.isNaN(s)&&Number.isFinite(s))return r;const u=typeof s=="number"?Number.isNaN(s)?"NaN":Number.isFinite(s)?void 0:"Infinity":void 0;return r.issues.push({expected:"number",code:"invalid_type",input:s,inst:e,...u?{received:u}:{}}),r}}),nP=re("$ZodNumber",(e,t)=>{v6.init(e,t),z_.init(e,t)}),aP=re("$ZodUnknown",(e,t)=>{$t.init(e,t),e._zod.parse=r=>r}),rP=re("$ZodNever",(e,t)=>{$t.init(e,t),e._zod.parse=(r,i)=>(r.issues.push({expected:"never",code:"invalid_type",input:r.value,inst:e}),r)});function u0(e,t,r){e.issues.length&&t.issues.push(...C_(r,e.issues)),t.value[r]=e.value}const iP=re("$ZodArray",(e,t)=>{$t.init(e,t),e._zod.parse=(r,i)=>{const s=r.value;if(!Array.isArray(s))return r.issues.push({expected:"array",code:"invalid_type",input:s,inst:e}),r;r.value=Array(s.length);const u=[];for(let d=0;du0(y,r,d))):u0(g,r,d)}return u.length?Promise.all(u).then(()=>r):r}});function xd(e,t,r,i){e.issues.length&&t.issues.push(...C_(r,e.issues)),e.value===void 0?r in i&&(t.value[r]=void 0):t.value[r]=e.value}function k_(e){const t=Object.keys(e.shape);for(const i of t)if(!e.shape?.[i]?._zod?.traits?.has("$ZodType"))throw new Error(`Invalid element at key "${i}": expected a Zod schema`);const r=S5(e.shape);return{...e,keys:t,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(r)}}function P_(e,t,r,i,s,u){const d=[],h=s.keySet,g=s.catchall._zod,y=g.def.type;for(const x of Object.keys(t)){if(h.has(x))continue;if(y==="never"){d.push(x);continue}const v=g.run({value:t[x],issues:[]},i);v instanceof Promise?e.push(v.then(w=>xd(w,r,x,t))):xd(v,r,x,t)}return d.length&&r.issues.push({code:"unrecognized_keys",keys:d,input:t,inst:u}),e.length?Promise.all(e).then(()=>r):r}const oP=re("$ZodObject",(e,t)=>{if($t.init(e,t),!Object.getOwnPropertyDescriptor(t,"shape")?.get){const h=t.shape;Object.defineProperty(t,"shape",{get:()=>{const g={...h};return Object.defineProperty(t,"shape",{value:g}),g}})}const i=Sg(()=>k_(t));Ot(e._zod,"propValues",()=>{const h=t.shape,g={};for(const y in h){const x=h[y]._zod;if(x.values){g[y]??(g[y]=new Set);for(const v of x.values)g[y].add(v)}}return g});const s=vd,u=t.catchall;let d;e._zod.parse=(h,g)=>{d??(d=i.value);const y=h.value;if(!s(y))return h.issues.push({expected:"object",code:"invalid_type",input:y,inst:e}),h;h.value={};const x=[],v=d.shape;for(const w of d.keys){const j=v[w]._zod.run({value:y[w],issues:[]},g);j instanceof Promise?x.push(j.then(S=>xd(S,h,w,y))):xd(j,h,w,y)}return u?P_(x,y,h,g,i.value,e):x.length?Promise.all(x).then(()=>h):h}}),sP=re("$ZodObjectJIT",(e,t)=>{oP.init(e,t);const r=e._zod.parse,i=Sg(()=>k_(t)),s=w=>{const E=new N6(["shape","payload","ctx"]),j=i.value,S=O=>{const C=l0(O);return`shape[${C}]._zod.run({ value: input[${C}], issues: [] }, ctx)`};E.write("const input = payload.value;");const N=Object.create(null);let D=0;for(const O of j.keys)N[O]=`key_${D++}`;E.write("const newResult = {};");for(const O of j.keys){const C=N[O],T=l0(O);E.write(`const ${C} = ${S(O)};`),E.write(` - if (${C}.issues.length) { - payload.issues = payload.issues.concat(${C}.issues.map(iss => ({ - ...iss, - path: iss.path ? [${T}, ...iss.path] : [${T}] - }))); - } - - - if (${C}.value === undefined) { - if (${T} in input) { - newResult[${T}] = undefined; - } - } else { - newResult[${T}] = ${C}.value; - } - - `)}E.write("payload.value = newResult;"),E.write("return payload;");const A=E.compile();return(O,C)=>A(w,O,C)};let u;const d=vd,h=!S_.jitless,y=h&&b5.value,x=t.catchall;let v;e._zod.parse=(w,E)=>{v??(v=i.value);const j=w.value;return d(j)?h&&y&&E?.async===!1&&E.jitless!==!0?(u||(u=s(t.shape)),w=u(w,E),x?P_([],j,w,E,v,e):w):r(w,E):(w.issues.push({expected:"object",code:"invalid_type",input:j,inst:e}),w)}});function d0(e,t,r,i){for(const u of e)if(u.issues.length===0)return t.value=u.value,t;const s=e.filter(u=>!us(u));return s.length===1?(t.value=s[0].value,s[0]):(t.issues.push({code:"invalid_union",input:t.value,inst:r,errors:e.map(u=>u.issues.map(d=>to(d,i,eo())))}),t)}const lP=re("$ZodUnion",(e,t)=>{$t.init(e,t),Ot(e._zod,"optin",()=>t.options.some(s=>s._zod.optin==="optional")?"optional":void 0),Ot(e._zod,"optout",()=>t.options.some(s=>s._zod.optout==="optional")?"optional":void 0),Ot(e._zod,"values",()=>{if(t.options.every(s=>s._zod.values))return new Set(t.options.flatMap(s=>Array.from(s._zod.values)))}),Ot(e._zod,"pattern",()=>{if(t.options.every(s=>s._zod.pattern)){const s=t.options.map(u=>u._zod.pattern);return new RegExp(`^(${s.map(u=>Eg(u.source)).join("|")})$`)}});const r=t.options.length===1,i=t.options[0]._zod.run;e._zod.parse=(s,u)=>{if(r)return i(s,u);let d=!1;const h=[];for(const g of t.options){const y=g._zod.run({value:s.value,issues:[]},u);if(y instanceof Promise)h.push(y),d=!0;else{if(y.issues.length===0)return y;h.push(y)}}return d?Promise.all(h).then(g=>d0(g,s,e,u)):d0(h,s,e,u)}}),cP=re("$ZodIntersection",(e,t)=>{$t.init(e,t),e._zod.parse=(r,i)=>{const s=r.value,u=t.left._zod.run({value:s,issues:[]},i),d=t.right._zod.run({value:s,issues:[]},i);return u instanceof Promise||d instanceof Promise?Promise.all([u,d]).then(([g,y])=>f0(r,g,y)):f0(r,u,d)}});function Ep(e,t){if(e===t)return{valid:!0,data:e};if(e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(Zl(e)&&Zl(t)){const r=Object.keys(t),i=Object.keys(e).filter(u=>r.indexOf(u)!==-1),s={...e,...t};for(const u of i){const d=Ep(e[u],t[u]);if(!d.valid)return{valid:!1,mergeErrorPath:[u,...d.mergeErrorPath]};s[u]=d.data}return{valid:!0,data:s}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};const r=[];for(let i=0;i{$t.init(e,t);const r=v5(t.entries),i=new Set(r);e._zod.values=i,e._zod.pattern=new RegExp(`^(${r.filter(s=>w5.has(typeof s)).map(s=>typeof s=="string"?xs(s):s.toString()).join("|")})$`),e._zod.parse=(s,u)=>{const d=s.value;return i.has(d)||s.issues.push({code:"invalid_value",values:r,input:d,inst:e}),s}}),dP=re("$ZodLiteral",(e,t)=>{if($t.init(e,t),t.values.length===0)throw new Error("Cannot create literal schema with no valid values");e._zod.values=new Set(t.values),e._zod.pattern=new RegExp(`^(${t.values.map(r=>typeof r=="string"?xs(r):r?xs(r.toString()):String(r)).join("|")})$`),e._zod.parse=(r,i)=>{const s=r.value;return e._zod.values.has(s)||r.issues.push({code:"invalid_value",values:t.values,input:s,inst:e}),r}}),fP=re("$ZodTransform",(e,t)=>{$t.init(e,t),e._zod.parse=(r,i)=>{if(i.direction==="backward")throw new w_(e.constructor.name);const s=t.transform(r.value,r);if(i.async)return(s instanceof Promise?s:Promise.resolve(s)).then(d=>(r.value=d,r));if(s instanceof Promise)throw new hs;return r.value=s,r}});function h0(e,t){return e.issues.length&&t===void 0?{issues:[],value:void 0}:e}const hP=re("$ZodOptional",(e,t)=>{$t.init(e,t),e._zod.optin="optional",e._zod.optout="optional",Ot(e._zod,"values",()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),Ot(e._zod,"pattern",()=>{const r=t.innerType._zod.pattern;return r?new RegExp(`^(${Eg(r.source)})?$`):void 0}),e._zod.parse=(r,i)=>{if(t.innerType._zod.optin==="optional"){const s=t.innerType._zod.run(r,i);return s instanceof Promise?s.then(u=>h0(u,r.value)):h0(s,r.value)}return r.value===void 0?r:t.innerType._zod.run(r,i)}}),mP=re("$ZodNullable",(e,t)=>{$t.init(e,t),Ot(e._zod,"optin",()=>t.innerType._zod.optin),Ot(e._zod,"optout",()=>t.innerType._zod.optout),Ot(e._zod,"pattern",()=>{const r=t.innerType._zod.pattern;return r?new RegExp(`^(${Eg(r.source)}|null)$`):void 0}),Ot(e._zod,"values",()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0),e._zod.parse=(r,i)=>r.value===null?r:t.innerType._zod.run(r,i)}),pP=re("$ZodDefault",(e,t)=>{$t.init(e,t),e._zod.optin="optional",Ot(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(r,i)=>{if(i.direction==="backward")return t.innerType._zod.run(r,i);if(r.value===void 0)return r.value=t.defaultValue,r;const s=t.innerType._zod.run(r,i);return s instanceof Promise?s.then(u=>m0(u,t)):m0(s,t)}});function m0(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}const gP=re("$ZodPrefault",(e,t)=>{$t.init(e,t),e._zod.optin="optional",Ot(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(r,i)=>(i.direction==="backward"||r.value===void 0&&(r.value=t.defaultValue),t.innerType._zod.run(r,i))}),yP=re("$ZodNonOptional",(e,t)=>{$t.init(e,t),Ot(e._zod,"values",()=>{const r=t.innerType._zod.values;return r?new Set([...r].filter(i=>i!==void 0)):void 0}),e._zod.parse=(r,i)=>{const s=t.innerType._zod.run(r,i);return s instanceof Promise?s.then(u=>p0(u,e)):p0(s,e)}});function p0(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:"invalid_type",expected:"nonoptional",input:e.value,inst:t}),e}const vP=re("$ZodCatch",(e,t)=>{$t.init(e,t),Ot(e._zod,"optin",()=>t.innerType._zod.optin),Ot(e._zod,"optout",()=>t.innerType._zod.optout),Ot(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(r,i)=>{if(i.direction==="backward")return t.innerType._zod.run(r,i);const s=t.innerType._zod.run(r,i);return s instanceof Promise?s.then(u=>(r.value=u.value,u.issues.length&&(r.value=t.catchValue({...r,error:{issues:u.issues.map(d=>to(d,i,eo()))},input:r.value}),r.issues=[]),r)):(r.value=s.value,s.issues.length&&(r.value=t.catchValue({...r,error:{issues:s.issues.map(u=>to(u,i,eo()))},input:r.value}),r.issues=[]),r)}}),xP=re("$ZodPipe",(e,t)=>{$t.init(e,t),Ot(e._zod,"values",()=>t.in._zod.values),Ot(e._zod,"optin",()=>t.in._zod.optin),Ot(e._zod,"optout",()=>t.out._zod.optout),Ot(e._zod,"propValues",()=>t.in._zod.propValues),e._zod.parse=(r,i)=>{if(i.direction==="backward"){const u=t.out._zod.run(r,i);return u instanceof Promise?u.then(d=>Gu(d,t.in,i)):Gu(u,t.in,i)}const s=t.in._zod.run(r,i);return s instanceof Promise?s.then(u=>Gu(u,t.out,i)):Gu(s,t.out,i)}});function Gu(e,t,r){return e.issues.length?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues},r)}const bP=re("$ZodReadonly",(e,t)=>{$t.init(e,t),Ot(e._zod,"propValues",()=>t.innerType._zod.propValues),Ot(e._zod,"values",()=>t.innerType._zod.values),Ot(e._zod,"optin",()=>t.innerType._zod.optin),Ot(e._zod,"optout",()=>t.innerType._zod.optout),e._zod.parse=(r,i)=>{if(i.direction==="backward")return t.innerType._zod.run(r,i);const s=t.innerType._zod.run(r,i);return s instanceof Promise?s.then(g0):g0(s)}});function g0(e){return e.value=Object.freeze(e.value),e}const wP=re("$ZodCustom",(e,t)=>{Xn.init(e,t),$t.init(e,t),e._zod.parse=(r,i)=>r,e._zod.check=r=>{const i=r.value,s=t.fn(i);if(s instanceof Promise)return s.then(u=>y0(u,r,i,e));y0(s,r,i,e)}});function y0(e,t,r,i){if(!e){const s={code:"custom",input:r,inst:i,path:[...i._zod.def.path??[]],continue:!i._zod.def.abort};i._zod.def.params&&(s.params=i._zod.def.params),t.issues.push(Yl(s))}}class SP{constructor(){this._map=new WeakMap,this._idmap=new Map}add(t,...r){const i=r[0];if(this._map.set(t,i),i&&typeof i=="object"&&"id"in i){if(this._idmap.has(i.id))throw new Error(`ID ${i.id} already exists in the registry`);this._idmap.set(i.id,t)}return this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(t){const r=this._map.get(t);return r&&typeof r=="object"&&"id"in r&&this._idmap.delete(r.id),this._map.delete(t),this}get(t){const r=t._zod.parent;if(r){const i={...this.get(r)??{}};delete i.id;const s={...i,...this._map.get(t)};return Object.keys(s).length?s:void 0}return this._map.get(t)}has(t){return this._map.has(t)}}function _P(){return new SP}const Xu=_P();function EP(e,t){return new e({type:"string",...Ie(t)})}function CP(e,t){return new e({type:"string",format:"email",check:"string_format",abort:!1,...Ie(t)})}function v0(e,t){return new e({type:"string",format:"guid",check:"string_format",abort:!1,...Ie(t)})}function K_(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,...Ie(t)})}function jP(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...Ie(t)})}function RP(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...Ie(t)})}function OP(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...Ie(t)})}function NP(e,t){return new e({type:"string",format:"url",check:"string_format",abort:!1,...Ie(t)})}function AP(e,t){return new e({type:"string",format:"emoji",check:"string_format",abort:!1,...Ie(t)})}function TP(e,t){return new e({type:"string",format:"nanoid",check:"string_format",abort:!1,...Ie(t)})}function DP(e,t){return new e({type:"string",format:"cuid",check:"string_format",abort:!1,...Ie(t)})}function MP(e,t){return new e({type:"string",format:"cuid2",check:"string_format",abort:!1,...Ie(t)})}function zP(e,t){return new e({type:"string",format:"ulid",check:"string_format",abort:!1,...Ie(t)})}function kP(e,t){return new e({type:"string",format:"xid",check:"string_format",abort:!1,...Ie(t)})}function PP(e,t){return new e({type:"string",format:"ksuid",check:"string_format",abort:!1,...Ie(t)})}function KP(e,t){return new e({type:"string",format:"ipv4",check:"string_format",abort:!1,...Ie(t)})}function IP(e,t){return new e({type:"string",format:"ipv6",check:"string_format",abort:!1,...Ie(t)})}function LP(e,t){return new e({type:"string",format:"cidrv4",check:"string_format",abort:!1,...Ie(t)})}function UP(e,t){return new e({type:"string",format:"cidrv6",check:"string_format",abort:!1,...Ie(t)})}function qP(e,t){return new e({type:"string",format:"base64",check:"string_format",abort:!1,...Ie(t)})}function FP(e,t){return new e({type:"string",format:"base64url",check:"string_format",abort:!1,...Ie(t)})}function $P(e,t){return new e({type:"string",format:"e164",check:"string_format",abort:!1,...Ie(t)})}function VP(e,t){return new e({type:"string",format:"jwt",check:"string_format",abort:!1,...Ie(t)})}function HP(e,t){return new e({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...Ie(t)})}function BP(e,t){return new e({type:"string",format:"date",check:"string_format",...Ie(t)})}function GP(e,t){return new e({type:"string",format:"time",check:"string_format",precision:null,...Ie(t)})}function XP(e,t){return new e({type:"string",format:"duration",check:"string_format",...Ie(t)})}function ZP(e,t){return new e({type:"number",checks:[],...Ie(t)})}function YP(e,t){return new e({type:"number",check:"number_format",abort:!1,format:"safeint",...Ie(t)})}function QP(e){return new e({type:"unknown"})}function JP(e,t){return new e({type:"never",...Ie(t)})}function x0(e,t){return new T_({check:"less_than",...Ie(t),value:e,inclusive:!1})}function Hm(e,t){return new T_({check:"less_than",...Ie(t),value:e,inclusive:!0})}function b0(e,t){return new D_({check:"greater_than",...Ie(t),value:e,inclusive:!1})}function Bm(e,t){return new D_({check:"greater_than",...Ie(t),value:e,inclusive:!0})}function w0(e,t){return new y6({check:"multiple_of",...Ie(t),value:e})}function I_(e,t){return new x6({check:"max_length",...Ie(t),maximum:e})}function bd(e,t){return new b6({check:"min_length",...Ie(t),minimum:e})}function L_(e,t){return new w6({check:"length_equals",...Ie(t),length:e})}function WP(e,t){return new S6({check:"string_format",format:"regex",...Ie(t),pattern:e})}function e8(e){return new _6({check:"string_format",format:"lowercase",...Ie(e)})}function t8(e){return new E6({check:"string_format",format:"uppercase",...Ie(e)})}function n8(e,t){return new C6({check:"string_format",format:"includes",...Ie(t),includes:e})}function a8(e,t){return new j6({check:"string_format",format:"starts_with",...Ie(t),prefix:e})}function r8(e,t){return new R6({check:"string_format",format:"ends_with",...Ie(t),suffix:e})}function cc(e){return new O6({check:"overwrite",tx:e})}function i8(e){return cc(t=>t.normalize(e))}function o8(){return cc(e=>e.trim())}function s8(){return cc(e=>e.toLowerCase())}function l8(){return cc(e=>e.toUpperCase())}function c8(e,t,r){return new e({type:"array",element:t,...Ie(r)})}function u8(e,t,r){return new e({type:"custom",check:"custom",fn:t,...Ie(r)})}function d8(e){const t=f8(r=>(r.addIssue=i=>{if(typeof i=="string")r.issues.push(Yl(i,r.value,t._zod.def));else{const s=i;s.fatal&&(s.continue=!1),s.code??(s.code="custom"),s.input??(s.input=r.value),s.inst??(s.inst=t),s.continue??(s.continue=!t._zod.def.abort),r.issues.push(Yl(s))}},e(r.value,r)));return t}function f8(e,t){const r=new Xn({check:"custom",...Ie(t)});return r._zod.check=e,r}function S0(e,t){try{var r=e()}catch(i){return t(i)}return r&&r.then?r.then(void 0,t):r}function h8(e,t){for(var r={};e.length;){var i=e[0],s=i.code,u=i.message,d=i.path.join(".");if(!r[d])if("unionErrors"in i){var h=i.unionErrors[0].errors[0];r[d]={message:h.message,type:h.code}}else r[d]={message:u,type:s};if("unionErrors"in i&&i.unionErrors.forEach(function(x){return x.errors.forEach(function(v){return e.push(v)})}),t){var g=r[d].types,y=g&&g[i.code];r[d]=xg(d,t,r,s,y?[].concat(y,i.message):i.message)}e.shift()}return r}function m8(e,t){for(var r={};e.length;){var i=e[0],s=i.code,u=i.message,d=i.path.join(".");if(!r[d])if(i.code==="invalid_union"&&i.errors.length>0){var h=i.errors[0][0];r[d]={message:h.message,type:h.code}}else r[d]={message:u,type:s};if(i.code==="invalid_union"&&i.errors.forEach(function(x){return x.forEach(function(v){return e.push(v)})}),t){var g=r[d].types,y=g&&g[i.code];r[d]=xg(d,t,r,s,y?[].concat(y,i.message):i.message)}e.shift()}return r}function En(e,t,r){if(r===void 0&&(r={}),(function(i){return"_def"in i&&typeof i._def=="object"&&"typeName"in i._def})(e))return function(i,s,u){try{return Promise.resolve(S0(function(){return Promise.resolve(e[r.mode==="sync"?"parse":"parseAsync"](i,t)).then(function(d){return u.shouldUseNativeValidation&&Sp({},u),{errors:{},values:r.raw?Object.assign({},i):d}})},function(d){if((function(h){return Array.isArray(h?.issues)})(d))return{values:{},errors:i0(h8(d.errors,!u.shouldUseNativeValidation&&u.criteriaMode==="all"),u)};throw d}))}catch(d){return Promise.reject(d)}};if((function(i){return"_zod"in i&&typeof i._zod=="object"})(e))return function(i,s,u){try{return Promise.resolve(S0(function(){return Promise.resolve((r.mode==="sync"?M5:z5)(e,i,t)).then(function(d){return u.shouldUseNativeValidation&&Sp({},u),{errors:{},values:r.raw?Object.assign({},i):d}})},function(d){if((function(h){return h instanceof jg})(d))return{values:{},errors:i0(m8(d.issues,!u.shouldUseNativeValidation&&u.criteriaMode==="all"),u)};throw d}))}catch(d){return Promise.reject(d)}};throw new Error("Invalid input: not a Zod schema")}const p8=re("ZodISODateTime",(e,t)=>{F6.init(e,t),Pt.init(e,t)});function g8(e){return HP(p8,e)}const y8=re("ZodISODate",(e,t)=>{$6.init(e,t),Pt.init(e,t)});function v8(e){return BP(y8,e)}const x8=re("ZodISOTime",(e,t)=>{V6.init(e,t),Pt.init(e,t)});function b8(e){return GP(x8,e)}const w8=re("ZodISODuration",(e,t)=>{H6.init(e,t),Pt.init(e,t)});function S8(e){return XP(w8,e)}const _8=(e,t)=>{jg.init(e,t),e.name="ZodError",Object.defineProperties(e,{format:{value:r=>D5(e,r)},flatten:{value:r=>T5(e,r)},addIssue:{value:r=>{e.issues.push(r),e.message=JSON.stringify(e.issues,_p,2)}},addIssues:{value:r=>{e.issues.push(...r),e.message=JSON.stringify(e.issues,_p,2)}},isEmpty:{get(){return e.issues.length===0}}})},Ra=re("ZodError",_8,{Parent:Error}),E8=Qd(Ra),C8=Jd(Ra),j8=Wd(Ra),R8=ef(Ra),O8=K5(Ra),N8=I5(Ra),A8=L5(Ra),T8=U5(Ra),D8=q5(Ra),M8=F5(Ra),z8=$5(Ra),k8=V5(Ra),Qt=re("ZodType",(e,t)=>($t.init(e,t),e.def=t,e.type=t.type,Object.defineProperty(e,"_def",{value:t}),e.check=(...r)=>e.clone(oo(t,{checks:[...t.checks??[],...r.map(i=>typeof i=="function"?{_zod:{check:i,def:{check:"custom"},onattach:[]}}:i)]})),e.clone=(r,i)=>wi(e,r,i),e.brand=()=>e,e.register=((r,i)=>(r.add(e,i),e)),e.parse=(r,i)=>E8(e,r,i,{callee:e.parse}),e.safeParse=(r,i)=>j8(e,r,i),e.parseAsync=async(r,i)=>C8(e,r,i,{callee:e.parseAsync}),e.safeParseAsync=async(r,i)=>R8(e,r,i),e.spa=e.safeParseAsync,e.encode=(r,i)=>O8(e,r,i),e.decode=(r,i)=>N8(e,r,i),e.encodeAsync=async(r,i)=>A8(e,r,i),e.decodeAsync=async(r,i)=>T8(e,r,i),e.safeEncode=(r,i)=>D8(e,r,i),e.safeDecode=(r,i)=>M8(e,r,i),e.safeEncodeAsync=async(r,i)=>z8(e,r,i),e.safeDecodeAsync=async(r,i)=>k8(e,r,i),e.refine=(r,i)=>e.check(jK(r,i)),e.superRefine=r=>e.check(RK(r)),e.overwrite=r=>e.check(cc(r)),e.optional=()=>j0(e),e.nullable=()=>R0(e),e.nullish=()=>j0(R0(e)),e.nonoptional=r=>xK(e,r),e.array=()=>iK(e),e.or=r=>lK([e,r]),e.and=r=>uK(e,r),e.transform=r=>O0(e,hK(r)),e.default=r=>gK(e,r),e.prefault=r=>vK(e,r),e.catch=r=>wK(e,r),e.pipe=r=>O0(e,r),e.readonly=()=>EK(e),e.describe=r=>{const i=e.clone();return Xu.add(i,{description:r}),i},Object.defineProperty(e,"description",{get(){return Xu.get(e)?.description},configurable:!0}),e.meta=(...r)=>{if(r.length===0)return Xu.get(e);const i=e.clone();return Xu.add(i,r[0]),i},e.isOptional=()=>e.safeParse(void 0).success,e.isNullable=()=>e.safeParse(null).success,e)),U_=re("_ZodString",(e,t)=>{Rg.init(e,t),Qt.init(e,t);const r=e._zod.bag;e.format=r.format??null,e.minLength=r.minimum??null,e.maxLength=r.maximum??null,e.regex=(...i)=>e.check(WP(...i)),e.includes=(...i)=>e.check(n8(...i)),e.startsWith=(...i)=>e.check(a8(...i)),e.endsWith=(...i)=>e.check(r8(...i)),e.min=(...i)=>e.check(bd(...i)),e.max=(...i)=>e.check(I_(...i)),e.length=(...i)=>e.check(L_(...i)),e.nonempty=(...i)=>e.check(bd(1,...i)),e.lowercase=i=>e.check(e8(i)),e.uppercase=i=>e.check(t8(i)),e.trim=()=>e.check(o8()),e.normalize=(...i)=>e.check(i8(...i)),e.toLowerCase=()=>e.check(s8()),e.toUpperCase=()=>e.check(l8())}),P8=re("ZodString",(e,t)=>{Rg.init(e,t),U_.init(e,t),e.email=r=>e.check(CP(K8,r)),e.url=r=>e.check(NP(I8,r)),e.jwt=r=>e.check(VP(W8,r)),e.emoji=r=>e.check(AP(L8,r)),e.guid=r=>e.check(v0(_0,r)),e.uuid=r=>e.check(K_(Kl,r)),e.uuidv4=r=>e.check(jP(Kl,r)),e.uuidv6=r=>e.check(RP(Kl,r)),e.uuidv7=r=>e.check(OP(Kl,r)),e.nanoid=r=>e.check(TP(U8,r)),e.guid=r=>e.check(v0(_0,r)),e.cuid=r=>e.check(DP(q8,r)),e.cuid2=r=>e.check(MP(F8,r)),e.ulid=r=>e.check(zP($8,r)),e.base64=r=>e.check(qP(Y8,r)),e.base64url=r=>e.check(FP(Q8,r)),e.xid=r=>e.check(kP(V8,r)),e.ksuid=r=>e.check(PP(H8,r)),e.ipv4=r=>e.check(KP(B8,r)),e.ipv6=r=>e.check(IP(G8,r)),e.cidrv4=r=>e.check(LP(X8,r)),e.cidrv6=r=>e.check(UP(Z8,r)),e.e164=r=>e.check($P(J8,r)),e.datetime=r=>e.check(g8(r)),e.date=r=>e.check(v8(r)),e.time=r=>e.check(b8(r)),e.duration=r=>e.check(S8(r))});function Zt(e){return EP(P8,e)}const Pt=re("ZodStringFormat",(e,t)=>{zt.init(e,t),U_.init(e,t)}),K8=re("ZodEmail",(e,t)=>{M6.init(e,t),Pt.init(e,t)}),_0=re("ZodGUID",(e,t)=>{T6.init(e,t),Pt.init(e,t)}),Kl=re("ZodUUID",(e,t)=>{D6.init(e,t),Pt.init(e,t)});function q_(e){return K_(Kl,e)}const I8=re("ZodURL",(e,t)=>{z6.init(e,t),Pt.init(e,t)}),L8=re("ZodEmoji",(e,t)=>{k6.init(e,t),Pt.init(e,t)}),U8=re("ZodNanoID",(e,t)=>{P6.init(e,t),Pt.init(e,t)}),q8=re("ZodCUID",(e,t)=>{K6.init(e,t),Pt.init(e,t)}),F8=re("ZodCUID2",(e,t)=>{I6.init(e,t),Pt.init(e,t)}),$8=re("ZodULID",(e,t)=>{L6.init(e,t),Pt.init(e,t)}),V8=re("ZodXID",(e,t)=>{U6.init(e,t),Pt.init(e,t)}),H8=re("ZodKSUID",(e,t)=>{q6.init(e,t),Pt.init(e,t)}),B8=re("ZodIPv4",(e,t)=>{B6.init(e,t),Pt.init(e,t)}),G8=re("ZodIPv6",(e,t)=>{G6.init(e,t),Pt.init(e,t)}),X8=re("ZodCIDRv4",(e,t)=>{X6.init(e,t),Pt.init(e,t)}),Z8=re("ZodCIDRv6",(e,t)=>{Z6.init(e,t),Pt.init(e,t)}),Y8=re("ZodBase64",(e,t)=>{Y6.init(e,t),Pt.init(e,t)}),Q8=re("ZodBase64URL",(e,t)=>{J6.init(e,t),Pt.init(e,t)}),J8=re("ZodE164",(e,t)=>{W6.init(e,t),Pt.init(e,t)}),W8=re("ZodJWT",(e,t)=>{tP.init(e,t),Pt.init(e,t)}),F_=re("ZodNumber",(e,t)=>{z_.init(e,t),Qt.init(e,t),e.gt=(i,s)=>e.check(b0(i,s)),e.gte=(i,s)=>e.check(Bm(i,s)),e.min=(i,s)=>e.check(Bm(i,s)),e.lt=(i,s)=>e.check(x0(i,s)),e.lte=(i,s)=>e.check(Hm(i,s)),e.max=(i,s)=>e.check(Hm(i,s)),e.int=i=>e.check(E0(i)),e.safe=i=>e.check(E0(i)),e.positive=i=>e.check(b0(0,i)),e.nonnegative=i=>e.check(Bm(0,i)),e.negative=i=>e.check(x0(0,i)),e.nonpositive=i=>e.check(Hm(0,i)),e.multipleOf=(i,s)=>e.check(w0(i,s)),e.step=(i,s)=>e.check(w0(i,s)),e.finite=()=>e;const r=e._zod.bag;e.minValue=Math.max(r.minimum??Number.NEGATIVE_INFINITY,r.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,e.maxValue=Math.min(r.maximum??Number.POSITIVE_INFINITY,r.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,e.isInt=(r.format??"").includes("int")||Number.isSafeInteger(r.multipleOf??.5),e.isFinite=!0,e.format=r.format??null});function $_(e){return ZP(F_,e)}const eK=re("ZodNumberFormat",(e,t)=>{nP.init(e,t),F_.init(e,t)});function E0(e){return YP(eK,e)}const tK=re("ZodUnknown",(e,t)=>{aP.init(e,t),Qt.init(e,t)});function C0(){return QP(tK)}const nK=re("ZodNever",(e,t)=>{rP.init(e,t),Qt.init(e,t)});function aK(e){return JP(nK,e)}const rK=re("ZodArray",(e,t)=>{iP.init(e,t),Qt.init(e,t),e.element=t.element,e.min=(r,i)=>e.check(bd(r,i)),e.nonempty=r=>e.check(bd(1,r)),e.max=(r,i)=>e.check(I_(r,i)),e.length=(r,i)=>e.check(L_(r,i)),e.unwrap=()=>e.element});function iK(e,t){return c8(rK,e,t)}const oK=re("ZodObject",(e,t)=>{sP.init(e,t),Qt.init(e,t),Ot(e,"shape",()=>t.shape),e.keyof=()=>gi(Object.keys(e._zod.def.shape)),e.catchall=r=>e.clone({...e._zod.def,catchall:r}),e.passthrough=()=>e.clone({...e._zod.def,catchall:C0()}),e.loose=()=>e.clone({...e._zod.def,catchall:C0()}),e.strict=()=>e.clone({...e._zod.def,catchall:aK()}),e.strip=()=>e.clone({...e._zod.def,catchall:void 0}),e.extend=r=>j5(e,r),e.safeExtend=r=>R5(e,r),e.merge=r=>O5(e,r),e.pick=r=>E5(e,r),e.omit=r=>C5(e,r),e.partial=(...r)=>N5(H_,e,r[0]),e.required=(...r)=>A5(B_,e,r[0])});function Oa(e,t){const r={type:"object",shape:e??{},...Ie(t)};return new oK(r)}const sK=re("ZodUnion",(e,t)=>{lP.init(e,t),Qt.init(e,t),e.options=t.options});function lK(e,t){return new sK({type:"union",options:e,...Ie(t)})}const cK=re("ZodIntersection",(e,t)=>{cP.init(e,t),Qt.init(e,t)});function uK(e,t){return new cK({type:"intersection",left:e,right:t})}const Cp=re("ZodEnum",(e,t)=>{uP.init(e,t),Qt.init(e,t),e.enum=t.entries,e.options=Object.values(t.entries);const r=new Set(Object.keys(t.entries));e.extract=(i,s)=>{const u={};for(const d of i)if(r.has(d))u[d]=t.entries[d];else throw new Error(`Key ${d} not found in enum`);return new Cp({...t,checks:[],...Ie(s),entries:u})},e.exclude=(i,s)=>{const u={...t.entries};for(const d of i)if(r.has(d))delete u[d];else throw new Error(`Key ${d} not found in enum`);return new Cp({...t,checks:[],...Ie(s),entries:u})}});function gi(e,t){const r=Array.isArray(e)?Object.fromEntries(e.map(i=>[i,i])):e;return new Cp({type:"enum",entries:r,...Ie(t)})}const dK=re("ZodLiteral",(e,t)=>{dP.init(e,t),Qt.init(e,t),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function V_(e,t){return new dK({type:"literal",values:Array.isArray(e)?e:[e],...Ie(t)})}const fK=re("ZodTransform",(e,t)=>{fP.init(e,t),Qt.init(e,t),e._zod.parse=(r,i)=>{if(i.direction==="backward")throw new w_(e.constructor.name);r.addIssue=u=>{if(typeof u=="string")r.issues.push(Yl(u,r.value,t));else{const d=u;d.fatal&&(d.continue=!1),d.code??(d.code="custom"),d.input??(d.input=r.value),d.inst??(d.inst=e),r.issues.push(Yl(d))}};const s=t.transform(r.value,r);return s instanceof Promise?s.then(u=>(r.value=u,r)):(r.value=s,r)}});function hK(e){return new fK({type:"transform",transform:e})}const H_=re("ZodOptional",(e,t)=>{hP.init(e,t),Qt.init(e,t),e.unwrap=()=>e._zod.def.innerType});function j0(e){return new H_({type:"optional",innerType:e})}const mK=re("ZodNullable",(e,t)=>{mP.init(e,t),Qt.init(e,t),e.unwrap=()=>e._zod.def.innerType});function R0(e){return new mK({type:"nullable",innerType:e})}const pK=re("ZodDefault",(e,t)=>{pP.init(e,t),Qt.init(e,t),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function gK(e,t){return new pK({type:"default",innerType:e,get defaultValue(){return typeof t=="function"?t():E_(t)}})}const yK=re("ZodPrefault",(e,t)=>{gP.init(e,t),Qt.init(e,t),e.unwrap=()=>e._zod.def.innerType});function vK(e,t){return new yK({type:"prefault",innerType:e,get defaultValue(){return typeof t=="function"?t():E_(t)}})}const B_=re("ZodNonOptional",(e,t)=>{yP.init(e,t),Qt.init(e,t),e.unwrap=()=>e._zod.def.innerType});function xK(e,t){return new B_({type:"nonoptional",innerType:e,...Ie(t)})}const bK=re("ZodCatch",(e,t)=>{vP.init(e,t),Qt.init(e,t),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function wK(e,t){return new bK({type:"catch",innerType:e,catchValue:typeof t=="function"?t:()=>t})}const SK=re("ZodPipe",(e,t)=>{xP.init(e,t),Qt.init(e,t),e.in=t.in,e.out=t.out});function O0(e,t){return new SK({type:"pipe",in:e,out:t})}const _K=re("ZodReadonly",(e,t)=>{bP.init(e,t),Qt.init(e,t),e.unwrap=()=>e._zod.def.innerType});function EK(e){return new _K({type:"readonly",innerType:e})}const CK=re("ZodCustom",(e,t)=>{wP.init(e,t),Qt.init(e,t)});function jK(e,t={}){return u8(CK,e,t)}function RK(e){return d8(e)}const OK=Bp("inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",secondary:"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",destructive:"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"}},defaultVariants:{variant:"default"}});function Ia({className:e,variant:t,asChild:r=!1,...i}){const s=r?_s:"span";return l.jsx(s,{"data-slot":"badge",className:de(OK({variant:t}),e),...i})}var NK=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],AK=NK.reduce((e,t)=>{const r=Wl(`Primitive.${t}`),i=p.forwardRef((s,u)=>{const{asChild:d,...h}=s,g=d?r:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(g,{...h,ref:u})});return i.displayName=`Primitive.${t}`,{...e,[t]:i}},{}),TK="Label",G_=p.forwardRef((e,t)=>l.jsx(AK.label,{...e,ref:t,onMouseDown:r=>{r.target.closest("button, input, select, textarea")||(e.onMouseDown?.(r),!r.defaultPrevented&&r.detail>1&&r.preventDefault())}}));G_.displayName=TK;var DK=G_;function Mr({className:e,...t}){return l.jsx(DK,{"data-slot":"label",className:de("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",e),...t})}const Cn=W3,X_=p.createContext({}),$e=({...e})=>l.jsx(X_.Provider,{value:{name:e.name},children:l.jsx(n5,{...e})}),Og=()=>{const e=p.useContext(X_),t=p.useContext(Z_),{getFieldState:r}=Zd(),i=m_({name:e.name}),s=r(e.name,i);if(!e)throw new Error("useFormField should be used within ");const{id:u}=t;return{id:u,name:e.name,formItemId:`${u}-form-item`,formDescriptionId:`${u}-form-item-description`,formMessageId:`${u}-form-item-message`,...s}},Z_=p.createContext({});function Ve({className:e,...t}){const r=p.useId();return l.jsx(Z_.Provider,{value:{id:r},children:l.jsx("div",{"data-slot":"form-item",className:de("grid gap-2",e),...t})})}function He({className:e,...t}){const{error:r,formItemId:i}=Og();return l.jsx(Mr,{"data-slot":"form-label","data-error":!!r,className:de("data-[error=true]:text-destructive",e),htmlFor:i,...t})}function Xe({...e}){const{error:t,formItemId:r,formDescriptionId:i,formMessageId:s}=Og();return l.jsx(_s,{"data-slot":"form-control",id:r,"aria-describedby":t?`${i} ${s}`:`${i}`,"aria-invalid":!!t,...e})}function Be({className:e,...t}){const{error:r,formMessageId:i}=Og(),s=r?String(r?.message??""):t.children;return s?l.jsx("p",{"data-slot":"form-message",id:i,className:de("text-destructive text-sm",e),...t,children:s}):null}function la({className:e,...t}){return l.jsx("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:l.jsx("table",{"data-slot":"table",className:de("w-full caption-bottom text-sm",e),...t})})}function ca({className:e,...t}){return l.jsx("thead",{"data-slot":"table-header",className:de("[&_tr]:border-b",e),...t})}function ua({className:e,...t}){return l.jsx("tbody",{"data-slot":"table-body",className:de("[&_tr:last-child]:border-0",e),...t})}function et({className:e,...t}){return l.jsx("tr",{"data-slot":"table-row",className:de("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",e),...t})}function ze({className:e,...t}){return l.jsx("th",{"data-slot":"table-head",className:de("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...t})}function _e({className:e,...t}){return l.jsx("td",{"data-slot":"table-cell",className:de("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...t})}function MK({className:e,...t}){return l.jsx("caption",{"data-slot":"table-caption",className:de("text-muted-foreground mt-4 text-sm",e),...t})}const Y_=Oa({key:Zt().trim().min(1,"Key is required").max(120,"Max 120 chars"),value:Zt().trim().optional()}),zK=Y_.partial();function kK({t:e}){const t=`${e.key}${e.value?`=${e.value}`:""}`;return l.jsxs(Ia,{variant:"secondary",className:"font-mono text-xs",children:[l.jsx(jd,{className:"mr-1 h-3 w-3"}),t]})}const PK=()=>{const[e,t]=p.useState(""),[r,i]=p.useState(!1),[s,u]=p.useState(!1),[d,h]=p.useState(null),[g,y]=p.useState(null),x=da(),v=rn({queryKey:["annotations"],queryFn:()=>kl.listAnnotations()}),w=_n({resolver:En(Y_),defaultValues:{key:"",value:""}}),E=mt({mutationFn:C=>kl.createAnnotation(C),onSuccess:async()=>{await x.invalidateQueries({queryKey:["annotations"]}),w.reset(),i(!1),Ee.success("Annotation Created Successfully.")},onError:C=>{Ee.error(C.message??"There was an error while creating Annotation")}}),j=C=>{E.mutate(C)},S=_n({resolver:En(zK),defaultValues:{}}),N=mt({mutationFn:({id:C,values:T})=>kl.updateAnnotation(C,T),onSuccess:async()=>{await x.invalidateQueries({queryKey:["annotations"]}),S.reset(),u(!1),Ee.success("Annotation Updated Successfully.")},onError:C=>{Ee.error(C.message??"There was an error while updating Annotation")}}),D=C=>{y(C.id),S.reset({key:C.key,value:C.value}),u(!0)},A=mt({mutationFn:C=>kl.deleteAnnotation(C),onSuccess:async()=>{await x.invalidateQueries({queryKey:["annotations"]}),h(null),Ee.success("Annotation Deleted Successfully.")},onError:C=>{Ee.error(C.message??"There was an error while deleting Annotation")}}),O=p.useMemo(()=>{const C=v.data??[],T=e.trim().toLowerCase();return T?C.filter(U=>U.key?.toLowerCase().includes(T)||U.value?.toLowerCase().includes(T)):C},[e,v.data]);return v.isLoading?l.jsx("div",{className:"p-6",children:"Loading annotations…"}):v.error?l.jsxs("div",{className:"p-6 text-red-500",children:["Error loading annotations.",l.jsx("pre",{children:JSON.stringify(v,null,2)})]}):l.jsxs("div",{className:"space-y-4 p-6",children:[l.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[l.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Annotations"}),l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsxs("div",{className:"relative",children:[l.jsx(zr,{className:"absolute top-2.5 left-2 h-4 w-4 opacity-60"}),l.jsx(Fe,{value:e,onChange:C=>t(C.target.value),placeholder:"Search annotations",className:"w-64 pl-8"})]}),l.jsxs(Et,{open:r,onOpenChange:i,children:[l.jsx(or,{asChild:!0,children:l.jsxs(se,{onClick:()=>i(!0),children:[l.jsx(ro,{className:"mr-2 h-4 w-4"}),"Create Annotation"]})}),l.jsxs(Ct,{className:"sm:max-w-lg",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Create Label"})}),l.jsx(Cn,{...w,children:l.jsxs("form",{className:"space-y-4",onSubmit:w.handleSubmit(j),children:[l.jsx($e,{control:w.control,name:"key",render:({field:C})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Key"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"environment",...C})}),l.jsx(Be,{})]})}),l.jsx($e,{control:w.control,name:"value",render:({field:C})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Value"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"dev",...C})}),l.jsx(Be,{})]})}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{type:"button",variant:"outline",onClick:()=>i(!1),children:"Cancel"}),l.jsx(se,{type:"submit",disabled:w.formState.isSubmitting,children:w.formState.isSubmitting?"Creating…":"Create"})]})]})})]})]})]})]}),l.jsx("div",{className:"bg-background overflow-hidden rounded-2xl border shadow-sm",children:l.jsx("div",{className:"overflow-x-auto",children:l.jsxs(la,{children:[l.jsx(ca,{children:l.jsxs(et,{children:[l.jsx(ze,{children:"Key"}),l.jsx(ze,{children:"Value"}),l.jsx(ze,{children:"Annotation"}),l.jsx(ze,{className:"w-[180px] text-right",children:"Actions"})]})}),l.jsxs(ua,{children:[O.map(C=>l.jsxs(et,{children:[l.jsx(_e,{children:C.key}),l.jsx(_e,{children:C.value}),l.jsx(_e,{children:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(kK,{t:C}),l.jsx("code",{className:"text-muted-foreground text-xs",children:Gi(C.id,6)})]})}),l.jsx(_e,{children:l.jsxs("div",{className:"flex justify-end gap-2",children:[l.jsxs(se,{variant:"outline",size:"sm",onClick:()=>D(C),children:[l.jsx(Cd,{className:"mr-2 h-4 w-4"})," Edit"]}),l.jsx(se,{variant:"destructive",size:"sm",onClick:()=>h(C.id),disabled:A.isPending&&d===C.id,children:A.isPending&&d===C.id?"Deleting…":"Delete"})]})})]},C.id)),O.length===0&&l.jsx(et,{children:l.jsxs(_e,{colSpan:4,className:"text-muted-foreground py-10 text-center",children:[l.jsx(Fp,{className:"mx-auto mb-2 h-6 w-6 opacity-60"}),"No labels match your search."]})})]})]})})}),l.jsx(Et,{open:s,onOpenChange:u,children:l.jsxs(Ct,{className:"sm:max-w-lg",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Edit Annotation"})}),l.jsx(Cn,{...S,children:l.jsxs("form",{className:"space-y-4",onSubmit:S.handleSubmit(C=>{g&&N.mutate({id:g,values:C})}),children:[l.jsx($e,{control:S.control,name:"key",render:({field:C})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Key"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"dedicated",...C})}),l.jsx(Be,{})]})}),l.jsx($e,{control:S.control,name:"value",render:({field:C})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Value (optional)"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"gpu",...C})}),l.jsx(Be,{})]})}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{type:"button",variant:"outline",onClick:()=>u(!1),children:"Cancel"}),l.jsx(se,{type:"submit",disabled:N.isPending,children:N.isPending?"Saving…":"Save changes"})]})]})})]})}),l.jsx(Et,{open:!!d,onOpenChange:C=>!C&&h(null),children:l.jsxs(Ct,{className:"sm:max-w-md",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Delete annotation"})}),l.jsx("p",{className:"text-muted-foreground text-sm",children:"This action cannot be undone. Are you sure you want to delete this annotation?"}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{variant:"outline",onClick:()=>h(null),children:"Cancel"}),l.jsx(se,{variant:"destructive",onClick:()=>d&&A.mutate(d),disabled:A.isPending,children:A.isPending?"Deleting…":"Delete"})]})]})})]})};function Ua({className:e,...t}){return l.jsx("div",{"data-slot":"card",className:de("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",e),...t})}function lr({className:e,...t}){return l.jsx("div",{"data-slot":"card-header",className:de("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",e),...t})}function cr({className:e,...t}){return l.jsx("div",{"data-slot":"card-title",className:de("leading-none font-semibold",e),...t})}function jp({className:e,...t}){return l.jsx("div",{"data-slot":"card-description",className:de("text-muted-foreground text-sm",e),...t})}function qa({className:e,...t}){return l.jsx("div",{"data-slot":"card-content",className:de("px-6",e),...t})}function KK(e,t="gsot-auth",r=520,i=640){const s=window.top.outerHeight/2+window.top.screenY-i/2,u=window.top.outerWidth/2+window.top.screenX-r/2;return window.open(e,t,`toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=${r},height=${i},top=${s},left=${u}`)}async function IK(e){const t=new URLSearchParams({mode:"spa",origin:window.location.origin}),r=await fetch(`${Vp}/auth/${e}/start?`+t,{method:"POST"});if(!r.ok)throw new Error("Failed to start auth");return(await r.json()).auth_url}const N0=()=>{const e=IR(),t=Pp(),r=p.useMemo(()=>{const s=new URLSearchParams(t.search).get("to")||"/me";try{const u=new URL(s,window.location.origin);return u.origin===window.location.origin?u.pathname+u.search:"/me"}catch{return"/me"}},[t.search]);p.useEffect(()=>{wn.get()?.access_token&&e(r,{replace:!0})},[e,r]),p.useEffect(()=>{const s=u=>{if(!(typeof u.data=="object"&&u.data?.type==="autoglue:auth"))return;const h=u.data.payload;wn.set(h),e(r,{replace:!0})};return window.addEventListener("message",s),()=>window.removeEventListener("message",s)},[e,r]);const i=async s=>{const u=await IK(s);KK(u)||alert("Please allow popups to sign in.")};return l.jsx("div",{className:"mx-auto flex items-center justify-center p-4",children:l.jsxs(Ua,{className:"w-full max-w-md",children:[l.jsxs(lr,{children:[l.jsx(cr,{className:"text-lg md:text-xl",children:"Sign In"}),l.jsx(jp,{className:"text-xs md:text-sm",children:"Continue with a provider below to access your account."})]}),l.jsx(qa,{children:l.jsx("div",{className:"grid gap-4",children:l.jsx("div",{className:de("flex w-full items-center gap-2","flex-col justify-between"),children:l.jsxs(se,{variant:"outline",className:"w-full gap-2",onClick:()=>i("google"),children:[l.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"0.98em",height:"1em",viewBox:"0 0 256 262","aria-hidden":"true",focusable:"false",children:[l.jsx("path",{fill:"#4285F4",d:"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027"}),l.jsx("path",{fill:"#34A853",d:"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1"}),l.jsx("path",{fill:"#FBBC05",d:"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z"}),l.jsx("path",{fill:"#EB4335",d:"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251"})]}),"Sign in with Google"]})})})})]})})},Rl=vT(),Ol={listJobs:(e={})=>Pe(async()=>await Rl.adminListArcherJobs(e)),enqueue:e=>Pe(async()=>await Rl.adminEnqueueArcherJob({body:e})),retryJob:e=>Pe(async()=>await Rl.adminRetryArcherJob({id:e})),cancelJob:e=>Pe(async()=>await Rl.adminCancelArcherJob({id:e})),listQueues:()=>Pe(async()=>await Rl.adminListArcherQueues())};function A0(e,[t,r]){return Math.min(r,Math.max(t,e))}function T0(e){const t=LK(e),r=p.forwardRef((i,s)=>{const{children:u,...d}=i,h=p.Children.toArray(u),g=h.find(qK);if(g){const y=g.props.children,x=h.map(v=>v===g?p.Children.count(y)>1?p.Children.only(null):p.isValidElement(y)?y.props.children:null:v);return l.jsx(t,{...d,ref:s,children:p.isValidElement(y)?p.cloneElement(y,void 0,x):null})}return l.jsx(t,{...d,ref:s,children:u})});return r.displayName=`${e}.Slot`,r}function LK(e){const t=p.forwardRef((r,i)=>{const{children:s,...u}=r;if(p.isValidElement(s)){const d=$K(s),h=FK(u,s.props);return s.type!==p.Fragment&&(h.ref=i?Mn(i,d):d),p.cloneElement(s,h)}return p.Children.count(s)>1?p.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var UK=Symbol("radix.slottable");function qK(e){return p.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===UK}function FK(e,t){const r={...t};for(const i in t){const s=e[i],u=t[i];/^on[A-Z]/.test(i)?s&&u?r[i]=(...h)=>{const g=u(...h);return s(...h),g}:s&&(r[i]=s):i==="style"?r[i]={...s,...u}:i==="className"&&(r[i]=[s,u].filter(Boolean).join(" "))}return{...e,...r}}function $K(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}function Ng(e){const t=e+"CollectionProvider",[r,i]=ur(t),[s,u]=r(t,{collectionRef:{current:null},itemMap:new Map}),d=S=>{const{scope:N,children:D}=S,A=Q.useRef(null),O=Q.useRef(new Map).current;return l.jsx(s,{scope:N,itemMap:O,collectionRef:A,children:D})};d.displayName=t;const h=e+"CollectionSlot",g=T0(h),y=Q.forwardRef((S,N)=>{const{scope:D,children:A}=S,O=u(h,D),C=dt(N,O.collectionRef);return l.jsx(g,{ref:C,children:A})});y.displayName=h;const x=e+"CollectionItemSlot",v="data-radix-collection-item",w=T0(x),E=Q.forwardRef((S,N)=>{const{scope:D,children:A,...O}=S,C=Q.useRef(null),T=dt(N,C),U=u(x,D);return Q.useEffect(()=>(U.itemMap.set(C,{ref:C,...O}),()=>void U.itemMap.delete(C))),l.jsx(w,{[v]:"",ref:T,children:A})});E.displayName=x;function j(S){const N=u(e+"CollectionConsumer",S);return Q.useCallback(()=>{const A=N.collectionRef.current;if(!A)return[];const O=Array.from(A.querySelectorAll(`[${v}]`));return Array.from(N.itemMap.values()).sort((U,L)=>O.indexOf(U.ref.current)-O.indexOf(L.ref.current))},[N.collectionRef,N.itemMap])}return[{Provider:d,Slot:y,ItemSlot:E},j,i]}var VK=p.createContext(void 0);function Ag(e){const t=p.useContext(VK);return e||t||"ltr"}function HK(e){const t=BK(e),r=p.forwardRef((i,s)=>{const{children:u,...d}=i,h=p.Children.toArray(u),g=h.find(XK);if(g){const y=g.props.children,x=h.map(v=>v===g?p.Children.count(y)>1?p.Children.only(null):p.isValidElement(y)?y.props.children:null:v);return l.jsx(t,{...d,ref:s,children:p.isValidElement(y)?p.cloneElement(y,void 0,x):null})}return l.jsx(t,{...d,ref:s,children:u})});return r.displayName=`${e}.Slot`,r}function BK(e){const t=p.forwardRef((r,i)=>{const{children:s,...u}=r;if(p.isValidElement(s)){const d=YK(s),h=ZK(u,s.props);return s.type!==p.Fragment&&(h.ref=i?Mn(i,d):d),p.cloneElement(s,h)}return p.Children.count(s)>1?p.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var GK=Symbol("radix.slottable");function XK(e){return p.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===GK}function ZK(e,t){const r={...t};for(const i in t){const s=e[i],u=t[i];/^on[A-Z]/.test(i)?s&&u?r[i]=(...h)=>{const g=u(...h);return s(...h),g}:s&&(r[i]=s):i==="style"?r[i]={...s,...u}:i==="className"&&(r[i]=[s,u].filter(Boolean).join(" "))}return{...e,...r}}function YK(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}function QK(e){const t=p.useRef({value:e,previous:e});return p.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var JK=[" ","Enter","ArrowUp","ArrowDown"],WK=[" ","Enter"],no="Select",[nf,af,eI]=Ng(no),[Ns]=ur(no,[eI,xi]),rf=xi(),[tI,Si]=Ns(no),[nI,aI]=Ns(no),Q_=e=>{const{__scopeSelect:t,children:r,open:i,defaultOpen:s,onOpenChange:u,value:d,defaultValue:h,onValueChange:g,dir:y,name:x,autoComplete:v,disabled:w,required:E,form:j}=e,S=rf(t),[N,D]=p.useState(null),[A,O]=p.useState(null),[C,T]=p.useState(!1),U=Ag(y),[L,V]=Yi({prop:i,defaultProp:s??!1,onChange:u,caller:no}),[fe,ge]=Yi({prop:d,defaultProp:h,onChange:g,caller:no}),pe=p.useRef(null),ae=N?j||!!N.closest("form"):!0,[le,he]=p.useState(new Set),be=Array.from(le).map(R=>R.props.value).join(";");return l.jsx(qd,{...S,children:l.jsxs(tI,{required:E,scope:t,trigger:N,onTriggerChange:D,valueNode:A,onValueNodeChange:O,valueNodeHasChildren:C,onValueNodeHasChildrenChange:T,contentId:Sn(),value:fe,onValueChange:ge,open:L,onOpenChange:V,dir:U,triggerPointerDownPosRef:pe,disabled:w,children:[l.jsx(nf.Provider,{scope:t,children:l.jsx(nI,{scope:e.__scopeSelect,onNativeOptionAdd:p.useCallback(R=>{he(P=>new Set(P).add(R))},[]),onNativeOptionRemove:p.useCallback(R=>{he(P=>{const I=new Set(P);return I.delete(R),I})},[]),children:r})}),ae?l.jsxs(xE,{"aria-hidden":!0,required:E,tabIndex:-1,name:x,autoComplete:v,value:fe,onChange:R=>ge(R.target.value),disabled:w,form:j,children:[fe===void 0?l.jsx("option",{value:""}):null,Array.from(le)]},be):null]})})};Q_.displayName=no;var J_="SelectTrigger",W_=p.forwardRef((e,t)=>{const{__scopeSelect:r,disabled:i=!1,...s}=e,u=rf(r),d=Si(J_,r),h=d.disabled||i,g=dt(t,d.onTriggerChange),y=af(r),x=p.useRef("touch"),[v,w,E]=wE(S=>{const N=y().filter(O=>!O.disabled),D=N.find(O=>O.value===d.value),A=SE(N,S,D);A!==void 0&&d.onValueChange(A.value)}),j=S=>{h||(d.onOpenChange(!0),E()),S&&(d.triggerPointerDownPosRef.current={x:Math.round(S.pageX),y:Math.round(S.pageY)})};return l.jsx(ic,{asChild:!0,...u,children:l.jsx(rt.button,{type:"button",role:"combobox","aria-controls":d.contentId,"aria-expanded":d.open,"aria-required":d.required,"aria-autocomplete":"none",dir:d.dir,"data-state":d.open?"open":"closed",disabled:h,"data-disabled":h?"":void 0,"data-placeholder":bE(d.value)?"":void 0,...s,ref:g,onClick:Ce(s.onClick,S=>{S.currentTarget.focus(),x.current!=="mouse"&&j(S)}),onPointerDown:Ce(s.onPointerDown,S=>{x.current=S.pointerType;const N=S.target;N.hasPointerCapture(S.pointerId)&&N.releasePointerCapture(S.pointerId),S.button===0&&S.ctrlKey===!1&&S.pointerType==="mouse"&&(j(S),S.preventDefault())}),onKeyDown:Ce(s.onKeyDown,S=>{const N=v.current!=="";!(S.ctrlKey||S.altKey||S.metaKey)&&S.key.length===1&&w(S.key),!(N&&S.key===" ")&&JK.includes(S.key)&&(j(),S.preventDefault())})})})});W_.displayName=J_;var eE="SelectValue",tE=p.forwardRef((e,t)=>{const{__scopeSelect:r,className:i,style:s,children:u,placeholder:d="",...h}=e,g=Si(eE,r),{onValueNodeHasChildrenChange:y}=g,x=u!==void 0,v=dt(t,g.onValueNodeChange);return on(()=>{y(x)},[y,x]),l.jsx(rt.span,{...h,ref:v,style:{pointerEvents:"none"},children:bE(g.value)?l.jsx(l.Fragment,{children:d}):u})});tE.displayName=eE;var rI="SelectIcon",nE=p.forwardRef((e,t)=>{const{__scopeSelect:r,children:i,...s}=e;return l.jsx(rt.span,{"aria-hidden":!0,...s,ref:t,children:i||"▼"})});nE.displayName=rI;var iI="SelectPortal",aE=e=>l.jsx(Cs,{asChild:!0,...e});aE.displayName=iI;var ao="SelectContent",rE=p.forwardRef((e,t)=>{const r=Si(ao,e.__scopeSelect),[i,s]=p.useState();if(on(()=>{s(new DocumentFragment)},[]),!r.open){const u=i;return u?Ed.createPortal(l.jsx(iE,{scope:e.__scopeSelect,children:l.jsx(nf.Slot,{scope:e.__scopeSelect,children:l.jsx("div",{children:e.children})})}),u):null}return l.jsx(oE,{...e,ref:t})});rE.displayName=ao;var za=10,[iE,_i]=Ns(ao),oI="SelectContentImpl",sI=HK("SelectContent.RemoveScroll"),oE=p.forwardRef((e,t)=>{const{__scopeSelect:r,position:i="item-aligned",onCloseAutoFocus:s,onEscapeKeyDown:u,onPointerDownOutside:d,side:h,sideOffset:g,align:y,alignOffset:x,arrowPadding:v,collisionBoundary:w,collisionPadding:E,sticky:j,hideWhenDetached:S,avoidCollisions:N,...D}=e,A=Si(ao,r),[O,C]=p.useState(null),[T,U]=p.useState(null),L=dt(t,W=>C(W)),[V,fe]=p.useState(null),[ge,pe]=p.useState(null),ae=af(r),[le,he]=p.useState(!1),be=p.useRef(!1);p.useEffect(()=>{if(O)return Ad(O)},[O]),Od();const R=p.useCallback(W=>{const[xe,...Oe]=ae().map(Ze=>Ze.ref.current),[Ue]=Oe.slice(-1),Ye=document.activeElement;for(const Ze of W)if(Ze===Ye||(Ze?.scrollIntoView({block:"nearest"}),Ze===xe&&T&&(T.scrollTop=0),Ze===Ue&&T&&(T.scrollTop=T.scrollHeight),Ze?.focus(),document.activeElement!==Ye))return},[ae,T]),P=p.useCallback(()=>R([V,O]),[R,V,O]);p.useEffect(()=>{le&&P()},[le,P]);const{onOpenChange:I,triggerPointerDownPosRef:ee}=A;p.useEffect(()=>{if(O){let W={x:0,y:0};const xe=Ue=>{W={x:Math.abs(Math.round(Ue.pageX)-(ee.current?.x??0)),y:Math.abs(Math.round(Ue.pageY)-(ee.current?.y??0))}},Oe=Ue=>{W.x<=10&&W.y<=10?Ue.preventDefault():O.contains(Ue.target)||I(!1),document.removeEventListener("pointermove",xe),ee.current=null};return ee.current!==null&&(document.addEventListener("pointermove",xe),document.addEventListener("pointerup",Oe,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",xe),document.removeEventListener("pointerup",Oe,{capture:!0})}}},[O,I,ee]),p.useEffect(()=>{const W=()=>I(!1);return window.addEventListener("blur",W),window.addEventListener("resize",W),()=>{window.removeEventListener("blur",W),window.removeEventListener("resize",W)}},[I]);const[me,Re]=wE(W=>{const xe=ae().filter(Ye=>!Ye.disabled),Oe=xe.find(Ye=>Ye.ref.current===document.activeElement),Ue=SE(xe,W,Oe);Ue&&setTimeout(()=>Ue.ref.current.focus())}),G=p.useCallback((W,xe,Oe)=>{const Ue=!be.current&&!Oe;(A.value!==void 0&&A.value===xe||Ue)&&(fe(W),Ue&&(be.current=!0))},[A.value]),Y=p.useCallback(()=>O?.focus(),[O]),ie=p.useCallback((W,xe,Oe)=>{const Ue=!be.current&&!Oe;(A.value!==void 0&&A.value===xe||Ue)&&pe(W)},[A.value]),oe=i==="popper"?Rp:sE,ve=oe===Rp?{side:h,sideOffset:g,align:y,alignOffset:x,arrowPadding:v,collisionBoundary:w,collisionPadding:E,sticky:j,hideWhenDetached:S,avoidCollisions:N}:{};return l.jsx(iE,{scope:r,content:O,viewport:T,onViewportChange:U,itemRefCallback:G,selectedItem:V,onItemLeave:Y,itemTextRefCallback:ie,focusSelectedItem:P,selectedItemText:ge,position:i,isPositioned:le,searchRef:me,children:l.jsx(tc,{as:sI,allowPinchZoom:!0,children:l.jsx(ec,{asChild:!0,trapped:A.open,onMountAutoFocus:W=>{W.preventDefault()},onUnmountAutoFocus:Ce(s,W=>{A.trigger?.focus({preventScroll:!0}),W.preventDefault()}),children:l.jsx(Es,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:u,onPointerDownOutside:d,onFocusOutside:W=>W.preventDefault(),onDismiss:()=>A.onOpenChange(!1),children:l.jsx(oe,{role:"listbox",id:A.contentId,"data-state":A.open?"open":"closed",dir:A.dir,onContextMenu:W=>W.preventDefault(),...D,...ve,onPlaced:()=>he(!0),ref:L,style:{display:"flex",flexDirection:"column",outline:"none",...D.style},onKeyDown:Ce(D.onKeyDown,W=>{const xe=W.ctrlKey||W.altKey||W.metaKey;if(W.key==="Tab"&&W.preventDefault(),!xe&&W.key.length===1&&Re(W.key),["ArrowUp","ArrowDown","Home","End"].includes(W.key)){let Ue=ae().filter(Ye=>!Ye.disabled).map(Ye=>Ye.ref.current);if(["ArrowUp","End"].includes(W.key)&&(Ue=Ue.slice().reverse()),["ArrowUp","ArrowDown"].includes(W.key)){const Ye=W.target,Ze=Ue.indexOf(Ye);Ue=Ue.slice(Ze+1)}setTimeout(()=>R(Ue)),W.preventDefault()}})})})})})})});oE.displayName=oI;var lI="SelectItemAlignedPosition",sE=p.forwardRef((e,t)=>{const{__scopeSelect:r,onPlaced:i,...s}=e,u=Si(ao,r),d=_i(ao,r),[h,g]=p.useState(null),[y,x]=p.useState(null),v=dt(t,L=>x(L)),w=af(r),E=p.useRef(!1),j=p.useRef(!0),{viewport:S,selectedItem:N,selectedItemText:D,focusSelectedItem:A}=d,O=p.useCallback(()=>{if(u.trigger&&u.valueNode&&h&&y&&S&&N&&D){const L=u.trigger.getBoundingClientRect(),V=y.getBoundingClientRect(),fe=u.valueNode.getBoundingClientRect(),ge=D.getBoundingClientRect();if(u.dir!=="rtl"){const Ye=ge.left-V.left,Ze=fe.left-Ye,Kt=L.left-Ze,B=L.width+Kt,qe=Math.max(B,V.width),ke=window.innerWidth-za,Qe=A0(Ze,[za,Math.max(za,ke-qe)]);h.style.minWidth=B+"px",h.style.left=Qe+"px"}else{const Ye=V.right-ge.right,Ze=window.innerWidth-fe.right-Ye,Kt=window.innerWidth-L.right-Ze,B=L.width+Kt,qe=Math.max(B,V.width),ke=window.innerWidth-za,Qe=A0(Ze,[za,Math.max(za,ke-qe)]);h.style.minWidth=B+"px",h.style.right=Qe+"px"}const pe=w(),ae=window.innerHeight-za*2,le=S.scrollHeight,he=window.getComputedStyle(y),be=parseInt(he.borderTopWidth,10),R=parseInt(he.paddingTop,10),P=parseInt(he.borderBottomWidth,10),I=parseInt(he.paddingBottom,10),ee=be+R+le+I+P,me=Math.min(N.offsetHeight*5,ee),Re=window.getComputedStyle(S),G=parseInt(Re.paddingTop,10),Y=parseInt(Re.paddingBottom,10),ie=L.top+L.height/2-za,oe=ae-ie,ve=N.offsetHeight/2,W=N.offsetTop+ve,xe=be+R+W,Oe=ee-xe;if(xe<=ie){const Ye=pe.length>0&&N===pe[pe.length-1].ref.current;h.style.bottom="0px";const Ze=y.clientHeight-S.offsetTop-S.offsetHeight,Kt=Math.max(oe,ve+(Ye?Y:0)+Ze+P),B=xe+Kt;h.style.height=B+"px"}else{const Ye=pe.length>0&&N===pe[0].ref.current;h.style.top="0px";const Kt=Math.max(ie,be+S.offsetTop+(Ye?G:0)+ve)+Oe;h.style.height=Kt+"px",S.scrollTop=xe-ie+S.offsetTop}h.style.margin=`${za}px 0`,h.style.minHeight=me+"px",h.style.maxHeight=ae+"px",i?.(),requestAnimationFrame(()=>E.current=!0)}},[w,u.trigger,u.valueNode,h,y,S,N,D,u.dir,i]);on(()=>O(),[O]);const[C,T]=p.useState();on(()=>{y&&T(window.getComputedStyle(y).zIndex)},[y]);const U=p.useCallback(L=>{L&&j.current===!0&&(O(),A?.(),j.current=!1)},[O,A]);return l.jsx(uI,{scope:r,contentWrapper:h,shouldExpandOnScrollRef:E,onScrollButtonChange:U,children:l.jsx("div",{ref:g,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:C},children:l.jsx(rt.div,{...s,ref:v,style:{boxSizing:"border-box",maxHeight:"100%",...s.style}})})})});sE.displayName=lI;var cI="SelectPopperPosition",Rp=p.forwardRef((e,t)=>{const{__scopeSelect:r,align:i="start",collisionPadding:s=za,...u}=e,d=rf(r);return l.jsx(Fd,{...d,...u,ref:t,align:i,collisionPadding:s,style:{boxSizing:"border-box",...u.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});Rp.displayName=cI;var[uI,Tg]=Ns(ao,{}),Op="SelectViewport",lE=p.forwardRef((e,t)=>{const{__scopeSelect:r,nonce:i,...s}=e,u=_i(Op,r),d=Tg(Op,r),h=dt(t,u.onViewportChange),g=p.useRef(0);return l.jsxs(l.Fragment,{children:[l.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:i}),l.jsx(nf.Slot,{scope:r,children:l.jsx(rt.div,{"data-radix-select-viewport":"",role:"presentation",...s,ref:h,style:{position:"relative",flex:1,overflow:"hidden auto",...s.style},onScroll:Ce(s.onScroll,y=>{const x=y.currentTarget,{contentWrapper:v,shouldExpandOnScrollRef:w}=d;if(w?.current&&v){const E=Math.abs(g.current-x.scrollTop);if(E>0){const j=window.innerHeight-za*2,S=parseFloat(v.style.minHeight),N=parseFloat(v.style.height),D=Math.max(S,N);if(D0?C:0,v.style.justifyContent="flex-end")}}}g.current=x.scrollTop})})})]})});lE.displayName=Op;var cE="SelectGroup",[dI,fI]=Ns(cE),hI=p.forwardRef((e,t)=>{const{__scopeSelect:r,...i}=e,s=Sn();return l.jsx(dI,{scope:r,id:s,children:l.jsx(rt.div,{role:"group","aria-labelledby":s,...i,ref:t})})});hI.displayName=cE;var uE="SelectLabel",mI=p.forwardRef((e,t)=>{const{__scopeSelect:r,...i}=e,s=fI(uE,r);return l.jsx(rt.div,{id:s.id,...i,ref:t})});mI.displayName=uE;var wd="SelectItem",[pI,dE]=Ns(wd),fE=p.forwardRef((e,t)=>{const{__scopeSelect:r,value:i,disabled:s=!1,textValue:u,...d}=e,h=Si(wd,r),g=_i(wd,r),y=h.value===i,[x,v]=p.useState(u??""),[w,E]=p.useState(!1),j=dt(t,A=>g.itemRefCallback?.(A,i,s)),S=Sn(),N=p.useRef("touch"),D=()=>{s||(h.onValueChange(i),h.onOpenChange(!1))};if(i==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return l.jsx(pI,{scope:r,value:i,disabled:s,textId:S,isSelected:y,onItemTextChange:p.useCallback(A=>{v(O=>O||(A?.textContent??"").trim())},[]),children:l.jsx(nf.ItemSlot,{scope:r,value:i,disabled:s,textValue:x,children:l.jsx(rt.div,{role:"option","aria-labelledby":S,"data-highlighted":w?"":void 0,"aria-selected":y&&w,"data-state":y?"checked":"unchecked","aria-disabled":s||void 0,"data-disabled":s?"":void 0,tabIndex:s?void 0:-1,...d,ref:j,onFocus:Ce(d.onFocus,()=>E(!0)),onBlur:Ce(d.onBlur,()=>E(!1)),onClick:Ce(d.onClick,()=>{N.current!=="mouse"&&D()}),onPointerUp:Ce(d.onPointerUp,()=>{N.current==="mouse"&&D()}),onPointerDown:Ce(d.onPointerDown,A=>{N.current=A.pointerType}),onPointerMove:Ce(d.onPointerMove,A=>{N.current=A.pointerType,s?g.onItemLeave?.():N.current==="mouse"&&A.currentTarget.focus({preventScroll:!0})}),onPointerLeave:Ce(d.onPointerLeave,A=>{A.currentTarget===document.activeElement&&g.onItemLeave?.()}),onKeyDown:Ce(d.onKeyDown,A=>{g.searchRef?.current!==""&&A.key===" "||(WK.includes(A.key)&&D(),A.key===" "&&A.preventDefault())})})})})});fE.displayName=wd;var Il="SelectItemText",hE=p.forwardRef((e,t)=>{const{__scopeSelect:r,className:i,style:s,...u}=e,d=Si(Il,r),h=_i(Il,r),g=dE(Il,r),y=aI(Il,r),[x,v]=p.useState(null),w=dt(t,D=>v(D),g.onItemTextChange,D=>h.itemTextRefCallback?.(D,g.value,g.disabled)),E=x?.textContent,j=p.useMemo(()=>l.jsx("option",{value:g.value,disabled:g.disabled,children:E},g.value),[g.disabled,g.value,E]),{onNativeOptionAdd:S,onNativeOptionRemove:N}=y;return on(()=>(S(j),()=>N(j)),[S,N,j]),l.jsxs(l.Fragment,{children:[l.jsx(rt.span,{id:g.textId,...u,ref:w}),g.isSelected&&d.valueNode&&!d.valueNodeHasChildren?Ed.createPortal(u.children,d.valueNode):null]})});hE.displayName=Il;var mE="SelectItemIndicator",pE=p.forwardRef((e,t)=>{const{__scopeSelect:r,...i}=e;return dE(mE,r).isSelected?l.jsx(rt.span,{"aria-hidden":!0,...i,ref:t}):null});pE.displayName=mE;var Np="SelectScrollUpButton",gE=p.forwardRef((e,t)=>{const r=_i(Np,e.__scopeSelect),i=Tg(Np,e.__scopeSelect),[s,u]=p.useState(!1),d=dt(t,i.onScrollButtonChange);return on(()=>{if(r.viewport&&r.isPositioned){let h=function(){const y=g.scrollTop>0;u(y)};const g=r.viewport;return h(),g.addEventListener("scroll",h),()=>g.removeEventListener("scroll",h)}},[r.viewport,r.isPositioned]),s?l.jsx(vE,{...e,ref:d,onAutoScroll:()=>{const{viewport:h,selectedItem:g}=r;h&&g&&(h.scrollTop=h.scrollTop-g.offsetHeight)}}):null});gE.displayName=Np;var Ap="SelectScrollDownButton",yE=p.forwardRef((e,t)=>{const r=_i(Ap,e.__scopeSelect),i=Tg(Ap,e.__scopeSelect),[s,u]=p.useState(!1),d=dt(t,i.onScrollButtonChange);return on(()=>{if(r.viewport&&r.isPositioned){let h=function(){const y=g.scrollHeight-g.clientHeight,x=Math.ceil(g.scrollTop)g.removeEventListener("scroll",h)}},[r.viewport,r.isPositioned]),s?l.jsx(vE,{...e,ref:d,onAutoScroll:()=>{const{viewport:h,selectedItem:g}=r;h&&g&&(h.scrollTop=h.scrollTop+g.offsetHeight)}}):null});yE.displayName=Ap;var vE=p.forwardRef((e,t)=>{const{__scopeSelect:r,onAutoScroll:i,...s}=e,u=_i("SelectScrollButton",r),d=p.useRef(null),h=af(r),g=p.useCallback(()=>{d.current!==null&&(window.clearInterval(d.current),d.current=null)},[]);return p.useEffect(()=>()=>g(),[g]),on(()=>{h().find(x=>x.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:"nearest"})},[h]),l.jsx(rt.div,{"aria-hidden":!0,...s,ref:t,style:{flexShrink:0,...s.style},onPointerDown:Ce(s.onPointerDown,()=>{d.current===null&&(d.current=window.setInterval(i,50))}),onPointerMove:Ce(s.onPointerMove,()=>{u.onItemLeave?.(),d.current===null&&(d.current=window.setInterval(i,50))}),onPointerLeave:Ce(s.onPointerLeave,()=>{g()})})}),gI="SelectSeparator",yI=p.forwardRef((e,t)=>{const{__scopeSelect:r,...i}=e;return l.jsx(rt.div,{"aria-hidden":!0,...i,ref:t})});yI.displayName=gI;var Tp="SelectArrow",vI=p.forwardRef((e,t)=>{const{__scopeSelect:r,...i}=e,s=rf(r),u=Si(Tp,r),d=_i(Tp,r);return u.open&&d.position==="popper"?l.jsx($d,{...s,...i,ref:t}):null});vI.displayName=Tp;var xI="SelectBubbleInput",xE=p.forwardRef(({__scopeSelect:e,value:t,...r},i)=>{const s=p.useRef(null),u=dt(i,s),d=QK(t);return p.useEffect(()=>{const h=s.current;if(!h)return;const g=window.HTMLSelectElement.prototype,x=Object.getOwnPropertyDescriptor(g,"value").set;if(d!==t&&x){const v=new Event("change",{bubbles:!0});x.call(h,t),h.dispatchEvent(v)}},[d,t]),l.jsx(rt.select,{...r,style:{...Z1,...r.style},ref:u,defaultValue:t})});xE.displayName=xI;function bE(e){return e===""||e===void 0}function wE(e){const t=Fa(e),r=p.useRef(""),i=p.useRef(0),s=p.useCallback(d=>{const h=r.current+d;t(h),(function g(y){r.current=y,window.clearTimeout(i.current),y!==""&&(i.current=window.setTimeout(()=>g(""),1e3))})(h)},[t]),u=p.useCallback(()=>{r.current="",window.clearTimeout(i.current)},[]);return p.useEffect(()=>()=>window.clearTimeout(i.current),[]),[r,s,u]}function SE(e,t,r){const s=t.length>1&&Array.from(t).every(y=>y===t[0])?t[0]:t,u=r?e.indexOf(r):-1;let d=bI(e,Math.max(u,0));s.length===1&&(d=d.filter(y=>y!==r));const g=d.find(y=>y.textValue.toLowerCase().startsWith(s.toLowerCase()));return g!==r?g:void 0}function bI(e,t){return e.map((r,i)=>e[(t+i)%e.length])}var wI=Q_,SI=W_,_I=tE,EI=nE,CI=aE,jI=rE,RI=lE,OI=fE,NI=hE,AI=pE,TI=gE,DI=yE;function dn({...e}){return l.jsx(wI,{"data-slot":"select",...e})}function fn({...e}){return l.jsx(_I,{"data-slot":"select-value",...e})}function hn({className:e,size:t="default",children:r,...i}){return l.jsxs(SI,{"data-slot":"select-trigger","data-size":t,className:de("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...i,children:[r,l.jsx(EI,{asChild:!0,children:l.jsx(rS,{className:"size-4 opacity-50"})})]})}function mn({className:e,children:t,position:r="popper",align:i="center",...s}){return l.jsx(CI,{children:l.jsxs(jI,{"data-slot":"select-content",className:de("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",r==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,align:i,...s,children:[l.jsx(MI,{}),l.jsx(RI,{className:de("p-1",r==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:t}),l.jsx(zI,{})]})})}function ut({className:e,children:t,...r}){return l.jsxs(OI,{"data-slot":"select-item",className:de("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r,children:[l.jsx("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:l.jsx(AI,{children:l.jsx(aS,{className:"size-4"})})}),l.jsx(NI,{children:t})]})}function MI({className:e,...t}){return l.jsx(TI,{"data-slot":"select-scroll-up-button",className:de("flex cursor-default items-center justify-center py-1",e),...t,children:l.jsx(XO,{className:"size-4"})})}function zI({className:e,...t}){return l.jsx(DI,{"data-slot":"select-scroll-down-button",className:de("flex cursor-default items-center justify-center py-1",e),...t,children:l.jsx(rS,{className:"size-4"})})}function _E({className:e,...t}){return l.jsx("textarea",{"data-slot":"textarea",className:de("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),...t})}const kI=["queued","running","succeeded","failed","canceled","retrying","scheduled"],PI={queued:"bg-amber-100 text-amber-800",running:"bg-sky-100 text-sky-800",succeeded:"bg-emerald-100 text-emerald-800",failed:"bg-red-100 text-red-800",canceled:"bg-zinc-200 text-zinc-700",retrying:"bg-orange-100 text-orange-800",scheduled:"bg-violet-100 text-violet-800"};function D0(e){if(!e)return"—";const t=new Date(e);return new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"}).format(t)}function KI(e,t=300){const[r,i]=p.useState(e);return p.useEffect(()=>{const s=setTimeout(()=>i(e),t);return()=>clearTimeout(s)},[e,t]),r}const II=()=>{const e=da(),[t,r]=p.useState(""),[i,s]=p.useState(""),[u,d]=p.useState(""),h=KI(u,300),[g,y]=p.useState(1),[x,v]=p.useState(25),E=rn({queryKey:["archer","jobs",{status:t,queue:i,q:h,page:g,pageSize:x}],queryFn:()=>Ol.listJobs({status:t,queue:i||void 0,q:h||void 0,page:g,pageSize:x}),placeholderData:T=>T,staleTime:1e4}),j=rn({queryKey:["archer","queues"],queryFn:()=>Ol.listQueues(),staleTime:3e4}),S=mt({mutationFn:T=>Ol.enqueue(T),onSuccess:()=>e.invalidateQueries({queryKey:["archer","jobs"]})}),N=mt({mutationFn:T=>Ol.retryJob(T),onSuccess:()=>e.invalidateQueries({queryKey:["archer","jobs"]})}),D=mt({mutationFn:T=>Ol.cancelJob(T),onSuccess:()=>e.invalidateQueries({queryKey:["archer","jobs"]})}),A=E.isFetching,O=E.data,C=O?Math.max(1,Math.ceil(O.total/O.pageSize)):1;return l.jsxs("div",{className:"container mx-auto space-y-6 p-6",children:[l.jsxs("div",{className:"flex items-start justify-between gap-4",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-semibold",children:"Archer Jobs"}),l.jsx("p",{className:"text-muted-foreground text-sm",children:"Inspect, enqueue, retry and cancel background jobs."})]}),l.jsxs("div",{className:"flex gap-2",children:[l.jsx(UI,{onSubmit:T=>S.mutateAsync(T),submitting:S.isPending}),l.jsxs(se,{variant:"secondary",onClick:()=>e.invalidateQueries({queryKey:["archer","jobs"]}),disabled:A,children:[A?l.jsx(ps,{className:"mr-2 h-4 w-4 animate-spin"}):l.jsx(_2,{className:"mr-2 h-4 w-4"}),"Refresh"]})]})]}),l.jsx("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-4",children:j.data?.map(T=>l.jsxs(Ua,{children:[l.jsx(lr,{children:l.jsx(cr,{className:"text-base",children:T.name})}),l.jsxs(qa,{className:"grid grid-cols-2 gap-2 text-sm",children:[l.jsx(Zu,{label:"Pending",value:T.pending}),l.jsx(Zu,{label:"Running",value:T.running}),l.jsx(Zu,{label:"Failed",value:T.failed}),l.jsx(Zu,{label:"Scheduled",value:T.scheduled})]})]},T.name))}),l.jsxs(Ua,{children:[l.jsx(lr,{children:l.jsx(cr,{children:"Filters"})}),l.jsxs(qa,{className:"grid gap-3 md:grid-cols-4",children:[l.jsxs("div",{className:"col-span-2 flex items-center gap-2",children:[l.jsx(Fe,{placeholder:"Search id, queue, error, payload…",value:u,onChange:T=>{d(T.target.value),y(1)},onKeyDown:T=>T.key==="Enter"&&e.invalidateQueries({queryKey:["archer","jobs"]})}),u&&l.jsx(se,{variant:"ghost",size:"icon",onClick:()=>d(""),children:l.jsx($p,{className:"h-4 w-4"})}),l.jsxs(se,{onClick:()=>e.invalidateQueries({queryKey:["archer","jobs"]}),children:[l.jsx(zr,{className:"mr-2 h-4 w-4"})," Search"]})]}),l.jsxs(dn,{value:t||"all",onValueChange:T=>{r(T==="all"?"":T),y(1)},children:[l.jsx(hn,{children:l.jsx(fn,{placeholder:"All statuses"})}),l.jsxs(mn,{children:[l.jsx(ut,{value:"all",children:"All statuses"}),kI.map(T=>l.jsx(ut,{value:T,children:T},T))]})]}),l.jsx(Fe,{placeholder:"Queue (optional)",value:i,onChange:T=>{s(T.target.value),y(1)}}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(Mr,{className:"whitespace-nowrap",children:"Page size"}),l.jsxs(dn,{value:String(x),onValueChange:T=>{v(Number(T)),y(1)},children:[l.jsx(hn,{className:"w-[120px]",children:l.jsx(fn,{})}),l.jsx(mn,{children:[10,25,50,100].map(T=>l.jsx(ut,{value:String(T),children:T},T))})]})]})]})]}),l.jsx(Ua,{children:l.jsxs(qa,{className:"p-0",children:[l.jsxs(la,{children:[l.jsx(ca,{children:l.jsxs(et,{children:[l.jsx(ze,{children:"ID"}),l.jsx(ze,{children:"Queue"}),l.jsx(ze,{children:"Status"}),l.jsx(ze,{children:"Attempts"}),l.jsx(ze,{children:"Run At"}),l.jsx(ze,{children:"Updated"}),l.jsx(ze,{className:"pr-4 text-right",children:"Actions"})]})}),l.jsxs(ua,{children:[E.isLoading&&l.jsx(et,{children:l.jsx(_e,{colSpan:7,className:"text-muted-foreground py-8 text-center",children:"Loading…"})}),E.isError&&l.jsx(et,{children:l.jsx(_e,{colSpan:7,className:"py-8 text-center text-red-600",children:"Failed to load jobs"})}),!E.isLoading&&O&&O.items.length===0&&l.jsx(et,{children:l.jsx(_e,{colSpan:7,className:"text-muted-foreground py-8 text-center",children:"No jobs match your filters."})}),O?.items.map(T=>l.jsxs(et,{children:[l.jsx(_e,{children:l.jsx("code",{className:"text-xs",children:T.id})}),l.jsx(_e,{children:l.jsx(Ia,{variant:"secondary",children:T.queue})}),l.jsx(_e,{children:l.jsx("span",{className:de("rounded-md px-2 py-0.5 text-xs",PI[T.status]),children:T.status})}),l.jsx(_e,{children:T.maxAttempts?`${T.attempts}/${T.maxAttempts}`:T.attempts}),l.jsx(_e,{children:D0(T.runAt)}),l.jsx(_e,{children:D0(T.updatedAt??T.createdAt)}),l.jsx(_e,{className:"text-right",children:l.jsxs("div",{className:"flex justify-end gap-2",children:[(T.status==="failed"||T.status==="canceled")&&l.jsx(se,{size:"sm",variant:"outline",disabled:N.isPending,onClick:()=>N.mutate(T.id),children:"Retry"}),(T.status==="queued"||T.status==="running"||T.status==="scheduled")&&l.jsx(se,{size:"sm",variant:"outline",disabled:D.isPending,onClick:()=>D.mutate(T.id),children:"Cancel"}),l.jsx(LI,{job:T})]})})]},T.id))]})]}),l.jsxs("div",{className:"flex items-center justify-between border-t p-3 text-sm",children:[l.jsxs("div",{children:["Page ",g," of ",C," • ",O?.total??0," total"]}),l.jsxs("div",{className:"flex gap-2",children:[l.jsx(se,{variant:"outline",disabled:g<=1||E.isFetching,onClick:()=>y(T=>Math.max(1,T-1)),children:"Prev"}),l.jsx(se,{variant:"outline",disabled:g>=C||E.isFetching,onClick:()=>y(T=>T+1),children:"Next"})]})]})]})})]})};function Zu({label:e,value:t}){return l.jsxs("div",{className:"bg-muted/30 rounded-lg border p-3",children:[l.jsx("div",{className:"text-muted-foreground text-xs",children:e}),l.jsx("div",{className:"text-lg font-semibold",children:t})]})}function LI({job:e}){return l.jsxs(Et,{children:[l.jsx(or,{asChild:!0,children:l.jsx(se,{size:"sm",variant:"ghost",children:"Details"})}),l.jsxs(Ct,{className:"max-w-2xl",children:[l.jsx(jt,{children:l.jsxs(Rt,{children:["Job ",e.id]})}),l.jsxs("div",{className:"grid gap-3",children:[e.lastError&&l.jsxs(Ua,{children:[l.jsx(lr,{children:l.jsx(cr,{className:"text-sm",children:"Last error"})}),l.jsx(qa,{children:l.jsx("pre",{className:"overflow-auto text-xs whitespace-pre-wrap",children:e.lastError})})]}),l.jsxs(Ua,{children:[l.jsx(lr,{children:l.jsx(cr,{className:"text-sm",children:"Payload"})}),l.jsx(qa,{children:l.jsx("pre",{className:"overflow-auto text-xs whitespace-pre-wrap",children:JSON.stringify(e.payload,null,2)})})]})]}),l.jsx(Mt,{children:l.jsx(ud,{asChild:!0,children:l.jsx(se,{variant:"secondary",children:"Close"})})})]})]})}function UI({onSubmit:e,submitting:t}){const[r,i]=p.useState(!1),[s,u]=p.useState(""),[d,h]=p.useState(""),[g,y]=p.useState("{}"),[x,v]=p.useState(""),w=s&&d&&!t;async function E(){const j=g?JSON.parse(g):void 0;await e({queue:s,type:d,payload:j,run_at:x||void 0}),i(!1),u(""),h(""),y("{}"),v("")}return l.jsxs(Et,{open:r,onOpenChange:i,children:[l.jsx(or,{asChild:!0,children:l.jsxs(se,{children:[l.jsx(ro,{className:"mr-2 h-4 w-4"})," Enqueue"]})}),l.jsxs(Ct,{children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Enqueue Job"})}),l.jsxs("div",{className:"grid gap-3",children:[l.jsxs("div",{className:"grid gap-2",children:[l.jsx(Mr,{children:"Queue"}),l.jsx(Fe,{value:s,onChange:j=>u(j.target.value),placeholder:"e.g. bootstrap_bastion"})]}),l.jsxs("div",{className:"grid gap-2",children:[l.jsx(Mr,{children:"Type"}),l.jsx(Fe,{value:d,onChange:j=>h(j.target.value),placeholder:"e.g. bootstrap_bastion"})]}),l.jsxs("div",{className:"grid gap-2",children:[l.jsx(Mr,{children:"Payload (JSON)"}),l.jsx(_E,{value:g,onChange:j=>y(j.target.value),className:"min-h-[120px] font-mono text-xs"})]}),l.jsxs("div",{className:"grid gap-2",children:[l.jsx(Mr,{children:"Run at (optional)"}),l.jsx(Fe,{type:"datetime-local",value:x,onChange:j=>v(j.target.value)})]})]}),l.jsxs(Mt,{children:[l.jsx(ud,{asChild:!0,children:l.jsx(se,{variant:"secondary",children:"Cancel"})}),l.jsxs(se,{onClick:E,disabled:!w,children:[t?l.jsx(ps,{className:"mr-2 h-4 w-4 animate-spin"}):null,"Enqueue"]})]})]})]})}const EE=Oa({key:Zt().trim().min(1,"Key is required").max(120,"Max 120 chars"),value:Zt().trim().optional()}),qI=EE.partial();function FI({t:e}){const t=`${e.key}${e.value?`=${e.value}`:""}`;return l.jsxs(Ia,{variant:"secondary",className:"font-mono text-xs",children:[l.jsx(jd,{className:"mr-1 h-3 w-3"}),t]})}const $I=()=>{const[e,t]=p.useState(""),[r,i]=p.useState(!1),[s,u]=p.useState(!1),[d,h]=p.useState(null),[g,y]=p.useState(null),x=da(),v=rn({queryKey:["labels"],queryFn:()=>Pl.listLabels()}),w=_n({resolver:En(EE),defaultValues:{key:"",value:""}}),E=mt({mutationFn:C=>Pl.createLabel(C),onSuccess:async()=>{await x.invalidateQueries({queryKey:["labels"]}),w.reset(),i(!1),Ee.success("Label Created Successfully.")},onError:C=>{Ee.error(C.message??"There was an error while creating Label")}}),j=C=>{E.mutate(C)},S=_n({resolver:En(qI),defaultValues:{}}),N=mt({mutationFn:({id:C,values:T})=>Pl.updateLabel(C,T),onSuccess:async()=>{await x.invalidateQueries({queryKey:["labels"]}),S.reset(),u(!1),Ee.success("Label Updated Successfully.")},onError:C=>{Ee.error(C.message??"There was an error while updating Label")}}),D=C=>{y(C.id),S.reset({key:C.key,value:C.value}),u(!0)},A=mt({mutationFn:C=>Pl.deleteLabel(C),onSuccess:async()=>{await x.invalidateQueries({queryKey:["labels"]}),h(null),Ee.success("Label Deleted Successfully.")},onError:C=>{Ee.error(C.message??"There was an error while deleting Label")}}),O=p.useMemo(()=>{const C=v.data??[],T=e.trim().toLowerCase();return T?C.filter(U=>U.key?.toLowerCase().includes(T)||U.value?.toLowerCase().includes(T)):C},[e,v.data]);return v.isLoading?l.jsx("div",{className:"p-6",children:"Loading labels…"}):v.error?l.jsx("div",{className:"p-6 text-red-500",children:"Error loading labels."}):l.jsxs("div",{className:"space-y-4 p-6",children:[l.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[l.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Labels"}),l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsxs("div",{className:"relative",children:[l.jsx(zr,{className:"absolute top-2.5 left-2 h-4 w-4 opacity-60"}),l.jsx(Fe,{value:e,onChange:C=>t(C.target.value),placeholder:"Search labels",className:"w-64 pl-8"})]}),l.jsxs(Et,{open:r,onOpenChange:i,children:[l.jsx(or,{asChild:!0,children:l.jsxs(se,{onClick:()=>i(!0),children:[l.jsx(ro,{className:"mr-2 h-4 w-4"}),"Create Label"]})}),l.jsxs(Ct,{className:"sm:max-w-lg",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Create Label"})}),l.jsx(Cn,{...w,children:l.jsxs("form",{className:"space-y-4",onSubmit:w.handleSubmit(j),children:[l.jsx($e,{control:w.control,name:"key",render:({field:C})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Key"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"environment",...C})}),l.jsx(Be,{})]})}),l.jsx($e,{control:w.control,name:"value",render:({field:C})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Value"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"dev",...C})}),l.jsx(Be,{})]})}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{type:"button",variant:"outline",onClick:()=>i(!1),children:"Cancel"}),l.jsx(se,{type:"submit",disabled:w.formState.isSubmitting,children:w.formState.isSubmitting?"Creating…":"Create"})]})]})})]})]})]})]}),l.jsx("div",{className:"bg-background overflow-hidden rounded-2xl border shadow-sm",children:l.jsx("div",{className:"overflow-x-auto",children:l.jsxs(la,{children:[l.jsx(ca,{children:l.jsxs(et,{children:[l.jsx(ze,{children:"Key"}),l.jsx(ze,{children:"Value"}),l.jsx(ze,{children:"Label"}),l.jsx(ze,{className:"w-[180px] text-right",children:"Actions"})]})}),l.jsxs(ua,{children:[O.map(C=>l.jsxs(et,{children:[l.jsx(_e,{children:C.key}),l.jsx(_e,{children:C.value}),l.jsx(_e,{children:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(FI,{t:C}),l.jsx("code",{className:"text-muted-foreground text-xs",children:Gi(C.id,6)})]})}),l.jsx(_e,{children:l.jsxs("div",{className:"flex justify-end gap-2",children:[l.jsxs(se,{variant:"outline",size:"sm",onClick:()=>D(C),children:[l.jsx(Cd,{className:"mr-2 h-4 w-4"})," Edit"]}),l.jsx(se,{variant:"destructive",size:"sm",onClick:()=>h(C.id),disabled:A.isPending&&d===C.id,children:A.isPending&&d===C.id?"Deleting…":"Delete"})]})})]},C.id)),O.length===0&&l.jsx(et,{children:l.jsxs(_e,{colSpan:4,className:"text-muted-foreground py-10 text-center",children:[l.jsx(Fp,{className:"mx-auto mb-2 h-6 w-6 opacity-60"}),"No labels match your search."]})})]})]})})}),l.jsx(Et,{open:s,onOpenChange:u,children:l.jsxs(Ct,{className:"sm:max-w-lg",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Edit Label"})}),l.jsx(Cn,{...S,children:l.jsxs("form",{className:"space-y-4",onSubmit:S.handleSubmit(C=>{g&&N.mutate({id:g,values:C})}),children:[l.jsx($e,{control:S.control,name:"key",render:({field:C})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Key"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"dedicated",...C})}),l.jsx(Be,{})]})}),l.jsx($e,{control:S.control,name:"value",render:({field:C})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Value (optional)"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"gpu",...C})}),l.jsx(Be,{})]})}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{type:"button",variant:"outline",onClick:()=>u(!1),children:"Cancel"}),l.jsx(se,{type:"submit",disabled:N.isPending,children:N.isPending?"Saving…":"Save changes"})]})]})})]})}),l.jsx(Et,{open:!!d,onOpenChange:C=>!C&&h(null),children:l.jsxs(Ct,{className:"sm:max-w-md",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Delete label"})}),l.jsx("p",{className:"text-muted-foreground text-sm",children:"This action cannot be undone. Are you sure you want to delete this label?"}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{variant:"outline",onClick:()=>h(null),children:"Cancel"}),l.jsx(se,{variant:"destructive",onClick:()=>d&&A.mutate(d),disabled:A.isPending,children:A.isPending?"Deleting…":"Delete"})]})]})})]})};var VI=Symbol("radix.slottable");function HI(e){const t=({children:r})=>l.jsx(l.Fragment,{children:r});return t.displayName=`${e}.Slottable`,t.__radixId=VI,t}var CE="AlertDialog",[BI]=ur(CE,[FS]),Kr=FS(),jE=e=>{const{__scopeAlertDialog:t,...r}=e,i=Kr(t);return l.jsx(Dd,{...i,...r,modal:!0})};jE.displayName=CE;var GI="AlertDialogTrigger",RE=p.forwardRef((e,t)=>{const{__scopeAlertDialog:r,...i}=e,s=Kr(r);return l.jsx(r1,{...s,...i,ref:t})});RE.displayName=GI;var XI="AlertDialogPortal",OE=e=>{const{__scopeAlertDialog:t,...r}=e,i=Kr(t);return l.jsx(Md,{...i,...r})};OE.displayName=XI;var ZI="AlertDialogOverlay",NE=p.forwardRef((e,t)=>{const{__scopeAlertDialog:r,...i}=e,s=Kr(r);return l.jsx(zd,{...s,...i,ref:t})});NE.displayName=ZI;var ms="AlertDialogContent",[YI,QI]=BI(ms),JI=HI("AlertDialogContent"),AE=p.forwardRef((e,t)=>{const{__scopeAlertDialog:r,children:i,...s}=e,u=Kr(r),d=p.useRef(null),h=dt(t,d),g=p.useRef(null);return l.jsx(sz,{contentName:ms,titleName:TE,docsSlug:"alert-dialog",children:l.jsx(YI,{scope:r,cancelRef:g,children:l.jsxs(kd,{role:"alertdialog",...u,...s,ref:h,onOpenAutoFocus:Ce(s.onOpenAutoFocus,y=>{y.preventDefault(),g.current?.focus({preventScroll:!0})}),onPointerDownOutside:y=>y.preventDefault(),onInteractOutside:y=>y.preventDefault(),children:[l.jsx(JI,{children:i}),l.jsx(eL,{contentRef:d})]})})})});AE.displayName=ms;var TE="AlertDialogTitle",DE=p.forwardRef((e,t)=>{const{__scopeAlertDialog:r,...i}=e,s=Kr(r);return l.jsx(Qp,{...s,...i,ref:t})});DE.displayName=TE;var ME="AlertDialogDescription",zE=p.forwardRef((e,t)=>{const{__scopeAlertDialog:r,...i}=e,s=Kr(r);return l.jsx(Jp,{...s,...i,ref:t})});zE.displayName=ME;var WI="AlertDialogAction",kE=p.forwardRef((e,t)=>{const{__scopeAlertDialog:r,...i}=e,s=Kr(r);return l.jsx(nc,{...s,...i,ref:t})});kE.displayName=WI;var PE="AlertDialogCancel",KE=p.forwardRef((e,t)=>{const{__scopeAlertDialog:r,...i}=e,{cancelRef:s}=QI(PE,r),u=Kr(r),d=dt(t,s);return l.jsx(nc,{...u,...i,ref:d})});KE.displayName=PE;var eL=({contentRef:e})=>{const t=`\`${ms}\` requires a description for the component to be accessible for screen reader users. - -You can add a description to the \`${ms}\` by passing a \`${ME}\` component as a child, which also benefits sighted users by adding visible context to the dialog. - -Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${ms}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component. - -For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;return p.useEffect(()=>{document.getElementById(e.current?.getAttribute("aria-describedby"))||console.warn(t)},[t,e]),null},tL=jE,nL=RE,aL=OE,rL=NE,iL=AE,oL=kE,sL=KE,lL=DE,cL=zE;function uL({...e}){return l.jsx(tL,{"data-slot":"alert-dialog",...e})}function dL({...e}){return l.jsx(nL,{"data-slot":"alert-dialog-trigger",...e})}function fL({...e}){return l.jsx(aL,{"data-slot":"alert-dialog-portal",...e})}function hL({className:e,...t}){return l.jsx(rL,{"data-slot":"alert-dialog-overlay",className:de("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",e),...t})}function mL({className:e,...t}){return l.jsxs(fL,{children:[l.jsx(hL,{}),l.jsx(iL,{"data-slot":"alert-dialog-content",className:de("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",e),...t})]})}function pL({className:e,...t}){return l.jsx("div",{"data-slot":"alert-dialog-header",className:de("flex flex-col gap-2 text-center sm:text-left",e),...t})}function gL({className:e,...t}){return l.jsx("div",{"data-slot":"alert-dialog-footer",className:de("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",e),...t})}function yL({className:e,...t}){return l.jsx(lL,{"data-slot":"alert-dialog-title",className:de("text-lg font-semibold",e),...t})}function vL({className:e,...t}){return l.jsx(cL,{"data-slot":"alert-dialog-description",className:de("text-muted-foreground text-sm",e),...t})}function xL({className:e,...t}){return l.jsx(oL,{className:de(Gp(),e),...t})}function bL({className:e,...t}){return l.jsx(sL,{className:de(Gp({variant:"outline"}),e),...t})}const wL=Rd(),SL={create:e=>Pe(async()=>wL.createOrg({body:e}))},_L=Oa({display_name:Zt().min(2,"Too short").max(100,"Too long")}),EL=Oa({name:Zt().min(2,"Too short").max(100,"Too long"),expires_in_hours:$_().min(1).max(43800)}),CL=Oa({name:Zt().min(2,"Too short").max(100,"Too long"),domain:Zt().trim().toLowerCase().optional().or(V_("")).refine(e=>!e||/^[a-z0-9.-]+\.[a-z]{2,}$/i.test(e),"Invalid domain (e.g. example.com)")}),jL=()=>{const e=da(),t=rn({queryKey:["me"],queryFn:()=>Vi.getMe()}),r=_n({resolver:En(_L),defaultValues:{display_name:""},values:t.data?{display_name:t.data.display_name??""}:void 0}),i=mt({mutationFn:O=>Vi.updateMe(O),onSuccess:()=>{e.invalidateQueries({queryKey:["me"]}),Ee.success("Profile updated")},onError:O=>Ee.error(O?.message??"Update failed")}),s=rn({queryKey:["me","api-keys"],queryFn:()=>Vi.listKeys()}),[u,d]=p.useState(!1),[h,g]=p.useState(null),y=_n({resolver:En(EL),defaultValues:{name:"",expires_in_hours:720}}),x=mt({mutationFn:O=>Vi.createKey({name:O.name,expires_in_hours:O.expires_in_hours}),onSuccess:O=>{g(O),d(!1),e.invalidateQueries({queryKey:["me","api-keys"]}),Ee.success("API key created")},onError:O=>Ee.error(O?.message??"Failed to create key")}),[v,w]=p.useState(null),E=mt({mutationFn:O=>Vi.deleteKey(O),onSuccess:()=>{e.invalidateQueries({queryKey:["me","api-keys"]}),w(null),Ee.success("Key deleted")},onError:O=>Ee.error(O?.message??"Failed to delete key")}),j=p.useMemo(()=>t.data?.emails?.find(O=>O.is_primary)?.email??t.data?.primary_email??"",[t.data]),[S,N]=p.useState(!1),D=_n({resolver:En(CL),defaultValues:{name:"",domain:""}}),A=mt({mutationFn:O=>SL.create({name:O.name.trim(),domain:O.domain?.trim()?O.domain.trim().toLowerCase():void 0}),onSuccess:()=>{N(!1),D.reset(),e.invalidateQueries({queryKey:["me"]}),Ee.success("Organization created")},onError:O=>Ee.error(O?.message??"Failed to create organization")});return t.isLoading?l.jsx("div",{className:"p-6",children:"Loading…"}):t.error?l.jsx("div",{className:"text-destructive p-6",children:"Failed to load profile"}):l.jsxs("div",{className:"space-y-6 p-6",children:[l.jsxs(Ua,{children:[l.jsxs(lr,{children:[l.jsx(cr,{children:"Profile"}),l.jsx(jp,{children:"Manage your personal information."})]}),l.jsx(qa,{children:l.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{children:[l.jsx(Mr,{children:"Email"}),l.jsx("div",{className:"text-muted-foreground mt-1 text-sm",children:j||"—"})]}),l.jsxs("div",{children:[l.jsx(Mr,{children:"ID"}),l.jsx("div",{className:"text-muted-foreground mt-1 text-sm",children:t.data?.id||"—"}),l.jsx("div",{className:"text-muted-foreground mt-1 text-sm",children:"Share this ID with the organization owner of the Organization to join"})]}),l.jsx(Cn,{...r,children:l.jsxs("form",{className:"space-y-4",onSubmit:r.handleSubmit(O=>i.mutate(O)),children:[l.jsx($e,{control:r.control,name:"display_name",render:({field:O})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Display name"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"Your name",...O})}),l.jsx(Be,{})]})}),l.jsx(se,{type:"submit",disabled:i.isPending,children:"Save"})]})})]}),l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsx(Mr,{children:"Organizations"}),l.jsxs(Et,{open:S,onOpenChange:N,children:[l.jsx(or,{asChild:!0,children:l.jsx(se,{size:"sm",children:"New Organization"})}),l.jsxs(Ct,{children:[l.jsxs(jt,{children:[l.jsx(Rt,{children:"Create organization"}),l.jsx(Im,{children:"Give it a name, and optionally assign your company domain."})]}),l.jsx(Cn,{...D,children:l.jsxs("form",{className:"space-y-4",onSubmit:D.handleSubmit(O=>A.mutate(O)),children:[l.jsx($e,{control:D.control,name:"name",render:({field:O})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Name"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"Acme Inc.",...O})}),l.jsx(Be,{})]})}),l.jsx($e,{control:D.control,name:"domain",render:({field:O})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Domain (optional)"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"acme.com",...O})}),l.jsx(Be,{})]})}),l.jsxs(Mt,{children:[l.jsx(ud,{asChild:!0,children:l.jsx(se,{type:"button",variant:"outline",children:"Cancel"})}),l.jsx(se,{type:"submit",disabled:A.isPending,children:"Create"})]})]})})]})]})]}),l.jsx("div",{className:"rounded-md border",children:l.jsxs(la,{children:[l.jsx(ca,{children:l.jsxs(et,{children:[l.jsx(ze,{children:"Name"}),l.jsx(ze,{children:"Domain"})]})}),l.jsxs(ua,{children:[t.data?.organizations?.map(O=>l.jsxs(et,{children:[l.jsx(_e,{children:O.name}),l.jsx(_e,{children:O.domain??"—"})]},O.id)),(!t.data?.organizations||t.data.organizations.length===0)&&l.jsx(et,{children:l.jsx(_e,{colSpan:2,className:"text-muted-foreground",children:"No organizations"})})]})]})})]})]})})]}),l.jsx(Jk,{}),l.jsxs(Ua,{children:[l.jsxs(lr,{className:"flex flex-row items-center justify-between space-y-0",children:[l.jsxs("div",{children:[l.jsx(cr,{children:"User API Keys"}),l.jsx(jp,{children:"Personal keys for API access."})]}),l.jsxs(Et,{open:u,onOpenChange:d,children:[l.jsx(or,{asChild:!0,children:l.jsx(se,{children:"New Key"})}),l.jsxs(Ct,{children:[l.jsxs(jt,{children:[l.jsx(Rt,{children:"Create API Key"}),l.jsx(Im,{children:"Give it a label and expiry."})]}),l.jsx(Cn,{...y,children:l.jsxs("form",{className:"space-y-4",onSubmit:y.handleSubmit(O=>x.mutate(O)),children:[l.jsx($e,{control:y.control,name:"name",render:({field:O})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Label"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"CI script, local dev, ...",...O})}),l.jsx(Be,{})]})}),l.jsx($e,{control:y.control,name:"expires_in_hours",render:({field:O})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Expires in hours"}),l.jsx(Xe,{children:l.jsx(Fe,{type:"number",inputMode:"numeric",step:1,min:1,placeholder:"e.g. 720",...O,onChange:C=>O.onChange(C.target.value===""?"":Number(C.target.value))})}),l.jsx(Be,{})]})}),l.jsxs(Mt,{children:[l.jsx(ud,{asChild:!0,children:l.jsx(se,{type:"button",variant:"outline",children:"Cancel"})}),l.jsx(se,{type:"submit",disabled:x.isPending,children:"Create"})]})]})})]})]})]}),l.jsx(qa,{children:l.jsx("div",{className:"overflow-x-auto rounded-md border",children:l.jsxs(la,{className:"text-sm",children:[l.jsx(MK,{children:"Your user-scoped API keys."}),l.jsx(ca,{children:l.jsxs(et,{children:[l.jsx(ze,{children:"Label"}),l.jsx(ze,{children:"Created"}),l.jsx(ze,{children:"Expires"}),l.jsx(ze,{children:"Last used"}),l.jsx(ze,{className:"w-24"})]})}),l.jsxs(ua,{children:[s.data?.map(O=>l.jsxs(et,{children:[l.jsx(_e,{children:O.name??"—"}),l.jsx(_e,{children:new Date(O.created_at).toLocaleString()}),l.jsx(_e,{children:O.expires_at?new Date(O.expires_at).toLocaleString():"—"}),l.jsx(_e,{children:O.last_used_at?new Date(O.last_used_at).toLocaleString():"—"}),l.jsx(_e,{className:"text-right",children:l.jsxs(uL,{open:v===O.id,onOpenChange:C=>!C&&w(null),children:[l.jsx(dL,{asChild:!0,children:l.jsx(se,{variant:"destructive",size:"sm",onClick:()=>w(O.id),children:"Delete"})}),l.jsxs(mL,{children:[l.jsxs(pL,{children:[l.jsx(yL,{children:"Delete this key?"}),l.jsx(vL,{children:"This action cannot be undone. Requests using this key will stop working."})]}),l.jsxs(gL,{children:[l.jsx(bL,{children:"Cancel"}),l.jsx(xL,{onClick:()=>E.mutate(O.id),children:"Delete"})]})]})]})})]},O.id)),(!s.data||s.data.length===0)&&l.jsx(et,{children:l.jsx(_e,{colSpan:5,className:"text-muted-foreground",children:"No API keys yet."})})]})]})})})]}),l.jsx(Et,{open:!!h,onOpenChange:O=>!O&&g(null),children:l.jsxs(Ct,{children:[l.jsxs(jt,{children:[l.jsx(Rt,{children:"Copy your new API key"}),l.jsx(Im,{children:"This is only shown once. Store it securely."})]}),l.jsx("div",{className:"rounded-md border p-3 font-mono text-sm break-all",children:h?.plain??"—"}),l.jsxs("div",{className:"flex justify-end gap-2",children:[l.jsx(se,{variant:"outline",onClick:()=>{const O=h?.plain;O&&(navigator.clipboard.writeText(O),Ee.success("Copied"))},children:"Copy"}),l.jsx(se,{onClick:()=>g(null),children:"Done"})]})]})})]})},bn=xT(),RL=(e,t)=>e?e===t:!0,_a={listNodePools:()=>Pe(async()=>await bn.listNodePools({})),createNodePool:e=>Pe(async()=>await bn.createNodePool({body:e})),getNodePool:e=>Pe(async()=>await bn.getNodePool({id:e})),deleteNodePool:e=>Pe(async()=>{await bn.deleteNodePool({id:e})}),updateNodePool:(e,t)=>Pe(async()=>await bn.updateNodePool({id:e,body:t})),listNodePoolServers:e=>Pe(async()=>await bn.listNodePoolServers({id:e})),attachNodePoolServer:(e,t)=>Pe(async()=>await bn.attachNodePoolServers({id:e,body:t})),detachNodePoolServers:(e,t)=>Pe(async()=>await bn.detachNodePoolServer({id:e,serverId:t})),listNodePoolTaints:e=>Pe(async()=>await bn.listNodePoolTaints({id:e})),attachNodePoolTaints:(e,t)=>Pe(async()=>await bn.attachNodePoolTaints({id:e,body:t})),detachNodePoolTaints:(e,t)=>Pe(async()=>await bn.detachNodePoolTaint({id:e,taintId:t})),listNodePoolLabels:e=>Pe(async()=>await bn.listNodePoolLabels({id:e})),attachNodePoolLabels:(e,t)=>Pe(async()=>await bn.attachNodePoolLabels({id:e,body:t})),detachNodePoolLabels:(e,t)=>Pe(async()=>await bn.detachNodePoolLabel({id:e,labelId:t})),listNodePoolAnnotations:e=>Pe(async()=>await bn.listNodePoolAnnotations({id:e})),attachNodePoolAnnotations:(e,t)=>Pe(async()=>await bn.attachNodePoolAnnotations({id:e,body:t})),detachNodePoolAnnotations:(e,t)=>Pe(async()=>await bn.detachNodePoolAnnotation({id:e,annotationId:t}))},Nl=mT(),Ll={listServers:()=>Pe(async()=>await Nl.listServers()),createServer:e=>Pe(async()=>await Nl.createServer({body:e})),getServer:e=>Pe(async()=>await Nl.getServer({id:e})),updateServer:(e,t)=>Pe(async()=>await Nl.updateServer({id:e,body:t})),deleteServer:e=>Pe(async()=>{await Nl.deleteServer({id:e})})},Al=pT(),Ul={listTaints:()=>Pe(async()=>await Al.listTaints()),createTaint:e=>Pe(async()=>await Al.createTaint({body:e})),getTaint:e=>Pe(async()=>await Al.getTaint({id:e})),deleteTaint:e=>Pe(async()=>{await Al.deleteTaint({id:e})}),updateTaint:(e,t)=>Pe(async()=>await Al.updateTaint({id:e,body:t}))};var Gm="rovingFocusGroup.onEntryFocus",OL={bubbles:!1,cancelable:!0},uc="RovingFocusGroup",[Dp,IE,NL]=Ng(uc),[AL,LE]=ur(uc,[NL]),[TL,DL]=AL(uc),UE=p.forwardRef((e,t)=>l.jsx(Dp.Provider,{scope:e.__scopeRovingFocusGroup,children:l.jsx(Dp.Slot,{scope:e.__scopeRovingFocusGroup,children:l.jsx(ML,{...e,ref:t})})}));UE.displayName=uc;var ML=p.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:r,orientation:i,loop:s=!1,dir:u,currentTabStopId:d,defaultCurrentTabStopId:h,onCurrentTabStopIdChange:g,onEntryFocus:y,preventScrollOnEntryFocus:x=!1,...v}=e,w=p.useRef(null),E=dt(t,w),j=Ag(u),[S,N]=Yi({prop:d,defaultProp:h??null,onChange:g,caller:uc}),[D,A]=p.useState(!1),O=Fa(y),C=IE(r),T=p.useRef(!1),[U,L]=p.useState(0);return p.useEffect(()=>{const V=w.current;if(V)return V.addEventListener(Gm,O),()=>V.removeEventListener(Gm,O)},[O]),l.jsx(TL,{scope:r,orientation:i,dir:j,loop:s,currentTabStopId:S,onItemFocus:p.useCallback(V=>N(V),[N]),onItemShiftTab:p.useCallback(()=>A(!0),[]),onFocusableItemAdd:p.useCallback(()=>L(V=>V+1),[]),onFocusableItemRemove:p.useCallback(()=>L(V=>V-1),[]),children:l.jsx(rt.div,{tabIndex:D||U===0?-1:0,"data-orientation":i,...v,ref:E,style:{outline:"none",...e.style},onMouseDown:Ce(e.onMouseDown,()=>{T.current=!0}),onFocus:Ce(e.onFocus,V=>{const fe=!T.current;if(V.target===V.currentTarget&&fe&&!D){const ge=new CustomEvent(Gm,OL);if(V.currentTarget.dispatchEvent(ge),!ge.defaultPrevented){const pe=C().filter(R=>R.focusable),ae=pe.find(R=>R.active),le=pe.find(R=>R.id===S),be=[ae,le,...pe].filter(Boolean).map(R=>R.ref.current);$E(be,x)}}T.current=!1}),onBlur:Ce(e.onBlur,()=>A(!1))})})}),qE="RovingFocusGroupItem",FE=p.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:r,focusable:i=!0,active:s=!1,tabStopId:u,children:d,...h}=e,g=Sn(),y=u||g,x=DL(qE,r),v=x.currentTabStopId===y,w=IE(r),{onFocusableItemAdd:E,onFocusableItemRemove:j,currentTabStopId:S}=x;return p.useEffect(()=>{if(i)return E(),()=>j()},[i,E,j]),l.jsx(Dp.ItemSlot,{scope:r,id:y,focusable:i,active:s,children:l.jsx(rt.span,{tabIndex:v?0:-1,"data-orientation":x.orientation,...h,ref:t,onMouseDown:Ce(e.onMouseDown,N=>{i?x.onItemFocus(y):N.preventDefault()}),onFocus:Ce(e.onFocus,()=>x.onItemFocus(y)),onKeyDown:Ce(e.onKeyDown,N=>{if(N.key==="Tab"&&N.shiftKey){x.onItemShiftTab();return}if(N.target!==N.currentTarget)return;const D=PL(N,x.orientation,x.dir);if(D!==void 0){if(N.metaKey||N.ctrlKey||N.altKey||N.shiftKey)return;N.preventDefault();let O=w().filter(C=>C.focusable).map(C=>C.ref.current);if(D==="last")O.reverse();else if(D==="prev"||D==="next"){D==="prev"&&O.reverse();const C=O.indexOf(N.currentTarget);O=x.loop?KL(O,C+1):O.slice(C+1)}setTimeout(()=>$E(O))}}),children:typeof d=="function"?d({isCurrentTabStop:v,hasTabStop:S!=null}):d})})});FE.displayName=qE;var zL={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function kL(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function PL(e,t,r){const i=kL(e.key,r);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(i))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(i)))return zL[i]}function $E(e,t=!1){const r=document.activeElement;for(const i of e)if(i===r||(i.focus({preventScroll:t}),document.activeElement!==r))return}function KL(e,t){return e.map((r,i)=>e[(t+i)%e.length])}var IL=UE,LL=FE;function UL(e){const t=qL(e),r=p.forwardRef((i,s)=>{const{children:u,...d}=i,h=p.Children.toArray(u),g=h.find($L);if(g){const y=g.props.children,x=h.map(v=>v===g?p.Children.count(y)>1?p.Children.only(null):p.isValidElement(y)?y.props.children:null:v);return l.jsx(t,{...d,ref:s,children:p.isValidElement(y)?p.cloneElement(y,void 0,x):null})}return l.jsx(t,{...d,ref:s,children:u})});return r.displayName=`${e}.Slot`,r}function qL(e){const t=p.forwardRef((r,i)=>{const{children:s,...u}=r;if(p.isValidElement(s)){const d=HL(s),h=VL(u,s.props);return s.type!==p.Fragment&&(h.ref=i?Mn(i,d):d),p.cloneElement(s,h)}return p.Children.count(s)>1?p.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var FL=Symbol("radix.slottable");function $L(e){return p.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===FL}function VL(e,t){const r={...t};for(const i in t){const s=e[i],u=t[i];/^on[A-Z]/.test(i)?s&&u?r[i]=(...h)=>{const g=u(...h);return s(...h),g}:s&&(r[i]=s):i==="style"?r[i]={...s,...u}:i==="className"&&(r[i]=[s,u].filter(Boolean).join(" "))}return{...e,...r}}function HL(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}var Mp=["Enter"," "],BL=["ArrowDown","PageUp","Home"],VE=["ArrowUp","PageDown","End"],GL=[...BL,...VE],XL={ltr:[...Mp,"ArrowRight"],rtl:[...Mp,"ArrowLeft"]},ZL={ltr:["ArrowLeft"],rtl:["ArrowRight"]},dc="Menu",[Ql,YL,QL]=Ng(dc),[so,HE]=ur(dc,[QL,xi,LE]),of=xi(),BE=LE(),[JL,lo]=so(dc),[WL,fc]=so(dc),GE=e=>{const{__scopeMenu:t,open:r=!1,children:i,dir:s,onOpenChange:u,modal:d=!0}=e,h=of(t),[g,y]=p.useState(null),x=p.useRef(!1),v=Fa(u),w=Ag(s);return p.useEffect(()=>{const E=()=>{x.current=!0,document.addEventListener("pointerdown",j,{capture:!0,once:!0}),document.addEventListener("pointermove",j,{capture:!0,once:!0})},j=()=>x.current=!1;return document.addEventListener("keydown",E,{capture:!0}),()=>{document.removeEventListener("keydown",E,{capture:!0}),document.removeEventListener("pointerdown",j,{capture:!0}),document.removeEventListener("pointermove",j,{capture:!0})}},[]),l.jsx(qd,{...h,children:l.jsx(JL,{scope:t,open:r,onOpenChange:v,content:g,onContentChange:y,children:l.jsx(WL,{scope:t,onClose:p.useCallback(()=>v(!1),[v]),isUsingKeyboardRef:x,dir:w,modal:d,children:i})})})};GE.displayName=dc;var eU="MenuAnchor",Dg=p.forwardRef((e,t)=>{const{__scopeMenu:r,...i}=e,s=of(r);return l.jsx(ic,{...s,...i,ref:t})});Dg.displayName=eU;var Mg="MenuPortal",[tU,XE]=so(Mg,{forceMount:void 0}),ZE=e=>{const{__scopeMenu:t,forceMount:r,children:i,container:s}=e,u=lo(Mg,t);return l.jsx(tU,{scope:t,forceMount:r,children:l.jsx(ja,{present:r||u.open,children:l.jsx(Cs,{asChild:!0,container:s,children:i})})})};ZE.displayName=Mg;var Ca="MenuContent",[nU,zg]=so(Ca),YE=p.forwardRef((e,t)=>{const r=XE(Ca,e.__scopeMenu),{forceMount:i=r.forceMount,...s}=e,u=lo(Ca,e.__scopeMenu),d=fc(Ca,e.__scopeMenu);return l.jsx(Ql.Provider,{scope:e.__scopeMenu,children:l.jsx(ja,{present:i||u.open,children:l.jsx(Ql.Slot,{scope:e.__scopeMenu,children:d.modal?l.jsx(aU,{...s,ref:t}):l.jsx(rU,{...s,ref:t})})})})}),aU=p.forwardRef((e,t)=>{const r=lo(Ca,e.__scopeMenu),i=p.useRef(null),s=dt(t,i);return p.useEffect(()=>{const u=i.current;if(u)return Ad(u)},[]),l.jsx(kg,{...e,ref:s,trapFocus:r.open,disableOutsidePointerEvents:r.open,disableOutsideScroll:!0,onFocusOutside:Ce(e.onFocusOutside,u=>u.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>r.onOpenChange(!1)})}),rU=p.forwardRef((e,t)=>{const r=lo(Ca,e.__scopeMenu);return l.jsx(kg,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>r.onOpenChange(!1)})}),iU=UL("MenuContent.ScrollLock"),kg=p.forwardRef((e,t)=>{const{__scopeMenu:r,loop:i=!1,trapFocus:s,onOpenAutoFocus:u,onCloseAutoFocus:d,disableOutsidePointerEvents:h,onEntryFocus:g,onEscapeKeyDown:y,onPointerDownOutside:x,onFocusOutside:v,onInteractOutside:w,onDismiss:E,disableOutsideScroll:j,...S}=e,N=lo(Ca,r),D=fc(Ca,r),A=of(r),O=BE(r),C=YL(r),[T,U]=p.useState(null),L=p.useRef(null),V=dt(t,L,N.onContentChange),fe=p.useRef(0),ge=p.useRef(""),pe=p.useRef(0),ae=p.useRef(null),le=p.useRef("right"),he=p.useRef(0),be=j?tc:p.Fragment,R=j?{as:iU,allowPinchZoom:!0}:void 0,P=ee=>{const me=ge.current+ee,Re=C().filter(W=>!W.disabled),G=document.activeElement,Y=Re.find(W=>W.ref.current===G)?.textValue,ie=Re.map(W=>W.textValue),oe=yU(ie,me,Y),ve=Re.find(W=>W.textValue===oe)?.ref.current;(function W(xe){ge.current=xe,window.clearTimeout(fe.current),xe!==""&&(fe.current=window.setTimeout(()=>W(""),1e3))})(me),ve&&setTimeout(()=>ve.focus())};p.useEffect(()=>()=>window.clearTimeout(fe.current),[]),Od();const I=p.useCallback(ee=>le.current===ae.current?.side&&xU(ee,ae.current?.area),[]);return l.jsx(nU,{scope:r,searchRef:ge,onItemEnter:p.useCallback(ee=>{I(ee)&&ee.preventDefault()},[I]),onItemLeave:p.useCallback(ee=>{I(ee)||(L.current?.focus(),U(null))},[I]),onTriggerLeave:p.useCallback(ee=>{I(ee)&&ee.preventDefault()},[I]),pointerGraceTimerRef:pe,onPointerGraceIntentChange:p.useCallback(ee=>{ae.current=ee},[]),children:l.jsx(be,{...R,children:l.jsx(ec,{asChild:!0,trapped:s,onMountAutoFocus:Ce(u,ee=>{ee.preventDefault(),L.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:d,children:l.jsx(Es,{asChild:!0,disableOutsidePointerEvents:h,onEscapeKeyDown:y,onPointerDownOutside:x,onFocusOutside:v,onInteractOutside:w,onDismiss:E,children:l.jsx(IL,{asChild:!0,...O,dir:D.dir,orientation:"vertical",loop:i,currentTabStopId:T,onCurrentTabStopIdChange:U,onEntryFocus:Ce(g,ee=>{D.isUsingKeyboardRef.current||ee.preventDefault()}),preventScrollOnEntryFocus:!0,children:l.jsx(Fd,{role:"menu","aria-orientation":"vertical","data-state":fC(N.open),"data-radix-menu-content":"",dir:D.dir,...A,...S,ref:V,style:{outline:"none",...S.style},onKeyDown:Ce(S.onKeyDown,ee=>{const Re=ee.target.closest("[data-radix-menu-content]")===ee.currentTarget,G=ee.ctrlKey||ee.altKey||ee.metaKey,Y=ee.key.length===1;Re&&(ee.key==="Tab"&&ee.preventDefault(),!G&&Y&&P(ee.key));const ie=L.current;if(ee.target!==ie||!GL.includes(ee.key))return;ee.preventDefault();const ve=C().filter(W=>!W.disabled).map(W=>W.ref.current);VE.includes(ee.key)&&ve.reverse(),pU(ve)}),onBlur:Ce(e.onBlur,ee=>{ee.currentTarget.contains(ee.target)||(window.clearTimeout(fe.current),ge.current="")}),onPointerMove:Ce(e.onPointerMove,Jl(ee=>{const me=ee.target,Re=he.current!==ee.clientX;if(ee.currentTarget.contains(me)&&Re){const G=ee.clientX>he.current?"right":"left";le.current=G,he.current=ee.clientX}}))})})})})})})});YE.displayName=Ca;var oU="MenuGroup",Pg=p.forwardRef((e,t)=>{const{__scopeMenu:r,...i}=e;return l.jsx(rt.div,{role:"group",...i,ref:t})});Pg.displayName=oU;var sU="MenuLabel",QE=p.forwardRef((e,t)=>{const{__scopeMenu:r,...i}=e;return l.jsx(rt.div,{...i,ref:t})});QE.displayName=sU;var Sd="MenuItem",M0="menu.itemSelect",sf=p.forwardRef((e,t)=>{const{disabled:r=!1,onSelect:i,...s}=e,u=p.useRef(null),d=fc(Sd,e.__scopeMenu),h=zg(Sd,e.__scopeMenu),g=dt(t,u),y=p.useRef(!1),x=()=>{const v=u.current;if(!r&&v){const w=new CustomEvent(M0,{bubbles:!0,cancelable:!0});v.addEventListener(M0,E=>i?.(E),{once:!0}),NS(v,w),w.defaultPrevented?y.current=!1:d.onClose()}};return l.jsx(JE,{...s,ref:g,disabled:r,onClick:Ce(e.onClick,x),onPointerDown:v=>{e.onPointerDown?.(v),y.current=!0},onPointerUp:Ce(e.onPointerUp,v=>{y.current||v.currentTarget?.click()}),onKeyDown:Ce(e.onKeyDown,v=>{const w=h.searchRef.current!=="";r||w&&v.key===" "||Mp.includes(v.key)&&(v.currentTarget.click(),v.preventDefault())})})});sf.displayName=Sd;var JE=p.forwardRef((e,t)=>{const{__scopeMenu:r,disabled:i=!1,textValue:s,...u}=e,d=zg(Sd,r),h=BE(r),g=p.useRef(null),y=dt(t,g),[x,v]=p.useState(!1),[w,E]=p.useState("");return p.useEffect(()=>{const j=g.current;j&&E((j.textContent??"").trim())},[u.children]),l.jsx(Ql.ItemSlot,{scope:r,disabled:i,textValue:s??w,children:l.jsx(LL,{asChild:!0,...h,focusable:!i,children:l.jsx(rt.div,{role:"menuitem","data-highlighted":x?"":void 0,"aria-disabled":i||void 0,"data-disabled":i?"":void 0,...u,ref:y,onPointerMove:Ce(e.onPointerMove,Jl(j=>{i?d.onItemLeave(j):(d.onItemEnter(j),j.defaultPrevented||j.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:Ce(e.onPointerLeave,Jl(j=>d.onItemLeave(j))),onFocus:Ce(e.onFocus,()=>v(!0)),onBlur:Ce(e.onBlur,()=>v(!1))})})})}),lU="MenuCheckboxItem",WE=p.forwardRef((e,t)=>{const{checked:r=!1,onCheckedChange:i,...s}=e;return l.jsx(rC,{scope:e.__scopeMenu,checked:r,children:l.jsx(sf,{role:"menuitemcheckbox","aria-checked":_d(r)?"mixed":r,...s,ref:t,"data-state":Ig(r),onSelect:Ce(s.onSelect,()=>i?.(_d(r)?!0:!r),{checkForDefaultPrevented:!1})})})});WE.displayName=lU;var eC="MenuRadioGroup",[cU,uU]=so(eC,{value:void 0,onValueChange:()=>{}}),tC=p.forwardRef((e,t)=>{const{value:r,onValueChange:i,...s}=e,u=Fa(i);return l.jsx(cU,{scope:e.__scopeMenu,value:r,onValueChange:u,children:l.jsx(Pg,{...s,ref:t})})});tC.displayName=eC;var nC="MenuRadioItem",aC=p.forwardRef((e,t)=>{const{value:r,...i}=e,s=uU(nC,e.__scopeMenu),u=r===s.value;return l.jsx(rC,{scope:e.__scopeMenu,checked:u,children:l.jsx(sf,{role:"menuitemradio","aria-checked":u,...i,ref:t,"data-state":Ig(u),onSelect:Ce(i.onSelect,()=>s.onValueChange?.(r),{checkForDefaultPrevented:!1})})})});aC.displayName=nC;var Kg="MenuItemIndicator",[rC,dU]=so(Kg,{checked:!1}),iC=p.forwardRef((e,t)=>{const{__scopeMenu:r,forceMount:i,...s}=e,u=dU(Kg,r);return l.jsx(ja,{present:i||_d(u.checked)||u.checked===!0,children:l.jsx(rt.span,{...s,ref:t,"data-state":Ig(u.checked)})})});iC.displayName=Kg;var fU="MenuSeparator",oC=p.forwardRef((e,t)=>{const{__scopeMenu:r,...i}=e;return l.jsx(rt.div,{role:"separator","aria-orientation":"horizontal",...i,ref:t})});oC.displayName=fU;var hU="MenuArrow",sC=p.forwardRef((e,t)=>{const{__scopeMenu:r,...i}=e,s=of(r);return l.jsx($d,{...s,...i,ref:t})});sC.displayName=hU;var mU="MenuSub",[O9,lC]=so(mU),ql="MenuSubTrigger",cC=p.forwardRef((e,t)=>{const r=lo(ql,e.__scopeMenu),i=fc(ql,e.__scopeMenu),s=lC(ql,e.__scopeMenu),u=zg(ql,e.__scopeMenu),d=p.useRef(null),{pointerGraceTimerRef:h,onPointerGraceIntentChange:g}=u,y={__scopeMenu:e.__scopeMenu},x=p.useCallback(()=>{d.current&&window.clearTimeout(d.current),d.current=null},[]);return p.useEffect(()=>x,[x]),p.useEffect(()=>{const v=h.current;return()=>{window.clearTimeout(v),g(null)}},[h,g]),l.jsx(Dg,{asChild:!0,...y,children:l.jsx(JE,{id:s.triggerId,"aria-haspopup":"menu","aria-expanded":r.open,"aria-controls":s.contentId,"data-state":fC(r.open),...e,ref:Mn(t,s.onTriggerChange),onClick:v=>{e.onClick?.(v),!(e.disabled||v.defaultPrevented)&&(v.currentTarget.focus(),r.open||r.onOpenChange(!0))},onPointerMove:Ce(e.onPointerMove,Jl(v=>{u.onItemEnter(v),!v.defaultPrevented&&!e.disabled&&!r.open&&!d.current&&(u.onPointerGraceIntentChange(null),d.current=window.setTimeout(()=>{r.onOpenChange(!0),x()},100))})),onPointerLeave:Ce(e.onPointerLeave,Jl(v=>{x();const w=r.content?.getBoundingClientRect();if(w){const E=r.content?.dataset.side,j=E==="right",S=j?-5:5,N=w[j?"left":"right"],D=w[j?"right":"left"];u.onPointerGraceIntentChange({area:[{x:v.clientX+S,y:v.clientY},{x:N,y:w.top},{x:D,y:w.top},{x:D,y:w.bottom},{x:N,y:w.bottom}],side:E}),window.clearTimeout(h.current),h.current=window.setTimeout(()=>u.onPointerGraceIntentChange(null),300)}else{if(u.onTriggerLeave(v),v.defaultPrevented)return;u.onPointerGraceIntentChange(null)}})),onKeyDown:Ce(e.onKeyDown,v=>{const w=u.searchRef.current!=="";e.disabled||w&&v.key===" "||XL[i.dir].includes(v.key)&&(r.onOpenChange(!0),r.content?.focus(),v.preventDefault())})})})});cC.displayName=ql;var uC="MenuSubContent",dC=p.forwardRef((e,t)=>{const r=XE(Ca,e.__scopeMenu),{forceMount:i=r.forceMount,...s}=e,u=lo(Ca,e.__scopeMenu),d=fc(Ca,e.__scopeMenu),h=lC(uC,e.__scopeMenu),g=p.useRef(null),y=dt(t,g);return l.jsx(Ql.Provider,{scope:e.__scopeMenu,children:l.jsx(ja,{present:i||u.open,children:l.jsx(Ql.Slot,{scope:e.__scopeMenu,children:l.jsx(kg,{id:h.contentId,"aria-labelledby":h.triggerId,...s,ref:y,align:"start",side:d.dir==="rtl"?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:x=>{d.isUsingKeyboardRef.current&&g.current?.focus(),x.preventDefault()},onCloseAutoFocus:x=>x.preventDefault(),onFocusOutside:Ce(e.onFocusOutside,x=>{x.target!==h.trigger&&u.onOpenChange(!1)}),onEscapeKeyDown:Ce(e.onEscapeKeyDown,x=>{d.onClose(),x.preventDefault()}),onKeyDown:Ce(e.onKeyDown,x=>{const v=x.currentTarget.contains(x.target),w=ZL[d.dir].includes(x.key);v&&w&&(u.onOpenChange(!1),h.trigger?.focus(),x.preventDefault())})})})})})});dC.displayName=uC;function fC(e){return e?"open":"closed"}function _d(e){return e==="indeterminate"}function Ig(e){return _d(e)?"indeterminate":e?"checked":"unchecked"}function pU(e){const t=document.activeElement;for(const r of e)if(r===t||(r.focus(),document.activeElement!==t))return}function gU(e,t){return e.map((r,i)=>e[(t+i)%e.length])}function yU(e,t,r){const s=t.length>1&&Array.from(t).every(y=>y===t[0])?t[0]:t,u=r?e.indexOf(r):-1;let d=gU(e,Math.max(u,0));s.length===1&&(d=d.filter(y=>y!==r));const g=d.find(y=>y.toLowerCase().startsWith(s.toLowerCase()));return g!==r?g:void 0}function vU(e,t){const{x:r,y:i}=e;let s=!1;for(let u=0,d=t.length-1;ui!=w>i&&r<(v-y)*(i-x)/(w-x)+y&&(s=!s)}return s}function xU(e,t){if(!t)return!1;const r={x:e.clientX,y:e.clientY};return vU(r,t)}function Jl(e){return t=>t.pointerType==="mouse"?e(t):void 0}var bU=GE,wU=Dg,SU=ZE,_U=YE,EU=Pg,CU=QE,jU=sf,RU=WE,OU=tC,NU=aC,AU=iC,TU=oC,DU=sC,MU=cC,zU=dC,lf="DropdownMenu",[kU]=ur(lf,[HE]),zn=HE(),[PU,hC]=kU(lf),mC=e=>{const{__scopeDropdownMenu:t,children:r,dir:i,open:s,defaultOpen:u,onOpenChange:d,modal:h=!0}=e,g=zn(t),y=p.useRef(null),[x,v]=Yi({prop:s,defaultProp:u??!1,onChange:d,caller:lf});return l.jsx(PU,{scope:t,triggerId:Sn(),triggerRef:y,contentId:Sn(),open:x,onOpenChange:v,onOpenToggle:p.useCallback(()=>v(w=>!w),[v]),modal:h,children:l.jsx(bU,{...g,open:x,onOpenChange:v,dir:i,modal:h,children:r})})};mC.displayName=lf;var pC="DropdownMenuTrigger",gC=p.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,disabled:i=!1,...s}=e,u=hC(pC,r),d=zn(r);return l.jsx(wU,{asChild:!0,...d,children:l.jsx(rt.button,{type:"button",id:u.triggerId,"aria-haspopup":"menu","aria-expanded":u.open,"aria-controls":u.open?u.contentId:void 0,"data-state":u.open?"open":"closed","data-disabled":i?"":void 0,disabled:i,...s,ref:Mn(t,u.triggerRef),onPointerDown:Ce(e.onPointerDown,h=>{!i&&h.button===0&&h.ctrlKey===!1&&(u.onOpenToggle(),u.open||h.preventDefault())}),onKeyDown:Ce(e.onKeyDown,h=>{i||(["Enter"," "].includes(h.key)&&u.onOpenToggle(),h.key==="ArrowDown"&&u.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(h.key)&&h.preventDefault())})})})});gC.displayName=pC;var KU="DropdownMenuPortal",yC=e=>{const{__scopeDropdownMenu:t,...r}=e,i=zn(t);return l.jsx(SU,{...i,...r})};yC.displayName=KU;var vC="DropdownMenuContent",xC=p.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...i}=e,s=hC(vC,r),u=zn(r),d=p.useRef(!1);return l.jsx(_U,{id:s.contentId,"aria-labelledby":s.triggerId,...u,...i,ref:t,onCloseAutoFocus:Ce(e.onCloseAutoFocus,h=>{d.current||s.triggerRef.current?.focus(),d.current=!1,h.preventDefault()}),onInteractOutside:Ce(e.onInteractOutside,h=>{const g=h.detail.originalEvent,y=g.button===0&&g.ctrlKey===!0,x=g.button===2||y;(!s.modal||x)&&(d.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});xC.displayName=vC;var IU="DropdownMenuGroup",LU=p.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...i}=e,s=zn(r);return l.jsx(EU,{...s,...i,ref:t})});LU.displayName=IU;var UU="DropdownMenuLabel",qU=p.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...i}=e,s=zn(r);return l.jsx(CU,{...s,...i,ref:t})});qU.displayName=UU;var FU="DropdownMenuItem",bC=p.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...i}=e,s=zn(r);return l.jsx(jU,{...s,...i,ref:t})});bC.displayName=FU;var $U="DropdownMenuCheckboxItem",VU=p.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...i}=e,s=zn(r);return l.jsx(RU,{...s,...i,ref:t})});VU.displayName=$U;var HU="DropdownMenuRadioGroup",BU=p.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...i}=e,s=zn(r);return l.jsx(OU,{...s,...i,ref:t})});BU.displayName=HU;var GU="DropdownMenuRadioItem",XU=p.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...i}=e,s=zn(r);return l.jsx(NU,{...s,...i,ref:t})});XU.displayName=GU;var ZU="DropdownMenuItemIndicator",YU=p.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...i}=e,s=zn(r);return l.jsx(AU,{...s,...i,ref:t})});YU.displayName=ZU;var QU="DropdownMenuSeparator",JU=p.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...i}=e,s=zn(r);return l.jsx(TU,{...s,...i,ref:t})});JU.displayName=QU;var WU="DropdownMenuArrow",e7=p.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...i}=e,s=zn(r);return l.jsx(DU,{...s,...i,ref:t})});e7.displayName=WU;var t7="DropdownMenuSubTrigger",n7=p.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...i}=e,s=zn(r);return l.jsx(MU,{...s,...i,ref:t})});n7.displayName=t7;var a7="DropdownMenuSubContent",r7=p.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...i}=e,s=zn(r);return l.jsx(zU,{...s,...i,ref:t,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});r7.displayName=a7;var i7=mC,o7=gC,s7=yC,l7=xC,c7=bC;function u7({...e}){return l.jsx(i7,{"data-slot":"dropdown-menu",...e})}function d7({...e}){return l.jsx(o7,{"data-slot":"dropdown-menu-trigger",...e})}function f7({className:e,sideOffset:t=4,...r}){return l.jsx(s7,{children:l.jsx(l7,{"data-slot":"dropdown-menu-content",sideOffset:t,className:de("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",e),...r})})}function z0({className:e,inset:t,variant:r="default",...i}){return l.jsx(c7,{"data-slot":"dropdown-menu-item","data-inset":t,"data-variant":r,className:de("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...i})}const h7=["master","worker"];function k0({status:e}){const t=e==="ready"?"default":e==="provisioning"?"secondary":e==="failed"?"destructive":"outline";return l.jsx(Ia,{variant:t,className:"capitalize",children:e||"unknown"})}function Dr(e,t){return(e??"").toLowerCase().includes(t)}function Xm(e){const{open:t,title:r,onOpenChange:i,items:s,initialSelectedIds:u,onSave:d,columns:h,allowItem:g}=e,[y,x]=p.useState(""),[v,w]=p.useState(new Set(u)),[E,j]=p.useState(!1);p.useEffect(()=>{w(new Set(u)),x("")},[u,t]);const S=p.useMemo(()=>{const A=y.trim().toLowerCase();return s.filter(O=>g&&!g(O)?!1:A?Dr(O.name,A)||Dr(O.key,A)||Dr(O.value,A)||Dr(O.effect,A)||Dr(O.hostname,A)||Dr(O.private_ip_address,A)||Dr(O.public_ip_address,A)||Dr(O.role,A)||Dr(O.status,A):!0)},[s,y,g]),N=u,D=Array.from(v).some(A=>!N.has(A))||Array.from(N).some(A=>!v.has(A));return l.jsx(Et,{open:t,onOpenChange:i,children:l.jsxs(Ct,{className:"sm:max-w-3xl",children:[l.jsx(jt,{children:l.jsx(Rt,{children:r})}),l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{className:"relative",children:[l.jsx(zr,{className:"absolute top-2.5 left-2 h-4 w-4 opacity-60"}),l.jsx(Fe,{value:y,onChange:A=>x(A.target.value),placeholder:"Search…",className:"pl-8"})]}),l.jsx("div",{className:"max-h-[50vh] overflow-auto rounded border",children:l.jsxs(la,{children:[l.jsx(ca,{children:l.jsxs(et,{children:[l.jsx(ze,{className:"w-[48px]"}),h.map((A,O)=>l.jsx(ze,{children:A.header},O))]})}),l.jsxs(ua,{children:[S.map(A=>{const O=A.id,C=v.has(O);return l.jsxs(et,{children:[l.jsx(_e,{className:"text-center align-middle",children:l.jsx("input",{type:"checkbox",className:"h-4 w-4",checked:C,onChange:T=>{const U=new Set(v);T.target.checked?U.add(O):U.delete(O),w(U)}})}),h.map((T,U)=>l.jsx(_e,{children:T.render(A)},U))]},O)}),S.length===0&&l.jsx(et,{children:l.jsx(_e,{colSpan:1+h.length,className:"text-muted-foreground py-8 text-center",children:"No items found."})})]})]})}),l.jsxs("div",{className:"text-muted-foreground text-sm",children:["Selected: ",l.jsx("span",{className:"text-foreground font-medium",children:v.size})]})]}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{type:"button",variant:"outline",onClick:()=>i(!1),disabled:E,children:"Close"}),l.jsx(se,{onClick:async()=>{const A=[],O=[];for(const C of v)N.has(C)||A.push(C);for(const C of N)v.has(C)||O.push(C);try{j(!0),await d({toAttach:A,toDetach:O}),i(!1)}finally{j(!1)}},disabled:E||!D,children:E?"Saving…":"Save changes"})]})]})})}const wC=Oa({name:Zt().trim().min(1,"Name is required").max(120,"Max 120 chars"),role:gi(h7)}),m7=wC.partial();function p7(){const[e,t]=p.useState(""),[r,i]=p.useState(!1),[s,u]=p.useState(!1),[d,h]=p.useState(!1),[g,y]=p.useState(null),[x,v]=p.useState(null),[w,E]=p.useState(!1),[j,S]=p.useState(null),[N,D]=p.useState(new Set),[A,O]=p.useState(new Set),[C,T]=p.useState(""),[U,L]=p.useState(!1),[V,fe]=p.useState(!1),[ge,pe]=p.useState(!1),[ae,le]=p.useState(null),[he,be]=p.useState(new Set),[R,P]=p.useState(new Set),[I,ee]=p.useState(new Set),me=da(),Re=rn({queryKey:["node-pools"],queryFn:()=>_a.listNodePools()}),G=rn({queryKey:["servers"],queryFn:()=>Ll.listServers()}),Y=rn({queryKey:["annotations"],queryFn:()=>kl.listAnnotations()}),ie=rn({queryKey:["labels"],queryFn:()=>Pl.listLabels()}),oe=rn({queryKey:["taints"],queryFn:()=>Ul.listTaints()}),ve=_n({resolver:En(wC),defaultValues:{name:"",role:"worker"}}),W=mt({mutationFn:B=>_a.createNodePool(B),onSuccess:async()=>{await me.invalidateQueries({queryKey:["node-pools"]}),ve.reset({name:"",role:"worker"}),i(!1),Ee.success("Node pool created.")},onError:B=>Ee.error(B?.message??"Unable to create node pool.")}),xe=B=>W.mutate(B),Oe=_n({resolver:En(m7),defaultValues:{name:void 0,role:void 0}});p.useEffect(()=>{g?Oe.reset({name:g.name,role:g.role}):Oe.reset({name:void 0,role:void 0})},[g]);const Ue=mt({mutationFn:async B=>{if(!g)return;const qe={};return B.name!==g.name&&(qe.name=B.name),B.role!==g.role&&(qe.role=B.role),await _a.updateNodePool(g.id,qe)},onSuccess:async()=>{await me.invalidateQueries({queryKey:["node-pools"]}),u(!1),y(null),Ee.success("Node pool updated.")},onError:B=>Ee.error(B?.message??"Unable to update node pool.")}),Ye=B=>Ue.mutate(B),Ze=mt({mutationFn:async()=>{x&&await _a.deleteNodePool(x.id)},onSuccess:async()=>{await me.invalidateQueries({queryKey:["node-pools"]}),h(!1),v(null),Ee.success("Node pool deleted.")},onError:B=>Ee.error(B?.message??"Unable to delete node pool.")}),Kt=p.useMemo(()=>{const B=Re.data??[],qe=e.trim().toLowerCase();return qe?B.filter(ke=>ke.name?.toLowerCase().includes(qe)||ke.role?.toLowerCase().includes(qe)):B},[e,Re.data]);return Re.isLoading?l.jsx("div",{className:"p-6",children:"Loading node pools…"}):Re.error?l.jsxs("div",{className:"p-6 text-red-500",children:["Error loading node pools.",l.jsx("pre",{className:"bg-muted mt-3 rounded p-3 text-xs",children:JSON.stringify(Re.error,null,2)})]}):l.jsxs("div",{className:"space-y-4 p-6",children:[l.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[l.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Node Pools"}),l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsxs("div",{className:"relative",children:[l.jsx(zr,{className:"absolute top-2.5 left-2 h-4 w-4 opacity-60"}),l.jsx(Fe,{value:e,onChange:B=>t(B.target.value),placeholder:"Search node pools",className:"w-64 pl-8"})]}),l.jsxs(Et,{open:r,onOpenChange:i,children:[l.jsx(or,{asChild:!0,children:l.jsxs(se,{onClick:()=>i(!0),children:[l.jsx(ro,{className:"mr-2 h-4 w-4"}),"Create Node Pool"]})}),l.jsxs(Ct,{className:"sm:max-w-lg",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Create Node Pool"})}),l.jsx(Cn,{...ve,children:l.jsxs("form",{className:"space-y-4",onSubmit:ve.handleSubmit(xe),children:[l.jsx($e,{control:ve.control,name:"name",render:({field:B})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Name"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"master-pool",...B})}),l.jsx(Be,{})]})}),l.jsx($e,{control:ve.control,name:"role",render:({field:B})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Role"}),l.jsxs(dn,{onValueChange:qe=>ve.setValue("role",qe,{shouldDirty:!0,shouldValidate:!0}),value:B.value,children:[l.jsx(Xe,{children:l.jsx(hn,{children:l.jsx(fn,{placeholder:"Select role"})})}),l.jsxs(mn,{children:[l.jsx(ut,{value:"master",children:"master"}),l.jsx(ut,{value:"worker",children:"worker"})]})]}),l.jsx(Be,{})]})}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{type:"button",variant:"outline",onClick:()=>i(!1),children:"Cancel"}),l.jsx(se,{type:"submit",disabled:ve.formState.isSubmitting,children:ve.formState.isSubmitting?"Creating…":"Create"})]})]})})]})]})]})]}),l.jsx("div",{className:"bg-background overflow-hidden rounded-2xl border shadow-sm",children:l.jsx("div",{className:"overflow-x-auto",children:l.jsxs(la,{children:[l.jsx(ca,{children:l.jsxs(et,{children:[l.jsx(ze,{children:"Name"}),l.jsx(ze,{children:"Role"}),l.jsx(ze,{children:"Servers"}),l.jsx(ze,{children:"Annotations"}),l.jsx(ze,{children:"Labels"}),l.jsx(ze,{children:"Taints"}),l.jsx(ze,{className:"w-[180px] text-right",children:"Actions"})]})}),l.jsxs(ua,{children:[Kt.map(B=>{const qe=Array.isArray(B.servers)?B.servers.length:0;return l.jsxs(et,{children:[l.jsx(_e,{className:"font-medium",children:B.name}),l.jsx(_e,{className:"font-medium",children:B.role}),l.jsx(_e,{children:l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[(B.servers||[]).slice(0,6).map(ke=>l.jsxs(Ia,{variant:"secondary",className:"gap-1",children:[l.jsx(iS,{className:"h-3 w-3"}),ke.hostname||ke.private_ip_address,l.jsx("span",{className:"ml-1",children:ke.role}),ke.status&&l.jsx("span",{className:"ml-1",children:l.jsx(k0,{status:ke.status})})]},ke.id)),qe===0&&l.jsx("span",{className:"text-muted-foreground",children:"No servers"}),qe>6&&l.jsxs("span",{className:"text-muted-foreground",children:["+",qe-6," more"]}),l.jsxs(se,{variant:"outline",size:"sm",onClick:()=>{S(B);const ke=new Set((B.servers||[]).map(Qe=>Qe.id));D(new Set(ke)),O(new Set(ke)),T(""),E(!0)},children:[l.jsx(Ru,{className:"mr-2 h-4 w-4"}),"Manage Servers"]})]})}),l.jsx(_e,{children:l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[(B.annotations||[]).slice(0,6).map(ke=>l.jsxs(Ia,{variant:"outline",className:"gap-1",children:[ke.key,":",ke.value]},ke.id)),(B.annotations||[]).length===0&&l.jsx("span",{className:"text-muted-foreground",children:"No annotations"}),(B.annotations||[]).length>6&&l.jsxs("span",{className:"text-muted-foreground",children:["+",(B.annotations||[]).length-6," more"]}),l.jsxs(se,{variant:"outline",size:"sm",onClick:()=>{le(B),P(new Set((B.annotations||[]).map(ke=>ke.id))),fe(!0)},children:[l.jsx(Ru,{className:"mr-2 h-4 w-4"}),"Manage"]})]})}),l.jsx(_e,{children:l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[(B.labels||[]).slice(0,6).map(ke=>l.jsxs(Ia,{variant:"secondary",className:"gap-1",children:[ke.key,":",ke.value]},ke.id)),(B.labels||[]).length===0&&l.jsx("span",{className:"text-muted-foreground",children:"No labels"}),(B.labels||[]).length>6&&l.jsxs("span",{className:"text-muted-foreground",children:["+",(B.labels||[]).length-6," more"]}),l.jsxs(se,{variant:"outline",size:"sm",onClick:()=>{le(B),be(new Set((B.labels||[]).map(ke=>ke.id))),L(!0)},children:[l.jsx(Ru,{className:"mr-2 h-4 w-4"}),"Manage"]})]})}),l.jsx(_e,{children:l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[(B.taints||[]).slice(0,6).map(ke=>l.jsxs(Ia,{variant:"outline",className:"gap-1",children:[ke.key,":",ke.value,ke.effect?l.jsxs("span",{className:"ml-1",children:["(",ke.effect,")"]}):null]},ke.id)),(B.taints||[]).length===0&&l.jsx("span",{className:"text-muted-foreground",children:"No taints"}),(B.taints||[]).length>6&&l.jsxs("span",{className:"text-muted-foreground",children:["+",(B.taints||[]).length-6," more"]}),l.jsxs(se,{variant:"outline",size:"sm",onClick:()=>{le(B),ee(new Set((B.taints||[]).map(ke=>ke.id))),pe(!0)},children:[l.jsx(Ru,{className:"mr-2 h-4 w-4"}),"Manage"]})]})}),l.jsx(_e,{className:"text-right",children:l.jsxs(u7,{children:[l.jsx(d7,{asChild:!0,children:l.jsx(se,{size:"icon",variant:"ghost",className:"h-8 w-8",children:l.jsx(i2,{className:"h-4 w-4"})})}),l.jsxs(f7,{align:"end",children:[l.jsxs(z0,{onClick:()=>{y(B),u(!0)},children:[l.jsx(Cd,{className:"mr-2 h-4 w-4"})," Edit"]}),l.jsxs(z0,{className:"text-red-600 focus:text-red-600",onClick:()=>{v(B),h(!0)},children:[l.jsx(oS,{className:"mr-2 h-4 w-4"})," Delete"]})]})]})})]},B.id)}),Kt.length===0&&l.jsx(et,{children:l.jsx(_e,{colSpan:7,className:"text-muted-foreground py-10 text-center",children:"No node pools found."})})]})]})})}),l.jsx(Et,{open:s,onOpenChange:u,children:l.jsxs(Ct,{className:"sm:max-w-lg",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Edit Node Pool"})}),l.jsx(Cn,{...Oe,children:l.jsxs("form",{className:"space-y-4",onSubmit:Oe.handleSubmit(Ye),children:[l.jsx($e,{control:Oe.control,name:"name",render:({field:B})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Name"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"pool-name",...B})}),l.jsx(Be,{})]})}),l.jsx($e,{control:Oe.control,name:"role",render:({field:B})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Role"}),l.jsxs(dn,{onValueChange:qe=>Oe.setValue("role",qe,{shouldDirty:!0,shouldValidate:!0}),value:B.value,children:[l.jsx(Xe,{children:l.jsx(hn,{children:l.jsx(fn,{placeholder:"Select role"})})}),l.jsxs(mn,{children:[l.jsx(ut,{value:"master",children:"master"}),l.jsx(ut,{value:"worker",children:"worker"})]})]}),l.jsx(Be,{})]})}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{type:"button",variant:"outline",onClick:()=>{u(!1),y(null)},children:"Cancel"}),l.jsx(se,{type:"submit",disabled:Oe.formState.isSubmitting,children:Oe.formState.isSubmitting?"Saving…":"Save changes"})]})]})})]})}),l.jsx(Et,{open:d,onOpenChange:h,children:l.jsxs(Ct,{className:"sm:max-w-md",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Delete node pool"})}),l.jsxs("p",{className:"text-muted-foreground text-sm",children:["This will permanently delete"," ",l.jsx("span",{className:"text-foreground font-medium",children:x?.name}),"."]}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{type:"button",variant:"outline",onClick:()=>{h(!1),v(null)},children:"Cancel"}),l.jsx(se,{variant:"destructive",onClick:()=>Ze.mutate(),disabled:Ze.isPending,children:Ze.isPending?"Deleting…":"Delete"})]})]})}),l.jsx(Et,{open:w,onOpenChange:E,children:l.jsxs(Ct,{className:"sm:max-w-3xl",children:[l.jsx(jt,{children:l.jsxs(Rt,{children:["Manage Servers",j?` — ${j.name}`:""]})}),l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{className:"relative",children:[l.jsx(zr,{className:"absolute top-2.5 left-2 h-4 w-4 opacity-60"}),l.jsx(Fe,{value:C,onChange:B=>T(B.target.value),placeholder:"Search by hostname, IP or role…",className:"pl-8"})]}),l.jsx("div",{className:"max-h-[50vh] overflow-auto rounded border",children:l.jsxs(la,{children:[l.jsx(ca,{children:l.jsxs(et,{children:[l.jsx(ze,{className:"w-[48px]"}),l.jsx(ze,{children:"Hostname"}),l.jsx(ze,{children:"Private IP"}),l.jsx(ze,{children:"Public IP"}),l.jsx(ze,{children:"Role"}),l.jsx(ze,{children:"Status"})]})}),l.jsxs(ua,{children:[(G.data??[]).filter(B=>{if(j?.role&&!RL(j.role,B.role))return!1;const qe=C.trim().toLowerCase();return qe?(B.hostname??"").toLowerCase().includes(qe)||(B.private_ip_address??"").toLowerCase().includes(qe)||(B.public_ip_address??"").toLowerCase().includes(qe)||(B.role??"").toLowerCase().includes(qe):!0}).map(B=>{const qe=B.id,ke=N.has(qe);return l.jsxs(et,{children:[l.jsx(_e,{className:"text-center align-middle",children:l.jsx("input",{type:"checkbox",className:"h-4 w-4",checked:ke,onChange:Qe=>{const Ga=new Set(N);Qe.target.checked?Ga.add(qe):Ga.delete(qe),D(Ga)}})}),l.jsx(_e,{className:"font-medium",children:B.hostname||"—"}),l.jsx(_e,{children:B.private_ip_address||"—"}),l.jsx(_e,{children:B.public_ip_address||"—"}),l.jsx(_e,{className:"capitalize",children:B.role||"—"}),l.jsx(_e,{children:l.jsx(k0,{status:B.status})})]},qe)}),(G.data??[]).length===0&&l.jsx(et,{children:l.jsx(_e,{colSpan:6,className:"text-muted-foreground py-8 text-center",children:G.isLoading?"Loading servers…":"No servers found."})})]})]})}),l.jsxs("div",{className:"text-muted-foreground text-sm",children:["Selected: ",l.jsx("span",{className:"text-foreground font-medium",children:N.size})]})]}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{type:"button",variant:"outline",onClick:()=>{E(!1),S(null),D(new Set),O(new Set),T("")},children:"Close"}),l.jsx(se,{onClick:async()=>{if(!j)return;const B=j.id,qe=[],ke=[];for(const Qe of N)A.has(Qe)||qe.push(Qe);for(const Qe of A)N.has(Qe)||ke.push(Qe);try{qe.length>0&&await _a.attachNodePoolServer(B,{server_ids:qe});for(const Qe of ke)await _a.detachNodePoolServers(B,Qe);await me.invalidateQueries({queryKey:["node-pools"]}),await me.invalidateQueries({queryKey:["servers"]}),Ee.success("Servers updated for node pool."),E(!1),S(null),D(new Set),O(new Set),T("")}catch(Qe){Ee.error(Qe?.message??"Failed to update servers.")}},disabled:G.isLoading,children:"Save changes"})]})]})}),l.jsx(Xm,{open:U,onOpenChange:B=>{L(B),B||le(null)},title:`Manage Labels${ae?` — ${ae.name}`:""}`,items:(ie.data??[]).map(B=>({id:B.id,key:B.key,value:B.value,name:`${B.key}:${B.value}`})),initialSelectedIds:he,columns:[{header:"Key",render:B=>l.jsx("span",{className:"font-medium",children:B.key})},{header:"Value",render:B=>B.value??"—"}],onSave:async({toAttach:B,toDetach:qe})=>{if(!ae)return;const ke=ae.id;try{B.length>0&&await _a.attachNodePoolLabels(ke,{label_ids:B});for(const Qe of qe)await _a.detachNodePoolLabels(ke,Qe);await me.invalidateQueries({queryKey:["node-pools"]}),Ee.success("Labels updated for node pool.")}catch(Qe){throw Ee.error(Qe?.message??"Failed to update labels."),Qe}}}),l.jsx(Xm,{open:V,onOpenChange:B=>{fe(B),B||le(null)},title:`Manage Annotations${ae?` — ${ae.name}`:""}`,items:(Y.data??[]).map(B=>({id:B.id,key:B.key,value:B.value,name:`${B.key}:${B.value}`})),initialSelectedIds:R,columns:[{header:"Key",render:B=>l.jsx("span",{className:"font-medium",children:B.key})},{header:"Value",render:B=>B.value??"—"}],onSave:async({toAttach:B,toDetach:qe})=>{if(!ae)return;const ke=ae.id;try{B.length>0&&await _a.attachNodePoolAnnotations(ke,{annotation_ids:B});for(const Qe of qe)await _a.detachNodePoolAnnotations(ke,Qe);await me.invalidateQueries({queryKey:["node-pools"]}),Ee.success("Annotations updated for node pool.")}catch(Qe){throw Ee.error(Qe?.message??"Failed to update annotations."),Qe}}}),l.jsx(Xm,{open:ge,onOpenChange:B=>{pe(B),B||le(null)},title:`Manage Taints${ae?` — ${ae.name}`:""}`,items:(oe.data??[]).map(B=>({id:B.id,key:B.key,value:B.value,effect:B.effect,name:`${B.key}:${B.value}`})),initialSelectedIds:I,columns:[{header:"Key",render:B=>l.jsx("span",{className:"font-medium",children:B.key})},{header:"Value",render:B=>B.value??"—"},{header:"Effect",render:B=>B.effect??"—"}],onSave:async({toAttach:B,toDetach:qe})=>{if(!ae)return;const ke=ae.id;try{B.length>0&&await _a.attachNodePoolTaints(ke,{taint_ids:B});for(const Qe of qe)await _a.detachNodePoolTaints(ke,Qe);await me.invalidateQueries({queryKey:["node-pools"]}),Ee.success("Taints updated for node pool.")}catch(Qe){throw Ee.error(Qe?.message??"Failed to update taints."),Qe}}})]})}const g7=Oa({name:Zt(),expires_in_hours:$_().min(1).max(43800)}),y7=()=>{const e=Rd(),t=da(),r=La.get(),i=rn({enabled:!!r,queryKey:["org:keys",r],queryFn:()=>Pe(()=>e.listOrgKeys({id:r}))}),s=_n({resolver:En(g7),defaultValues:{name:"",expires_in_hours:720}}),[u,d]=p.useState(null),h=mt({mutationFn:y=>e.createOrgKey({id:r,body:y}),onSuccess:y=>{t.invalidateQueries({queryKey:["org:keys",r]}),d({key:y.org_key,secret:y.org_secret}),Ee.success("Key created"),s.reset({name:"",expires_in_hours:void 0})},onError:y=>Ee.error(y?.message??"Failed to create key")}),g=mt({mutationFn:y=>e.deleteOrgKey({id:r,keyId:y}),onSuccess:()=>{t.invalidateQueries({queryKey:["org:keys",r]}),Ee.success("Key deleted")},onError:y=>Ee.error(y?.message??"Failed to delete key")});return r?i.isLoading?l.jsx("p",{children:"Loading..."}):i.error?l.jsx("p",{className:"text-destructive",children:"Failed to load keys."}):l.jsxs(Ua,{children:[l.jsx(lr,{children:l.jsx(cr,{children:"Org API Keys"})}),l.jsxs(qa,{className:"space-y-6",children:[l.jsx(Cn,{...s,children:l.jsxs("form",{onSubmit:s.handleSubmit(y=>h.mutate(y)),className:"grid grid-cols-1 items-end gap-3 md:grid-cols-12",children:[l.jsx("div",{className:"md:col-span-6",children:l.jsx($e,{control:s.control,name:"name",render:({field:y})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Name"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"automation-bot",...y})}),l.jsx(Be,{})]})})}),l.jsx("div",{className:"md:col-span-4",children:l.jsx($e,{control:s.control,name:"expires_in_hours",render:({field:y})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Expires In (hours)"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"e.g. 720",...y})}),l.jsx(Be,{})]})})}),l.jsx("div",{className:"md:col-span-2",children:l.jsx(se,{type:"submit",className:"w-full",disabled:h.isPending,children:"Create"})})]})}),l.jsx("div",{className:"overflow-x-auto rounded-md border",children:l.jsxs(la,{children:[l.jsx(ca,{children:l.jsxs(et,{children:[l.jsx(ze,{children:"Name"}),l.jsx(ze,{children:"Scope"}),l.jsx(ze,{children:"Created"}),l.jsx(ze,{children:"Expires"}),l.jsx(ze,{className:"w-28"})]})}),l.jsxs(ua,{children:[i.data?.map(y=>l.jsxs(et,{children:[l.jsx(_e,{children:y.name??"-"}),l.jsx(_e,{children:y.scope}),l.jsx(_e,{children:new Date(y.created_at).toLocaleString()}),l.jsx(_e,{children:y.expires_at?new Date(y.expires_at).toLocaleString():"-"}),l.jsx(_e,{className:"text-right",children:l.jsx(se,{variant:"destructive",size:"sm",onClick:()=>g.mutate(y.id),children:"Delete"})})]},y.id)),i.data?.length===0&&l.jsx(et,{children:l.jsx(_e,{colSpan:5,className:"text-muted-foreground p-4",children:"No keys."})})]})]})}),l.jsx(Et,{open:!!u,onOpenChange:y=>!y&&d(null),children:l.jsxs(Ct,{children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Copy your credentials"})}),l.jsxs("div",{className:"space-y-2",children:[l.jsxs("div",{children:[l.jsx("div",{className:"text-muted-foreground mb-1 text-xs",children:"Org Key"}),l.jsx(Fe,{readOnly:!0,value:u?.key??"",onFocus:y=>y.currentTarget.select()})]}),l.jsxs("div",{children:[l.jsx("div",{className:"text-muted-foreground mb-1 text-xs",children:"Org Secret"}),l.jsx(Fe,{readOnly:!0,value:u?.secret??"",onFocus:y=>y.currentTarget.select()})]}),l.jsx("p",{className:"text-muted-foreground text-xs",children:"This secret is shown once. Store it securely."})]}),l.jsx(Mt,{children:l.jsx(se,{onClick:()=>d(null),children:"Done"})})]})})]})]}):l.jsx("p",{className:"text-muted-foreground",children:"Pick an organization."})},v7=Oa({user_id:q_("Invalid UUID"),role:gi(["owner","admin","member"])}),x7=()=>{const e=Rd(),t=da(),r=La.get(),[i,s]=p.useState(null),u=rn({enabled:!!r,queryKey:["org:members",r],queryFn:()=>Pe(()=>e.listMembers({id:r}))}),d=p.useMemo(()=>(u.data??[]).filter(w=>w.role==="owner").length,[u.data]),h=_n({resolver:En(v7),defaultValues:{user_id:"",role:"member"}}),g=mt({mutationFn:w=>e.addOrUpdateMember({id:r,body:w}),onSuccess:()=>{Ee.success("Member added/updated"),t.invalidateQueries({queryKey:["org:members",r]}),h.reset({user_id:"",role:"member"})},onError:w=>Ee.error(w?.message??"Failed")}),y=mt({mutationFn:w=>e.removeMember({id:r,userId:w}),onSuccess:()=>{Ee.success("Member removed"),t.invalidateQueries({queryKey:["org:members",r]})},onError:w=>Ee.error(w?.message??"Failed")}),x=mt({mutationFn:({userId:w,role:E})=>e.addOrUpdateMember({id:r,body:{user_id:w,role:E}}),onMutate:async({userId:w,role:E})=>{s(w),await t.cancelQueries({queryKey:["org:members",r]});const j=t.getQueryData(["org:members",r]);return t.setQueryData(["org:members",r],(S=[])=>S.map(N=>N.user_id===w?{...N,role:E}:N)),{prev:j}},onError:(w,E,j)=>{j?.prev&&t.setQueryData(["org:members",r],j.prev),Ee.error(w?.message??"Failed to update role")},onSuccess:()=>{Ee.success("Role updated")},onSettled:()=>{s(null),t.invalidateQueries({queryKey:["org:members",r]})}}),v=w=>!(w.role==="owner"&&d<=1);return r?u.isLoading?l.jsx("p",{children:"Loading..."}):u.error?l.jsx("p",{className:"text-destructive",children:"Failed to load members."}):l.jsxs(Ua,{children:[l.jsx(lr,{children:l.jsx(cr,{children:"Members"})}),l.jsxs(qa,{className:"space-y-6",children:[l.jsx(Cn,{...h,children:l.jsxs("form",{className:"grid grid-cols-1 items-end gap-3 md:grid-cols-12",onSubmit:h.handleSubmit(w=>g.mutate(w)),children:[l.jsx("div",{className:"md:col-span-6",children:l.jsx($e,{control:h.control,name:"user_id",render:({field:w})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"User ID"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"UUID",...w})}),l.jsx(Be,{})]})})}),l.jsx("div",{className:"md:col-span-4",children:l.jsx($e,{control:h.control,name:"role",render:({field:w})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Role"}),l.jsxs(dn,{onValueChange:w.onChange,value:w.value,children:[l.jsx(hn,{children:l.jsx(fn,{placeholder:"Select role"})}),l.jsxs(mn,{children:[l.jsx(ut,{value:"member",children:"member"}),l.jsx(ut,{value:"admin",children:"admin"}),l.jsx(ut,{value:"owner",children:"owner"})]})]}),l.jsx(Be,{})]})})}),l.jsx("div",{className:"md:col-span-2",children:l.jsx(se,{type:"submit",className:"w-full",disabled:g.isPending,children:"Save"})})]})}),l.jsx("div",{className:"overflow-x-auto rounded-md border",children:l.jsxs(la,{children:[l.jsx(ca,{children:l.jsxs(et,{children:[l.jsx(ze,{children:"Id"}),l.jsx(ze,{children:"User"}),l.jsx(ze,{children:"Role"}),l.jsx(ze,{className:"w-28"})]})}),l.jsxs(ua,{children:[u.data?.map(w=>{const E=i===w.user_id;return l.jsxs(et,{className:"align-middle",children:[l.jsx(_e,{className:"font-mono text-xs",children:w.user_id}),l.jsx(_e,{children:w.email}),l.jsx(_e,{className:"capitalize",children:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsxs(dn,{value:w.role,onValueChange:j=>{if(w.role!==j){if(w.role==="owner"&&j!=="owner"&&!v(w)){Ee.error("You cannot demote the last owner.");return}x.mutate({userId:w.user_id,role:j})}},disabled:E,children:[l.jsx(hn,{className:"h-8 w-[140px]",children:l.jsx(fn,{})}),l.jsxs(mn,{children:[l.jsx(ut,{value:"member",children:"member"}),l.jsx(ut,{value:"admin",children:"admin"}),l.jsx(ut,{value:"owner",children:"owner"})]})]}),E&&l.jsx(ps,{className:"h-4 w-4 animate-spin"})]})}),l.jsx(_e,{className:"text-right",children:l.jsx(se,{variant:"destructive",size:"sm",onClick:()=>y.mutate(w.user_id),disabled:w.role==="owner"&&d<=1,title:w.role==="owner"&&d<=1?"Cannot remove the last owner":"",children:"Remove"})})]},w.user_id)}),u.data?.length===0&&l.jsx(et,{children:l.jsx(_e,{colSpan:3,className:"text-muted-foreground p-4",children:"No members."})})]})]})})]})]}):l.jsx("p",{className:"text-muted-foreground",children:"Pick an organization."})},b7=Oa({name:Zt().min(1,"Required"),domain:Zt().optional()}),w7=()=>{const e=Rd(),t=da(),r=La.get(),i=rn({enabled:!!r,queryKey:["org",r],queryFn:()=>Pe(()=>e.getOrg({id:r}))}),s=_n({resolver:En(b7),defaultValues:{name:"",domain:""}});p.useEffect(()=>{i.data&&s.reset({name:i.data.name??"",domain:i.data.domain??""})},[i.data]);const u=mt({mutationFn:g=>e.updateOrg({id:r,body:g}),onSuccess:()=>{t.invalidateQueries({queryKey:["org",r]}),Ee.success("Organization updated")},onError:g=>Ee.error(g?.message??"Update failed")}),d=mt({mutationFn:()=>e.deleteOrg({id:r}),onSuccess:()=>{Ee.success("Organization deleted"),La.set(""),t.invalidateQueries({queryKey:["orgs:mine"]})},onError:g=>Ee.error(g?.message??"Delete failed")});if(!r)return l.jsx("p",{className:"text-muted-foreground",children:"Pick an organization."});if(i.isLoading)return l.jsx("p",{children:"Loading..."});if(i.error)return l.jsx("p",{className:"text-destructive",children:"Failed to load."});const h=g=>{const y={};g.name!==i.data?.name&&(y.name=g.name);const x=g.domain?.trim()||void 0;(x??null)!==(i.data?.domain??null)&&(y.domain=x),Object.keys(y).length!==0&&u.mutate(y)};return l.jsxs(Ua,{children:[l.jsx(lr,{children:l.jsx(cr,{children:"Organization Settings"})}),l.jsx(qa,{className:"space-y-6",children:l.jsx(Cn,{...s,children:l.jsxs("form",{className:"space-y-4",onSubmit:s.handleSubmit(h),children:[l.jsx($e,{control:s.control,name:"name",render:({field:g})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Name"}),l.jsx(Xe,{children:l.jsx(Fe,{...g})}),l.jsx(Be,{})]})}),l.jsx($e,{control:s.control,name:"domain",render:({field:g})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Domain (optional)"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"acme.com",...g})}),l.jsx(Be,{})]})}),l.jsxs("div",{className:"flex gap-2",children:[l.jsx(se,{type:"submit",disabled:u.isPending,children:"Save"}),l.jsx(se,{type:"button",variant:"destructive",onClick:()=>d.mutate(),disabled:d.isPending,children:"Delete Org"})]})]})})})]})},Tl=hT();function S7(){const e=wn.getAccessToken(),t=La.get();return{...e?{Authorization:`Bearer ${e}`}:{},...t?{"X-Org-ID":t}:{}}}async function P0(e,t={}){return fetch(e,{...t,headers:{...t.headers,...S7()},credentials:"include"})}const is={listSshKeys:()=>Pe(async()=>await Tl.listPublicSshKeys()),createSshKey:e=>Pe(async()=>await Tl.createSSHKey({body:e})),getSshKeyById:e=>Pe(async()=>await Tl.getSSHKey({id:e})),revealSshKeyById:e=>Pe(async()=>await Tl.getSSHKey({id:e,reveal:!0})),deleteSshKey:e=>Pe(async()=>{await Tl.deleteSSHKey({id:e})}),downloadJson:(e,t)=>Pe(async()=>{const r=new URL(`/api/v1/ssh/${e}/download`,window.location.origin);r.searchParams.set("part",t),r.searchParams.set("mode","json");const i=await P0(r.toString());if(!i.ok)throw new Error(`Download failed: ${i.statusText}`);return await i.json()}),downloadBlob:(e,t)=>Pe(async()=>{const r=new URL(`/api/v1/ssh/${e}/download`,window.location.origin);r.searchParams.set("part",t);const i=await P0(r.toString());if(!i.ok)throw new Error(`Download failed: ${i.statusText}`);const s=i.headers.get("Content-Disposition")||"",d=/filename="([^"]+)"/i.exec(s)?.[1]??"ssh-key-download",h=await i.blob();return{filename:d,blob:h}})},Yu=43200,K0=1440,I0=Symbol.for("constructDateFrom");function Lg(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&I0 in e?e[I0](t):e instanceof Date?new e.constructor(t):new Date(t)}function yi(e,t){return Lg(e,e)}let _7={};function E7(){return _7}function L0(e){const t=yi(e),r=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return r.setUTCFullYear(t.getFullYear()),+e-+r}function Ug(e,...t){const r=Lg.bind(null,e||t.find(i=>typeof i=="object"));return t.map(r)}function td(e,t){const r=+yi(e)-+yi(t);return r<0?-1:r>0?1:r}function C7(e){return Lg(e,Date.now())}function j7(e,t,r){const[i,s]=Ug(r?.in,e,t),u=i.getFullYear()-s.getFullYear(),d=i.getMonth()-s.getMonth();return u*12+d}function R7(e){return t=>{const i=(e?Math[e]:Math.trunc)(t);return i===0?0:i}}function O7(e,t){return+yi(e)-+yi(t)}function N7(e,t){const r=yi(e);return r.setHours(23,59,59,999),r}function A7(e,t){const r=yi(e),i=r.getMonth();return r.setFullYear(r.getFullYear(),i+1,0),r.setHours(23,59,59,999),r}function T7(e,t){const r=yi(e);return+N7(r)==+A7(r)}function D7(e,t,r){const[i,s,u]=Ug(r?.in,e,e,t),d=td(s,u),h=Math.abs(j7(s,u));if(h<1)return 0;s.getMonth()===1&&s.getDate()>27&&s.setDate(30),s.setMonth(s.getMonth()-d*h);let g=td(s,u)===-d;T7(i)&&h===1&&td(i,u)===1&&(g=!1);const y=d*(h-+g);return y===0?0:y}function M7(e,t,r){const i=O7(e,t)/1e3;return R7(r?.roundingMethod)(i)}const z7={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},k7=(e,t,r)=>{let i;const s=z7[e];return typeof s=="string"?i=s:t===1?i=s.one:i=s.other.replace("{{count}}",t.toString()),r?.addSuffix?r.comparison&&r.comparison>0?"in "+i:i+" ago":i};function Zm(e){return(t={})=>{const r=t.width?String(t.width):e.defaultWidth;return e.formats[r]||e.formats[e.defaultWidth]}}const P7={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},K7={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},I7={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},L7={date:Zm({formats:P7,defaultWidth:"full"}),time:Zm({formats:K7,defaultWidth:"full"}),dateTime:Zm({formats:I7,defaultWidth:"full"})},U7={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},q7=(e,t,r,i)=>U7[e];function Dl(e){return(t,r)=>{const i=r?.context?String(r.context):"standalone";let s;if(i==="formatting"&&e.formattingValues){const d=e.defaultFormattingWidth||e.defaultWidth,h=r?.width?String(r.width):d;s=e.formattingValues[h]||e.formattingValues[d]}else{const d=e.defaultWidth,h=r?.width?String(r.width):e.defaultWidth;s=e.values[h]||e.values[d]}const u=e.argumentCallback?e.argumentCallback(t):t;return s[u]}}const F7={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},$7={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},V7={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},H7={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},B7={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},G7={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},X7=(e,t)=>{const r=Number(e),i=r%100;if(i>20||i<10)switch(i%10){case 1:return r+"st";case 2:return r+"nd";case 3:return r+"rd"}return r+"th"},Z7={ordinalNumber:X7,era:Dl({values:F7,defaultWidth:"wide"}),quarter:Dl({values:$7,defaultWidth:"wide",argumentCallback:e=>e-1}),month:Dl({values:V7,defaultWidth:"wide"}),day:Dl({values:H7,defaultWidth:"wide"}),dayPeriod:Dl({values:B7,defaultWidth:"wide",formattingValues:G7,defaultFormattingWidth:"wide"})};function Ml(e){return(t,r={})=>{const i=r.width,s=i&&e.matchPatterns[i]||e.matchPatterns[e.defaultMatchWidth],u=t.match(s);if(!u)return null;const d=u[0],h=i&&e.parsePatterns[i]||e.parsePatterns[e.defaultParseWidth],g=Array.isArray(h)?Q7(h,v=>v.test(d)):Y7(h,v=>v.test(d));let y;y=e.valueCallback?e.valueCallback(g):g,y=r.valueCallback?r.valueCallback(y):y;const x=t.slice(d.length);return{value:y,rest:x}}}function Y7(e,t){for(const r in e)if(Object.prototype.hasOwnProperty.call(e,r)&&t(e[r]))return r}function Q7(e,t){for(let r=0;r{const i=t.match(e.matchPattern);if(!i)return null;const s=i[0],u=t.match(e.parsePattern);if(!u)return null;let d=e.valueCallback?e.valueCallback(u[0]):u[0];d=r.valueCallback?r.valueCallback(d):d;const h=t.slice(s.length);return{value:d,rest:h}}}const W7=/^(\d+)(th|st|nd|rd)?/i,e9=/\d+/i,t9={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},n9={any:[/^b/i,/^(a|c)/i]},a9={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},r9={any:[/1/i,/2/i,/3/i,/4/i]},i9={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},o9={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},s9={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},l9={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},c9={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},u9={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},d9={ordinalNumber:J7({matchPattern:W7,parsePattern:e9,valueCallback:e=>parseInt(e,10)}),era:Ml({matchPatterns:t9,defaultMatchWidth:"wide",parsePatterns:n9,defaultParseWidth:"any"}),quarter:Ml({matchPatterns:a9,defaultMatchWidth:"wide",parsePatterns:r9,defaultParseWidth:"any",valueCallback:e=>e+1}),month:Ml({matchPatterns:i9,defaultMatchWidth:"wide",parsePatterns:o9,defaultParseWidth:"any"}),day:Ml({matchPatterns:s9,defaultMatchWidth:"wide",parsePatterns:l9,defaultParseWidth:"any"}),dayPeriod:Ml({matchPatterns:c9,defaultMatchWidth:"any",parsePatterns:u9,defaultParseWidth:"any"})},f9={code:"en-US",formatDistance:k7,formatLong:L7,formatRelative:q7,localize:Z7,match:d9,options:{weekStartsOn:0,firstWeekContainsDate:1}};function h9(e,t,r){const i=E7(),s=r?.locale??i.locale??f9,u=2520,d=td(e,t);if(isNaN(d))throw new RangeError("Invalid time value");const h=Object.assign({},r,{addSuffix:r?.addSuffix,comparison:d}),[g,y]=Ug(r?.in,...d>0?[t,e]:[e,t]),x=M7(y,g),v=(L0(y)-L0(g))/1e3,w=Math.round((x-v)/60);let E;if(w<2)return r?.includeSeconds?x<5?s.formatDistance("lessThanXSeconds",5,h):x<10?s.formatDistance("lessThanXSeconds",10,h):x<20?s.formatDistance("lessThanXSeconds",20,h):x<40?s.formatDistance("halfAMinute",0,h):x<60?s.formatDistance("lessThanXMinutes",1,h):s.formatDistance("xMinutes",1,h):w===0?s.formatDistance("lessThanXMinutes",1,h):s.formatDistance("xMinutes",w,h);if(w<45)return s.formatDistance("xMinutes",w,h);if(w<90)return s.formatDistance("aboutXHours",1,h);if(we.role!=="bastion"||e.public_ip_address&&e.public_ip_address.trim()!=="",{message:"Public IP required for bastion",path:["public_ip_address"]}),p9=_C.partial();function g9({status:e}){const t=e==="ready"?"default":e==="provisioning"?"secondary":e==="failed"?"destructive":"outline";return l.jsx(Ia,{variant:t,className:"capitalize",children:e})}const y9=()=>{const[e,t]=p.useState(""),[r,i]=p.useState(!1),[s,u]=p.useState(!1),[d,h]=p.useState(null),[g,y]=p.useState(""),[x,v]=p.useState(""),[w,E]=p.useState(null),j=da(),S=rn({queryKey:["servers"],queryFn:()=>Ll.listServers()}),N=rn({queryKey:["ssh_keys"],queryFn:()=>is.listSshKeys()}),D=p.useMemo(()=>{const R=new Map;for(const P of N.data??[]){const I=P.name?P.name:"Unnamed key",ee=P.fingerprint?Gi(P.fingerprint,8):"";R.set(P.id,ee?`${I} — ${ee}`:I)}return R},[N.data]),A=_n({resolver:En(_C),defaultValues:{hostname:"",private_ip_address:"",public_ip_address:"",role:"worker",ssh_key_id:"",ssh_user:"",status:"pending"},mode:"onChange"}),O=A.watch("role")==="bastion",C=A.watch("public_ip_address")?.trim()??"",T=O&&C==="",U=mt({mutationFn:R=>Ll.createServer(R),onSuccess:async()=>{await j.invalidateQueries({queryKey:["servers"]}),A.reset(),i(!1),Ee.success("Server created successfully")},onError:R=>{Ee.error(R?.message??"Failed to create server")}}),L=_n({resolver:En(p9),defaultValues:{},mode:"onChange"}),V=L.watch("role")==="bastion",fe=L.watch("public_ip_address")?.trim()??"",ge=V&&fe==="",pe=mt({mutationFn:({id:R,values:P})=>Ll.updateServer(R,P),onSuccess:async()=>{await j.invalidateQueries({queryKey:["servers"]}),u(!1),E(null),Ee.success("Server updated successfully")},onError:R=>{Ee.error(R?.message??"Failed to update server")}}),ae=mt({mutationFn:R=>Ll.deleteServer(R),onSuccess:async()=>{await j.invalidateQueries({queryKey:["servers"]}),h(null),Ee.success("Server deleted successfully")},onError:R=>{Ee.error(R?.message??"Failed to delete server")}}),le=p.useMemo(()=>{const R=S.data??[],P=e.trim().toLowerCase(),I=P?R.filter(Re=>Re.hostname?.toLowerCase().includes(P)||Re.public_ip_address?.toLowerCase().includes(P)||Re.private_ip_address?.toLowerCase().includes(P)||Re.role?.toLowerCase().includes(P)||Re.ssh_user?.toLowerCase().includes(P)):R,ee=x?I.filter(Re=>Re.role===x):I;return g?ee.filter(Re=>Re.status===g):ee},[e,x,g,S.data]),he=R=>{U.mutate(R)},be=R=>{E(R.id),L.reset({hostname:R.hostname??"",public_ip_address:R.public_ip_address??"",private_ip_address:R.private_ip_address??"",role:R.role??"worker",ssh_key_id:R.ssh_key_id??"",ssh_user:R.ssh_user??"",status:R.status??"pending"}),u(!0)};return N.data?.length===0?l.jsx("div",{className:"p-6",children:"Please create an SSH key for your organization first."}):S.isLoading?l.jsx("div",{className:"p-6",children:"Loading servers…"}):S.error?l.jsx("div",{className:"p-6 text-red-500",children:"Error loading servers."}):l.jsxs(Gd,{children:[l.jsxs("div",{className:"space-y-4 p-6",children:[l.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[l.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Servers"}),l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsxs("div",{className:"relative",children:[l.jsx(zr,{className:"absolute top-2.5 left-2 h-4 w-4 opacity-60"}),l.jsx(Fe,{value:e,onChange:R=>t(R.target.value),placeholder:"Search hostname, Public IP, Private IP, role, user…",className:"w-64 pl-8"})]}),l.jsxs(dn,{value:x||"all",onValueChange:R=>v(R==="all"?"":R),children:[l.jsx(hn,{className:"w-36",children:l.jsx(fn,{placeholder:"Role (all)"})}),l.jsxs(mn,{children:[l.jsx(ut,{value:"all",children:"All roles"}),SC.map(R=>l.jsx(ut,{value:R,children:R},R))]})]}),l.jsxs(dn,{value:g||"all",onValueChange:R=>y(R==="all"?"":R),children:[l.jsx(hn,{className:"w-40",children:l.jsx(fn,{placeholder:"Status (all)"})}),l.jsxs(mn,{children:[l.jsx(ut,{value:"all",children:"All statuses"})," ",nd.map(R=>l.jsx(ut,{value:R,children:R},R))]})]}),l.jsxs(Et,{open:r,onOpenChange:i,children:[l.jsx(or,{asChild:!0,children:l.jsxs(se,{onClick:()=>i(!0),children:[l.jsx(ro,{className:"mr-2 h-4 w-4"}),"Create Server"]})}),l.jsxs(Ct,{className:"sm:max-w-lg",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Create server"})}),l.jsx(Cn,{...A,children:l.jsxs("form",{className:"space-y-4",onSubmit:A.handleSubmit(he),children:[l.jsx($e,{control:A.control,name:"hostname",render:({field:R})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Hostname"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"worker-01",...R})}),l.jsx(Be,{})]})}),l.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[l.jsx($e,{control:A.control,name:"public_ip_address",render:({field:R})=>l.jsxs(Ve,{children:[l.jsxs(He,{className:"flex items-center justify-between",children:[l.jsx("span",{children:"Public IP Address"}),l.jsx("span",{className:de("rounded-full px-2 py-0.5 text-xs",O?"bg-amber-100 text-amber-900":"bg-muted text-muted-foreground"),children:O?"Required for bastion":"Optional"})]}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:O?"Required for bastion (e.g. 34.12.56.78)":"34.12.56.78","aria-required":O,"aria-invalid":T||!!A.formState.errors.public_ip_address,required:O,...R,className:de(T&&"border-destructive focus-visible:ring-destructive")})}),O&&l.jsxs("div",{className:"rounded-md border border-amber-200 bg-amber-50 p-2 text-xs text-amber-900",children:["Bastion nodes must have a"," ",l.jsx("span",{className:"font-medium",children:"Public IP"}),"."]}),l.jsx(Be,{})]})}),l.jsx($e,{control:A.control,name:"private_ip_address",render:({field:R})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Private IP Address"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"192.168.10.1",...R})}),l.jsx(Be,{})]})})]}),l.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[l.jsx($e,{control:A.control,name:"role",render:({field:R})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Role"}),l.jsxs(dn,{onValueChange:P=>A.setValue("role",P,{shouldDirty:!0,shouldValidate:!0}),value:R.value,children:[l.jsx(Xe,{children:l.jsx(hn,{children:l.jsx(fn,{placeholder:"Select role"})})}),l.jsxs(mn,{children:[l.jsx(ut,{value:"master",children:"master"}),l.jsx(ut,{value:"worker",children:"worker"}),l.jsx(ut,{value:"bastion",children:"bastion — requires Public IP"})]})]}),l.jsx(Be,{})]})}),l.jsx($e,{control:A.control,name:"ssh_user",render:({field:R})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"SSH user"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"ubuntu",...R})}),l.jsx(Be,{})]})})]}),l.jsx($e,{control:A.control,name:"ssh_key_id",render:({field:R})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"SSH key"}),l.jsxs(dn,{onValueChange:R.onChange,value:R.value,children:[l.jsx(Xe,{children:l.jsx(hn,{children:l.jsx(fn,{placeholder:N.data?.length?"Select SSH key":"No SSH keys found"})})}),l.jsx(mn,{children:N.data.map(P=>l.jsxs(ut,{value:P.id,children:[P.name?P.name:"Unnamed key"," —"," ",Gi(P.fingerprint,8)]},P.id))})]}),l.jsx(Be,{})]})}),l.jsx($e,{control:A.control,name:"status",render:({field:R})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Initial status"}),l.jsxs(dn,{onValueChange:R.onChange,value:R.value,children:[l.jsx(Xe,{children:l.jsx(hn,{children:l.jsx(fn,{placeholder:"pending"})})}),l.jsx(mn,{children:nd.map(P=>l.jsx(ut,{value:P,children:P},P))})]}),l.jsx(Be,{})]})}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{type:"button",variant:"outline",onClick:()=>i(!1),children:"Cancel"}),l.jsx(se,{type:"submit",disabled:U.isPending||A.formState.isSubmitting||!A.formState.isValid,children:U.isPending?"Creating…":"Create"})]})]})})]})]})]})]}),l.jsx("div",{className:"bg-background overflow-hidden rounded-2xl border shadow-sm",children:l.jsx("div",{className:"overflow-x-auto",children:l.jsxs(la,{children:[l.jsx(ca,{children:l.jsxs(et,{children:[l.jsx(ze,{children:"Hostname"}),l.jsx(ze,{children:"IP address"}),l.jsx(ze,{children:"Role"}),l.jsx(ze,{children:"SSH user"}),l.jsx(ze,{children:"SSH key"}),l.jsx(ze,{children:"Status"}),l.jsx(ze,{children:"Created"}),l.jsx(ze,{className:"w-[220px] text-right",children:"Actions"})]})}),l.jsx(ua,{children:le.length===0?l.jsx(et,{children:l.jsx(_e,{colSpan:8,className:"text-muted-foreground py-10 text-center text-sm",children:"No servers found."})}):le.map(R=>l.jsxs(et,{children:[l.jsx(_e,{className:"font-medium",children:R.hostname}),l.jsx(_e,{children:l.jsxs("div",{className:"flex flex-col",children:[l.jsx("span",{className:de("tabular-nums",!R.public_ip_address&&"text-muted-foreground"),children:R.public_ip_address||"—"}),l.jsx("span",{className:"text-muted-foreground tabular-nums",children:R.private_ip_address})]})}),l.jsx(_e,{className:"capitalize",children:l.jsx("span",{className:de(R.role==="bastion"&&"rounded bg-amber-50 px-2 py-0.5 dark:bg-amber-900"),children:R.role})}),l.jsx(_e,{className:"tabular-nums",children:R.ssh_user}),l.jsx(_e,{className:"truncate",children:D.get(R.ssh_key_id)??"—"}),l.jsx(_e,{children:l.jsx(g9,{status:R.status??"pending"})}),l.jsx(_e,{title:R.created_at,children:R.created_at?`${m9(new Date(R.created_at),{addSuffix:!0})}`:"—"}),l.jsx(_e,{className:"text-right",children:l.jsxs("div",{className:"flex justify-end gap-2",children:[l.jsx(se,{variant:"outline",size:"sm",onClick:()=>be(R),children:"Edit"}),l.jsx(se,{variant:"destructive",size:"sm",onClick:()=>h(R.id),disabled:ae.isPending&&d===R.id,children:ae.isPending&&d===R.id?"Deleting…":"Delete"})]})})]},R.id))})]})})})]}),l.jsx(Et,{open:s,onOpenChange:u,children:l.jsxs(Ct,{className:"sm:max-w-lg",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Edit server"})}),l.jsx(Cn,{...L,children:l.jsxs("form",{className:"space-y-4",onSubmit:L.handleSubmit(R=>{w&&pe.mutate({id:w,values:R})}),children:[l.jsx($e,{control:L.control,name:"hostname",render:({field:R})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Hostname"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"worker-01",...R})}),l.jsx(Be,{})]})}),l.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[l.jsx($e,{control:L.control,name:"public_ip_address",render:({field:R})=>l.jsxs(Ve,{children:[l.jsxs(He,{className:"flex items-center justify-between",children:[l.jsx("span",{children:"Public IP Address"}),l.jsx("span",{className:de("rounded-full px-2 py-0.5 text-xs",V?"bg-amber-100 text-amber-900":"bg-muted text-muted-foreground"),children:V?"Required for bastion":"Optional"})]}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:V?"Required for bastion (e.g. 34.12.56.78)":"34.12.56.78","aria-required":V,"aria-invalid":ge||!!L.formState.errors.public_ip_address,required:V,...R,className:de(ge&&"border-destructive focus-visible:ring-destructive")})}),V&&l.jsxs("div",{className:"rounded-md border border-amber-200 bg-amber-50 p-2 text-xs text-amber-900",children:["Bastion nodes must have a ",l.jsx("span",{className:"font-medium",children:"Public IP"}),"."]}),l.jsx(Be,{})]})}),l.jsx($e,{control:L.control,name:"private_ip_address",render:({field:R})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Private IP Address"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"192.168.10.1",...R})}),l.jsx(Be,{})]})})]}),l.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[l.jsx($e,{control:L.control,name:"role",render:({field:R})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Role"}),l.jsxs(dn,{onValueChange:P=>L.setValue("role",P,{shouldDirty:!0,shouldValidate:!0}),value:R.value,children:[l.jsx(Xe,{children:l.jsx(hn,{children:l.jsx(fn,{placeholder:"Select role"})})}),l.jsxs(mn,{children:[l.jsx(ut,{value:"master",children:"master"}),l.jsx(ut,{value:"worker",children:"worker"}),l.jsx(ut,{value:"bastion",children:"bastion — requires Public IP"})]})]}),l.jsx(Be,{})]})}),l.jsx($e,{control:L.control,name:"ssh_user",render:({field:R})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"SSH user"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"ubuntu",...R})}),l.jsx(Be,{})]})})]}),l.jsx($e,{control:L.control,name:"ssh_key_id",render:({field:R})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"SSH key"}),l.jsxs(dn,{onValueChange:R.onChange,value:R.value,children:[l.jsx(Xe,{children:l.jsx(hn,{children:l.jsx(fn,{placeholder:"Select SSH key"})})}),l.jsx(mn,{children:N.data.map(P=>l.jsxs(ut,{value:P.id,children:[P.name?P.name:"Unnamed key"," — ",Gi(P.fingerprint,8)]},P.id))})]}),l.jsx(Be,{})]})}),l.jsx($e,{control:L.control,name:"status",render:({field:R})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Status"}),l.jsxs(dn,{onValueChange:R.onChange,value:R.value,children:[l.jsx(Xe,{children:l.jsx(hn,{children:l.jsx(fn,{placeholder:"pending"})})}),l.jsx(mn,{children:nd.map(P=>l.jsx(ut,{value:P,children:P},P))})]}),l.jsx(Be,{})]})}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{type:"button",variant:"outline",onClick:()=>u(!1),children:"Cancel"}),l.jsx(se,{type:"submit",disabled:pe.isPending,children:pe.isPending?"Saving…":"Save changes"})]})]})})]})}),l.jsx(Et,{open:!!d,onOpenChange:R=>!R&&h(null),children:l.jsxs(Ct,{className:"sm:max-w-md",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Delete server"})}),l.jsx("p",{className:"text-muted-foreground text-sm",children:"This action cannot be undone. Are you sure you want to delete this server?"}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{variant:"outline",onClick:()=>h(null),children:"Cancel"}),l.jsx(se,{variant:"destructive",onClick:()=>d&&ae.mutate(d),disabled:ae.isPending,children:ae.isPending?"Deleting…":"Delete"})]})]})})]})},v9=Oa({name:Zt().trim().min(1,"Name is required").max(100,"Max 100 characters"),comment:Zt().trim().min(1,"Comment is required").max(100,"Max 100 characters"),bits:gi(["2048","3072","4096"]).optional(),type:gi(["rsa","ed25519"]).optional()});function x9(e,t){const r=URL.createObjectURL(e),i=document.createElement("a");i.href=r,i.download=t,document.body.appendChild(i),i.click(),i.remove(),URL.revokeObjectURL(r)}function Ym(e,t="Copied"){navigator.clipboard.writeText(e).then(()=>Ee.success(t)).catch(()=>Ee.error("Copy failed"))}function b9(e){return e?.split(/\s+/)?.[0]??"ssh-key"}const w9=()=>{const[e,t]=p.useState(""),[r,i]=p.useState(!1),[s,u]=p.useState(null),[d,h]=p.useState(null),g=da(),y=rn({queryKey:["ssh"],queryFn:()=>is.listSshKeys()}),x=_n({resolver:En(v9),defaultValues:{name:"",comment:"",type:"rsa",bits:"4096"}}),v=mt({mutationFn:async S=>{const N={name:S.name,comment:S.comment,bits:S.type==="rsa"&&S.bits?Number(S.bits):void 0,type:S.type};return await is.createSshKey(N)},onSuccess:()=>{g.invalidateQueries({queryKey:["ssh"]}),i(!1),x.reset({name:"",comment:"",type:"rsa",bits:"4096"}),Ee.success("SSH Key created")},onError:S=>Ee.error(S?.message??"SSH Key creation failed")}),w=mt({mutationFn:S=>is.revealSshKeyById(S),onSuccess:S=>u(S),onError:S=>Ee.error(S?.message??"Failed to reveal key")}),E=mt({mutationFn:S=>is.deleteSshKey(S),onSuccess:async()=>{await g.invalidateQueries({queryKey:["ssh"]}),h(null),Ee.success("SSH Key deleted")},onError:S=>Ee.error(S?.message??"Delete failed")}),j=p.useMemo(()=>{const S=e.trim().toLowerCase();return S?(y.data??[]).filter(N=>N.name?.toLowerCase().includes(S)||N.fingerprint?.toLowerCase().includes(S)||N.public_key?.toLowerCase().includes(S)):y.data??[]},[e,y.data]);return y.isLoading?l.jsx("div",{className:"p-6",children:"Loading SSH Keys…"}):y.error?l.jsx("div",{className:"p-6 text-red-500",children:"Error Loading SSH Keys"}):l.jsx(Gd,{children:l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"flex items-center justify-between gap-3",children:[l.jsx("h1",{className:"text-2xl font-bold",children:"SSH Keys"}),l.jsx("div",{className:"w-full max-w-sm",children:l.jsx(Fe,{value:e,onChange:S=>t(S.target.value),placeholder:"Search by name, fingerprint or key"})}),l.jsxs(Et,{open:r,onOpenChange:i,children:[l.jsx(or,{asChild:!0,children:l.jsxs(se,{onClick:()=>i(!0),children:[l.jsx(ro,{className:"mr-2 h-4 w-4"}),"Create New Keypair"]})}),l.jsxs(Ct,{className:"sm:max-w-lg",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Create SSH Keypair"})}),l.jsx(Cn,{...x,children:l.jsxs("form",{onSubmit:x.handleSubmit(S=>v.mutate(S)),className:"space-y-4",children:[l.jsx($e,{control:x.control,name:"name",render:({field:S})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Name"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"e.g., CI deploy key",...S})}),l.jsx(Be,{})]})}),l.jsx($e,{control:x.control,name:"comment",render:({field:S})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Comment"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"e.g., deploy@autoglue",...S})}),l.jsx(Be,{})]})}),l.jsx($e,{control:x.control,name:"type",render:({field:S})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Type"}),l.jsx(Xe,{children:l.jsxs(dn,{value:S.value,onValueChange:N=>{S.onChange(N),N==="ed25519"?x.setValue("bits",void 0):x.setValue("bits","4096")},children:[l.jsx(hn,{className:"w-[180px]",children:l.jsx(fn,{placeholder:"Select a ssh key type"})}),l.jsxs(mn,{children:[l.jsx(ut,{value:"rsa",children:"RSA"}),l.jsx(ut,{value:"ed25519",children:"ED25519"})]})]})}),l.jsx(Be,{})]})}),l.jsx($e,{control:x.control,name:"bits",render:({field:S})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Key size"}),l.jsx(Xe,{children:l.jsxs(dn,{value:S.value,disabled:x.watch("type")==="ed25519",onValueChange:S.onChange,children:[l.jsx(hn,{className:"w-[180px]",children:l.jsx(fn,{placeholder:"RSA only"})}),l.jsxs(mn,{children:[l.jsx(ut,{value:"2048",children:"2048"}),l.jsx(ut,{value:"3072",children:"3072"}),l.jsx(ut,{value:"4096",children:"4096"})]})]})}),l.jsx(Be,{})]})}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{type:"button",variant:"outline",onClick:()=>i(!1),disabled:v.isPending,children:"Cancel"}),l.jsx(se,{type:"submit",disabled:v.isPending,children:v.isPending?l.jsxs(l.Fragment,{children:[l.jsx(ps,{className:"mr-2 h-4 w-4 animate-spin"}),"Creating…"]}):"Create"})]})]})})]})]})]}),l.jsx("div",{className:"bg-background overflow-hidden rounded-2xl border shadow-sm",children:l.jsx("div",{className:"overflow-x-auto",children:l.jsxs(la,{children:[l.jsx(ca,{children:l.jsxs(et,{children:[l.jsx(ze,{children:"Name"}),l.jsx(ze,{children:"Public Key"}),l.jsx(ze,{children:"Fingerprint"}),l.jsx(ze,{children:"Created"}),l.jsx(ze,{className:"w-[160px] text-right",children:"Actions"})]})}),l.jsxs(ua,{children:[j.map(S=>{const N=b9(S.public_key);return Gi(S.public_key,18),l.jsxs(et,{children:[l.jsx(_e,{className:"font-medium",children:S.name||"—"}),l.jsx(_e,{children:l.jsxs(o_,{children:[l.jsx(s_,{asChild:!0,children:l.jsx(Ia,{variant:"secondary",className:"whitespace-nowrap",children:N})}),l.jsx(l_,{className:"max-w-[70vw]",children:l.jsx("div",{className:"max-w-full",children:l.jsx("p",{className:"font-mono text-xs break-all",children:S.public_key})})})]})}),l.jsx(_e,{className:"font-mono text-xs",children:S.fingerprint}),l.jsx(_e,{children:S.created_at?new Date(S.created_at).toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"—"}),l.jsxs(_e,{className:"space-x-2 text-right",children:[l.jsx(se,{size:"sm",variant:"outline",onClick:()=>Ym(S.public_key??"","Public key copied"),children:"Copy Pub"}),l.jsx(se,{size:"sm",variant:"outline",onClick:()=>Ym(S.fingerprint??"","Fingerprint copied"),children:"Copy FP"}),l.jsxs(se,{size:"sm",variant:"outline",onClick:()=>w.mutate(S.id),children:[l.jsx(s2,{className:"mr-1 h-4 w-4"}),"Reveal"]}),l.jsxs(se,{size:"sm",variant:"outline",onClick:async()=>{try{const{filename:D,blob:A}=await is.downloadBlob(S.id,"both");x9(A,D)}catch(D){Ee.error(D?.message??"Download failed")}},children:[l.jsx(a2,{className:"mr-1 h-4 w-4"}),"Download"]}),l.jsxs(se,{size:"sm",variant:"destructive",onClick:()=>h(S.id),children:[l.jsx(oS,{className:"mr-1 h-4 w-4"}),"Delete"]})]})]},S.id)}),j.length===0&&l.jsx(et,{children:l.jsx(_e,{colSpan:5,className:"text-muted-foreground py-10 text-center",children:"No SSH Keys"})})]})]})})}),l.jsx(Et,{open:!!s,onOpenChange:S=>!S&&u(null),children:l.jsxs(Ct,{className:"sm:max-w-2xl",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Private Key (read-only)"})}),l.jsx("div",{className:"space-y-3",children:l.jsxs("div",{className:"text-sm",children:[l.jsx("div",{className:"font-medium",children:s?.name??"SSH key"}),l.jsx("div",{className:"text-muted-foreground font-mono text-xs",children:s?.fingerprint}),l.jsx(_E,{readOnly:!0,className:"h-64 w-full rounded-md border p-3 font-mono text-xs",value:s?.private_key??""}),l.jsx("div",{className:"flex justify-end",children:l.jsx(se,{onClick:()=>s?.private_key&&Ym(s.private_key,"Private key copied"),children:"Copy"})})]})})]})}),l.jsx(Et,{open:!!d,onOpenChange:S=>!S&&h(null),children:l.jsxs(Ct,{className:"sm:max-w-md",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Delete SSH Key"})}),l.jsx("p",{className:"text-muted-foreground text-sm",children:"This will permanently delete the keypair. This action cannot be undone."}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{variant:"outline",onClick:()=>h(null),children:"Cancel"}),l.jsx(se,{variant:"destructive",onClick:()=>d&&E.mutate(d),disabled:E.isPending,children:E.isPending?l.jsxs(l.Fragment,{children:[l.jsx(ps,{className:"mr-2 h-4 w-4 animate-spin"}),"Deleting…"]}):"Delete"})]})]})})]})})},zp=["NoSchedule","PreferNoSchedule","NoExecute"],EC=Oa({key:Zt().trim().min(1,"Key is required").max(120,"Max 120 chars"),value:Zt().trim().optional(),effect:gi(zp)}),S9=EC.partial();function _9({t:e}){const t=`${e.key}${e.value?`=${e.value}`:""}${e.effect?`:${e.effect}`:""}`;return l.jsxs(Ia,{variant:"secondary",className:"font-mono text-xs",children:[l.jsx(jd,{className:"mr-1 h-3 w-3"}),t]})}const E9=()=>{const[e,t]=p.useState(""),[r,i]=p.useState(!1),[s,u]=p.useState(!1),[d,h]=p.useState(null),[g,y]=p.useState(null),x=da(),v=rn({queryKey:["taints"],queryFn:()=>Ul.listTaints()}),w=_n({resolver:En(EC),defaultValues:{key:"",value:"",effect:void 0}}),E=mt({mutationFn:C=>Ul.createTaint(C),onSuccess:async()=>{await x.invalidateQueries({queryKey:["taints"]}),w.reset(),i(!1),Ee.success("Taint Created Successfully.")},onError:C=>{Ee.error(C.message??"There was an error while creating Taint")}}),j=C=>{E.mutate(C)},S=_n({resolver:En(S9),defaultValues:{}}),N=mt({mutationFn:({id:C,values:T})=>Ul.updateTaint(C,T),onSuccess:async()=>{await x.invalidateQueries({queryKey:["taints"]}),S.reset(),u(!1),Ee.success("Taint Updated Successfully.")},onError:C=>{Ee.error(C.message??"There was an error while updating Taint")}}),D=C=>{y(C.id),S.reset({key:C.key,value:C.value,effect:C.effect}),u(!0)},A=mt({mutationFn:C=>Ul.deleteTaint(C),onSuccess:async()=>{await x.invalidateQueries({queryKey:["taints"]}),h(null),Ee.success("Taint Deleted Successfully.")},onError:C=>{Ee.error(C.message??"There was an error while deleting Taint")}}),O=p.useMemo(()=>{const C=v.data??[],T=e.trim().toLowerCase();return T?C.filter(U=>U.key?.toLowerCase().includes(T)||U.value?.toLowerCase().includes(T)||U.effect?.toLowerCase().includes(T)):C},[e,v.data]);return v.isLoading?l.jsx("div",{className:"p-6",children:"Loading taints…"}):v.error?l.jsx("div",{className:"p-6 text-red-500",children:"Error loading taints."}):l.jsxs("div",{className:"space-y-4 p-6",children:[l.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[l.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Taints"}),l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsxs("div",{className:"relative",children:[l.jsx(zr,{className:"absolute top-2.5 left-2 h-4 w-4 opacity-60"}),l.jsx(Fe,{value:e,onChange:C=>t(C.target.value),placeholder:"Search taints",className:"w-64 pl-8"})]}),l.jsxs(Et,{open:r,onOpenChange:i,children:[l.jsx(or,{asChild:!0,children:l.jsxs(se,{onClick:()=>i(!0),children:[l.jsx(ro,{className:"mr-2 h-4 w-4"})," Create Taint"]})}),l.jsxs(Ct,{className:"sm:max-w-lg",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Create taint"})}),l.jsx(Cn,{...w,children:l.jsxs("form",{className:"space-y-4",onSubmit:w.handleSubmit(j),children:[l.jsx($e,{control:w.control,name:"key",render:({field:C})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Key"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"dedicated",...C})}),l.jsx(Be,{})]})}),l.jsx($e,{control:w.control,name:"value",render:({field:C})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Value (optional)"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"gpu",...C})}),l.jsx(Be,{})]})}),l.jsx($e,{control:w.control,name:"effect",render:({field:C})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Effect"}),l.jsxs(dn,{onValueChange:C.onChange,value:C.value,children:[l.jsx(Xe,{children:l.jsx(hn,{children:l.jsx(fn,{placeholder:"Select effect"})})}),l.jsx(mn,{children:zp.map(T=>l.jsx(ut,{value:T,children:T},T))})]}),l.jsx(Be,{})]})}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{type:"button",variant:"outline",onClick:()=>i(!1),children:"Cancel"}),l.jsx(se,{type:"submit",disabled:w.formState.isSubmitting,children:w.formState.isSubmitting?"Creating…":"Create"})]})]})})]})]})]})]}),l.jsx("div",{className:"bg-background overflow-hidden rounded-2xl border shadow-sm",children:l.jsx("div",{className:"overflow-x-auto",children:l.jsxs(la,{children:[l.jsx(ca,{children:l.jsxs(et,{children:[l.jsx(ze,{children:"Taint"}),l.jsx(ze,{className:"w-[180px] text-right",children:"Actions"})]})}),l.jsxs(ua,{children:[O.map(C=>l.jsxs(et,{children:[l.jsx(_e,{children:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(_9,{t:C}),l.jsx("code",{className:"text-muted-foreground text-xs",children:Gi(C.id,6)})]})}),l.jsx(_e,{children:l.jsxs("div",{className:"flex justify-end gap-2",children:[l.jsxs(se,{variant:"outline",size:"sm",onClick:()=>D(C),children:[l.jsx(Cd,{className:"mr-2 h-4 w-4"})," Edit"]}),l.jsx(se,{variant:"destructive",size:"sm",onClick:()=>h(C.id),disabled:A.isPending&&d===C.id,children:A.isPending&&d===C.id?"Deleting…":"Delete"})]})})]},C.id)),O.length===0&&l.jsx(et,{children:l.jsxs(_e,{colSpan:3,className:"text-muted-foreground py-10 text-center",children:[l.jsx(Fp,{className:"mx-auto mb-2 h-6 w-6 opacity-60"}),"No taints match your search."]})})]})]})})}),l.jsx(Et,{open:s,onOpenChange:u,children:l.jsxs(Ct,{className:"sm:max-w-lg",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Edit taint"})}),l.jsx(Cn,{...S,children:l.jsxs("form",{className:"space-y-4",onSubmit:S.handleSubmit(C=>{g&&N.mutate({id:g,values:C})}),children:[l.jsx($e,{control:S.control,name:"key",render:({field:C})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Key"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"dedicated",...C})}),l.jsx(Be,{})]})}),l.jsx($e,{control:S.control,name:"value",render:({field:C})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Value (optional)"}),l.jsx(Xe,{children:l.jsx(Fe,{placeholder:"gpu",...C})}),l.jsx(Be,{})]})}),l.jsx($e,{control:S.control,name:"effect",render:({field:C})=>l.jsxs(Ve,{children:[l.jsx(He,{children:"Effect"}),l.jsxs(dn,{onValueChange:C.onChange,value:C.value,children:[l.jsx(Xe,{children:l.jsx(hn,{children:l.jsx(fn,{placeholder:"Select effect"})})}),l.jsx(mn,{children:zp.map(T=>l.jsx(ut,{value:T,children:T},T))})]}),l.jsx(Be,{})]})}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{type:"button",variant:"outline",onClick:()=>u(!1),children:"Cancel"}),l.jsx(se,{type:"submit",disabled:N.isPending,children:N.isPending?"Saving…":"Save changes"})]})]})})]})}),l.jsx(Et,{open:!!d,onOpenChange:C=>!C&&h(null),children:l.jsxs(Ct,{className:"sm:max-w-md",children:[l.jsx(jt,{children:l.jsx(Rt,{children:"Delete taint"})}),l.jsx("p",{className:"text-muted-foreground text-sm",children:"This action cannot be undone. Are you sure you want to delete this taint?"}),l.jsxs(Mt,{className:"gap-2",children:[l.jsx(se,{variant:"outline",onClick:()=>h(null),children:"Cancel"}),l.jsx(se,{variant:"destructive",onClick:()=>d&&A.mutate(d),disabled:A.isPending,children:A.isPending?"Deleting…":"Delete"})]})]})})]})};function C9(){return l.jsxs(LR,{children:[l.jsx(Nn,{path:"/login",element:l.jsx(N0,{})}),l.jsx(Nn,{element:l.jsx(Y3,{}),children:l.jsxs(Nn,{element:l.jsx(X3,{}),children:[l.jsx(Nn,{path:"/me",element:l.jsx(jL,{})}),l.jsx(Nn,{path:"/org/settings",element:l.jsx(w7,{})}),l.jsx(Nn,{path:"/org/members",element:l.jsx(x7,{})}),l.jsx(Nn,{path:"/org/api-keys",element:l.jsx(y7,{})}),l.jsx(Nn,{path:"/ssh",element:l.jsx(w9,{})}),l.jsx(Nn,{path:"/servers",element:l.jsx(y9,{})}),l.jsx(Nn,{path:"/taints",element:l.jsx(E9,{})}),l.jsx(Nn,{path:"/labels",element:l.jsx($I,{})}),l.jsx(Nn,{path:"/annotations",element:l.jsx(PK,{})}),l.jsx(Nn,{path:"/node-pools",element:l.jsx(p7,{})}),l.jsx(Nn,{path:"/admin/jobs",element:l.jsx(II,{})})]})}),l.jsx(Nn,{path:"*",element:l.jsx(N0,{})})]})}gN.createRoot(document.getElementById("root")).render(l.jsx(p.StrictMode,{children:l.jsx(UR,{children:l.jsx(dN,{children:l.jsx(C9,{})})})})); -//# sourceMappingURL=index-DCrfJ1uu.js.map diff --git a/internal/web/dist/assets/index-DCrfJ1uu.js.br b/internal/web/dist/assets/index-DCrfJ1uu.js.br deleted file mode 100644 index a02f46a..0000000 Binary files a/internal/web/dist/assets/index-DCrfJ1uu.js.br and /dev/null differ diff --git a/internal/web/dist/assets/index-DCrfJ1uu.js.gz b/internal/web/dist/assets/index-DCrfJ1uu.js.gz deleted file mode 100644 index 487fd35..0000000 Binary files a/internal/web/dist/assets/index-DCrfJ1uu.js.gz and /dev/null differ diff --git a/internal/web/dist/assets/index-DCrfJ1uu.js.map b/internal/web/dist/assets/index-DCrfJ1uu.js.map deleted file mode 100644 index 2c3b5ed..0000000 --- a/internal/web/dist/assets/index-DCrfJ1uu.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index-DCrfJ1uu.js","sources":["../../../../ui/node_modules/react/cjs/react-jsx-runtime.production.js","../../../../ui/node_modules/react/jsx-runtime.js","../../../../ui/node_modules/next-themes/dist/index.mjs","../../../../ui/src/providers/theme-provider.tsx","../../../../ui/node_modules/@tanstack/query-core/build/modern/subscribable.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/timeoutManager.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/utils.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/focusManager.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/thenable.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/notifyManager.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/onlineManager.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/retryer.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/removable.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/query.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/queryObserver.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/mutation.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/mutationObserver.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/queryCache.js","../../../../ui/node_modules/@tanstack/query-core/build/modern/queryClient.js","../../../../ui/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js","../../../../ui/node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js","../../../../ui/node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../../../../ui/node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../../../../ui/node_modules/@tanstack/react-query/build/modern/suspense.js","../../../../ui/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js","../../../../ui/node_modules/@tanstack/react-query/build/modern/useQuery.js","../../../../ui/node_modules/@tanstack/react-query/build/modern/useMutation.js","../../../../ui/node_modules/lucide-react/dist/esm/shared/src/utils.js","../../../../ui/node_modules/lucide-react/dist/esm/defaultAttributes.js","../../../../ui/node_modules/lucide-react/dist/esm/Icon.js","../../../../ui/node_modules/lucide-react/dist/esm/createLucideIcon.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/boxes.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/building-2.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/check.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/chevron-down.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/chevron-right.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/chevron-up.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/chevrons-up-down.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/circle-check.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/circle-slash-2.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/component.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/download.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/ellipsis.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/eye.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/file-key.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/info.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/key-round.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/link.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/loader-circle.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/octagon-x.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/panel-left.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/pencil.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/plus.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/refresh-cw.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/search.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/server.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/spray-can.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/tags.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/trash-2.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/triangle-alert.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/user-round.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/users.js","../../../../ui/node_modules/lucide-react/dist/esm/icons/x.js","../../../../ui/node_modules/sonner/dist/index.mjs","../../../../ui/src/components/ui/sonner.tsx","../../../../ui/src/providers/index.tsx","../../../../ui/node_modules/scheduler/cjs/scheduler.production.js","../../../../ui/node_modules/scheduler/index.js","../../../../ui/node_modules/react-dom/cjs/react-dom-client.production.js","../../../../ui/node_modules/react-dom/client.js","../../../../ui/src/auth/store.ts","../../../../ui/src/auth/org.ts","../../../../ui/src/sdk/runtime.ts","../../../../ui/src/sdk/models/DtoAnnotationResponse.ts","../../../../ui/src/sdk/models/DtoAttachAnnotationsRequest.ts","../../../../ui/src/sdk/models/DtoAttachLabelsRequest.ts","../../../../ui/src/sdk/models/DtoAttachServersRequest.ts","../../../../ui/src/sdk/models/DtoAttachTaintsRequest.ts","../../../../ui/src/sdk/models/DtoAuthStartResponse.ts","../../../../ui/src/sdk/models/DtoCreateAnnotationRequest.ts","../../../../ui/src/sdk/models/DtoCreateLabelRequest.ts","../../../../ui/src/sdk/models/DtoCreateNodePoolRequest.ts","../../../../ui/src/sdk/models/DtoCreateSSHRequest.ts","../../../../ui/src/sdk/models/DtoCreateServerRequest.ts","../../../../ui/src/sdk/models/DtoCreateTaintRequest.ts","../../../../ui/src/sdk/models/DtoJWK.ts","../../../../ui/src/sdk/models/DtoJWKS.ts","../../../../ui/src/sdk/models/DtoJobStatus.ts","../../../../ui/src/sdk/models/DtoJob.ts","../../../../ui/src/sdk/models/DtoLabelResponse.ts","../../../../ui/src/sdk/models/DtoLogoutRequest.ts","../../../../ui/src/sdk/models/DtoTaintResponse.ts","../../../../ui/src/sdk/models/DtoServerResponse.ts","../../../../ui/src/sdk/models/DtoNodePoolResponse.ts","../../../../ui/src/sdk/models/DtoPageJob.ts","../../../../ui/src/sdk/models/DtoQueueInfo.ts","../../../../ui/src/sdk/models/DtoRefreshRequest.ts","../../../../ui/src/sdk/models/DtoSshResponse.ts","../../../../ui/src/sdk/models/DtoSshRevealResponse.ts","../../../../ui/src/sdk/models/DtoTokenPair.ts","../../../../ui/src/sdk/models/DtoUpdateAnnotationRequest.ts","../../../../ui/src/sdk/models/DtoUpdateLabelRequest.ts","../../../../ui/src/sdk/models/DtoUpdateNodePoolRequest.ts","../../../../ui/src/sdk/models/DtoUpdateServerRequest.ts","../../../../ui/src/sdk/models/DtoUpdateTaintRequest.ts","../../../../ui/src/sdk/models/HandlersCreateUserKeyRequest.ts","../../../../ui/src/sdk/models/ModelsUser.ts","../../../../ui/src/sdk/models/ModelsUserEmail.ts","../../../../ui/src/sdk/models/ModelsOrganization.ts","../../../../ui/src/sdk/models/HandlersMeResponse.ts","../../../../ui/src/sdk/models/HandlersMemberOut.ts","../../../../ui/src/sdk/models/HandlersMemberUpsertReq.ts","../../../../ui/src/sdk/models/HandlersOrgCreateReq.ts","../../../../ui/src/sdk/models/HandlersOrgKeyCreateReq.ts","../../../../ui/src/sdk/models/HandlersOrgKeyCreateResp.ts","../../../../ui/src/sdk/models/HandlersOrgUpdateReq.ts","../../../../ui/src/sdk/models/HandlersUpdateMeRequest.ts","../../../../ui/src/sdk/models/HandlersUserAPIKeyOut.ts","../../../../ui/src/sdk/models/ModelsAPIKey.ts","../../../../ui/src/sdk/apis/AnnotationsApi.ts","../../../../ui/src/sdk/apis/ArcherAdminApi.ts","../../../../ui/src/sdk/apis/AuthApi.ts","../../../../ui/src/sdk/apis/LabelsApi.ts","../../../../ui/src/sdk/apis/MeApi.ts","../../../../ui/src/sdk/apis/MeAPIKeysApi.ts","../../../../ui/src/sdk/apis/NodePoolsApi.ts","../../../../ui/src/sdk/apis/OrgsApi.ts","../../../../ui/src/sdk/apis/ServersApi.ts","../../../../ui/src/sdk/apis/SshApi.ts","../../../../ui/src/sdk/apis/TaintsApi.ts","../../../../ui/src/sdkClient.ts","../../../../ui/src/api/with-refresh.ts","../../../../ui/src/api/me.ts","../../../../ui/node_modules/react-icons/lib/iconContext.mjs","../../../../ui/node_modules/react-icons/lib/iconBase.mjs","../../../../ui/node_modules/react-icons/ai/index.mjs","../../../../ui/node_modules/react-icons/gr/index.mjs","../../../../ui/src/layouts/nav-config.ts","../../../../ui/node_modules/clsx/dist/clsx.mjs","../../../../ui/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../../../../ui/src/lib/utils.ts","../../../../ui/node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../../ui/node_modules/class-variance-authority/dist/index.mjs","../../../../ui/src/components/ui/button.tsx","../../../../ui/node_modules/cmdk/dist/chunk-NZJY6EH4.mjs","../../../../ui/node_modules/@radix-ui/primitive/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-context/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-id/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-portal/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-presence/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../../../../ui/node_modules/tslib/tslib.es6.mjs","../../../../ui/node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../../../../ui/node_modules/use-callback-ref/dist/es2015/assignRef.js","../../../../ui/node_modules/use-callback-ref/dist/es2015/useRef.js","../../../../ui/node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../../../ui/node_modules/use-sidecar/dist/es2015/medium.js","../../../../ui/node_modules/use-sidecar/dist/es2015/exports.js","../../../../ui/node_modules/react-remove-scroll/dist/es2015/medium.js","../../../../ui/node_modules/react-remove-scroll/dist/es2015/UI.js","../../../../ui/node_modules/get-nonce/dist/es2015/index.js","../../../../ui/node_modules/react-style-singleton/dist/es2015/singleton.js","../../../../ui/node_modules/react-style-singleton/dist/es2015/hook.js","../../../../ui/node_modules/react-style-singleton/dist/es2015/component.js","../../../../ui/node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../../../../ui/node_modules/react-remove-scroll-bar/dist/es2015/component.js","../../../../ui/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../../../../ui/node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../../../../ui/node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../../../../ui/node_modules/react-remove-scroll/dist/es2015/sidecar.js","../../../../ui/node_modules/react-remove-scroll/dist/es2015/Combination.js","../../../../ui/node_modules/aria-hidden/dist/es2015/index.js","../../../../ui/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-dialog/dist/index.mjs","../../../../ui/node_modules/cmdk/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../../ui/node_modules/cmdk/dist/index.mjs","../../../../ui/src/components/ui/dialog.tsx","../../../../ui/src/components/ui/command.tsx","../../../../ui/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../../ui/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../../ui/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../../ui/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../../ui/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../../../../ui/node_modules/@radix-ui/react-arrow/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-use-size/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-popper/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-popover/dist/index.mjs","../../../../ui/src/components/ui/popover.tsx","../../../../ui/src/layouts/org-switcher.tsx","../../../../ui/src/hooks/use-me.ts","../../../../ui/node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../../ui/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../../ui/node_modules/use-sync-external-store/shim/index.js","../../../../ui/node_modules/@radix-ui/react-use-is-hydrated/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-avatar/dist/index.mjs","../../../../ui/src/components/ui/avatar.tsx","../../../../ui/src/components/ui/breadcrumb.tsx","../../../../ui/src/hooks/use-mobile.ts","../../../../ui/src/components/ui/input.tsx","../../../../ui/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-separator/dist/index.mjs","../../../../ui/src/components/ui/separator.tsx","../../../../ui/src/components/ui/sheet.tsx","../../../../ui/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-tooltip/dist/index.mjs","../../../../ui/src/components/ui/tooltip.tsx","../../../../ui/src/components/ui/sidebar.tsx","../../../../ui/src/layouts/topbar.tsx","../../../../ui/src/auth/logout.ts","../../../../ui/src/hooks/use-auth-actions.ts","../../../../ui/src/layouts/app-shell.tsx","../../../../ui/src/hooks/use-auth.ts","../../../../ui/src/components/protected-route.tsx","../../../../ui/src/api/annotations.ts","../../../../ui/src/api/labels.ts","../../../../ui/node_modules/react-hook-form/dist/index.esm.mjs","../../../../ui/node_modules/@hookform/resolvers/dist/resolvers.mjs","../../../../ui/node_modules/zod/v4/core/core.js","../../../../ui/node_modules/zod/v4/core/util.js","../../../../ui/node_modules/zod/v4/core/errors.js","../../../../ui/node_modules/zod/v4/core/parse.js","../../../../ui/node_modules/zod/v4/core/regexes.js","../../../../ui/node_modules/zod/v4/core/checks.js","../../../../ui/node_modules/zod/v4/core/doc.js","../../../../ui/node_modules/zod/v4/core/versions.js","../../../../ui/node_modules/zod/v4/core/schemas.js","../../../../ui/node_modules/zod/v4/core/registries.js","../../../../ui/node_modules/zod/v4/core/api.js","../../../../ui/node_modules/@hookform/resolvers/zod/dist/zod.mjs","../../../../ui/node_modules/zod/v4/classic/iso.js","../../../../ui/node_modules/zod/v4/classic/errors.js","../../../../ui/node_modules/zod/v4/classic/parse.js","../../../../ui/node_modules/zod/v4/classic/schemas.js","../../../../ui/src/components/ui/badge.tsx","../../../../ui/node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-label/dist/index.mjs","../../../../ui/src/components/ui/label.tsx","../../../../ui/src/components/ui/form.tsx","../../../../ui/src/components/ui/table.tsx","../../../../ui/src/pages/annotations/annotation-page.tsx","../../../../ui/src/components/ui/card.tsx","../../../../ui/src/pages/auth/login.tsx","../../../../ui/src/api/archer_admin.ts","../../../../ui/node_modules/@radix-ui/number/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-collection/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-direction/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-use-previous/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-select/dist/index.mjs","../../../../ui/src/components/ui/select.tsx","../../../../ui/src/components/ui/textarea.tsx","../../../../ui/src/pages/jobs/jobs-page.tsx","../../../../ui/src/pages/labels/labels-page.tsx","../../../../ui/node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-alert-dialog/dist/index.mjs","../../../../ui/src/components/ui/alert-dialog.tsx","../../../../ui/src/pages/me/me-page.tsx","../../../../ui/src/api/node_pools.ts","../../../../ui/src/api/servers.ts","../../../../ui/src/api/taints.ts","../../../../ui/node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-menu/dist/index.mjs","../../../../ui/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs","../../../../ui/src/components/ui/dropdown-menu.tsx","../../../../ui/src/pages/nodepools/node-pools-page.tsx","../../../../ui/src/pages/org/api-keys.tsx","../../../../ui/src/pages/org/members.tsx","../../../../ui/src/pages/org/settings.tsx","../../../../ui/src/api/ssh.ts","../../../../ui/node_modules/date-fns/constants.js","../../../../ui/node_modules/date-fns/constructFrom.js","../../../../ui/node_modules/date-fns/toDate.js","../../../../ui/node_modules/date-fns/_lib/defaultOptions.js","../../../../ui/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","../../../../ui/node_modules/date-fns/_lib/normalizeDates.js","../../../../ui/node_modules/date-fns/compareAsc.js","../../../../ui/node_modules/date-fns/constructNow.js","../../../../ui/node_modules/date-fns/differenceInCalendarMonths.js","../../../../ui/node_modules/date-fns/_lib/getRoundingMethod.js","../../../../ui/node_modules/date-fns/differenceInMilliseconds.js","../../../../ui/node_modules/date-fns/endOfDay.js","../../../../ui/node_modules/date-fns/endOfMonth.js","../../../../ui/node_modules/date-fns/isLastDayOfMonth.js","../../../../ui/node_modules/date-fns/differenceInMonths.js","../../../../ui/node_modules/date-fns/differenceInSeconds.js","../../../../ui/node_modules/date-fns/locale/en-US/_lib/formatDistance.js","../../../../ui/node_modules/date-fns/locale/_lib/buildFormatLongFn.js","../../../../ui/node_modules/date-fns/locale/en-US/_lib/formatLong.js","../../../../ui/node_modules/date-fns/locale/en-US/_lib/formatRelative.js","../../../../ui/node_modules/date-fns/locale/_lib/buildLocalizeFn.js","../../../../ui/node_modules/date-fns/locale/en-US/_lib/localize.js","../../../../ui/node_modules/date-fns/locale/_lib/buildMatchFn.js","../../../../ui/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","../../../../ui/node_modules/date-fns/locale/en-US/_lib/match.js","../../../../ui/node_modules/date-fns/locale/en-US.js","../../../../ui/node_modules/date-fns/formatDistance.js","../../../../ui/node_modules/date-fns/formatDistanceToNow.js","../../../../ui/src/pages/servers/server-page.tsx","../../../../ui/src/pages/ssh/ssh-page.tsx","../../../../ui/src/pages/taints/taints-page.tsx","../../../../ui/src/App.tsx","../../../../ui/src/main.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","\"use client\";import*as t from\"react\";var M=(e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=[\"light\",\"dark\"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y===\"class\",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n===\"system\"?c():n;p(y)}catch(n){}};var b=[\"light\",\"dark\"],I=\"(prefers-color-scheme: dark)\",O=typeof window==\"undefined\",x=t.createContext(void 0),U={setTheme:e=>{},themes:[]},z=()=>{var e;return(e=t.useContext(x))!=null?e:U},J=e=>t.useContext(x)?t.createElement(t.Fragment,null,e.children):t.createElement(V,{...e}),N=[\"light\",\"dark\"],V=({forcedTheme:e,disableTransitionOnChange:i=!1,enableSystem:s=!0,enableColorScheme:u=!0,storageKey:m=\"theme\",themes:a=N,defaultTheme:l=s?\"system\":\"light\",attribute:h=\"data-theme\",value:d,children:w,nonce:p,scriptProps:R})=>{let[c,n]=t.useState(()=>H(m,l)),[T,y]=t.useState(()=>c===\"system\"?E():c),k=d?Object.values(d):a,S=t.useCallback(o=>{let r=o;if(!r)return;o===\"system\"&&s&&(r=E());let v=d?d[r]:r,C=i?W(p):null,P=document.documentElement,L=g=>{g===\"class\"?(P.classList.remove(...k),v&&P.classList.add(v)):g.startsWith(\"data-\")&&(v?P.setAttribute(g,v):P.removeAttribute(g))};if(Array.isArray(h)?h.forEach(L):L(h),u){let g=b.includes(l)?l:null,D=b.includes(r)?r:g;P.style.colorScheme=D}C==null||C()},[p]),f=t.useCallback(o=>{let r=typeof o==\"function\"?o(c):o;n(r);try{localStorage.setItem(m,r)}catch(v){}},[c]),A=t.useCallback(o=>{let r=E(o);y(r),c===\"system\"&&s&&!e&&S(\"system\")},[c,e]);t.useEffect(()=>{let o=window.matchMedia(I);return o.addListener(A),A(o),()=>o.removeListener(A)},[A]),t.useEffect(()=>{let o=r=>{r.key===m&&(r.newValue?n(r.newValue):f(l))};return window.addEventListener(\"storage\",o),()=>window.removeEventListener(\"storage\",o)},[f]),t.useEffect(()=>{S(e!=null?e:c)},[e,c]);let Q=t.useMemo(()=>({theme:c,setTheme:f,forcedTheme:e,resolvedTheme:c===\"system\"?T:c,themes:s?[...a,\"system\"]:a,systemTheme:s?T:void 0}),[c,f,e,T,s,a]);return t.createElement(x.Provider,{value:Q},t.createElement(_,{forcedTheme:e,storageKey:m,attribute:h,enableSystem:s,enableColorScheme:u,defaultTheme:l,value:d,themes:a,nonce:p,scriptProps:R}),w)},_=t.memo(({forcedTheme:e,storageKey:i,attribute:s,enableSystem:u,enableColorScheme:m,defaultTheme:a,value:l,themes:h,nonce:d,scriptProps:w})=>{let p=JSON.stringify([s,i,a,e,h,l,u,m]).slice(1,-1);return t.createElement(\"script\",{...w,suppressHydrationWarning:!0,nonce:typeof window==\"undefined\"?d:\"\",dangerouslySetInnerHTML:{__html:`(${M.toString()})(${p})`}})}),H=(e,i)=>{if(O)return;let s;try{s=localStorage.getItem(e)||void 0}catch(u){}return s||i},W=e=>{let i=document.createElement(\"style\");return e&&i.setAttribute(\"nonce\",e),i.appendChild(document.createTextNode(\"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\")),document.head.appendChild(i),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(i)},1)}},E=e=>(e||(e=window.matchMedia(I)),e.matches?\"dark\":\"light\");export{J as ThemeProvider,z as useTheme};\n","import type { ReactNode } from \"react\"\nimport { ThemeProvider as NextThemesProvider } from \"next-themes\"\n\nexport type Theme = \"light\" | \"dark\" | \"system\"\n\nexport function ThemeProvider({\n children,\n defaultTheme = \"system\",\n storageKey = \"vite-ui-theme\",\n}: {\n children: ReactNode\n defaultTheme?: Theme\n storageKey?: string\n}) {\n return (\n \n {children}\n \n )\n}\n","// src/subscribable.ts\nvar Subscribable = class {\n constructor() {\n this.listeners = /* @__PURE__ */ new Set();\n this.subscribe = this.subscribe.bind(this);\n }\n subscribe(listener) {\n this.listeners.add(listener);\n this.onSubscribe();\n return () => {\n this.listeners.delete(listener);\n this.onUnsubscribe();\n };\n }\n hasListeners() {\n return this.listeners.size > 0;\n }\n onSubscribe() {\n }\n onUnsubscribe() {\n }\n};\nexport {\n Subscribable\n};\n//# sourceMappingURL=subscribable.js.map","// src/timeoutManager.ts\nvar defaultTimeoutProvider = {\n // We need the wrapper function syntax below instead of direct references to\n // global setTimeout etc.\n //\n // BAD: `setTimeout: setTimeout`\n // GOOD: `setTimeout: (cb, delay) => setTimeout(cb, delay)`\n //\n // If we use direct references here, then anything that wants to spy on or\n // replace the global setTimeout (like tests) won't work since we'll already\n // have a hard reference to the original implementation at the time when this\n // file was imported.\n setTimeout: (callback, delay) => setTimeout(callback, delay),\n clearTimeout: (timeoutId) => clearTimeout(timeoutId),\n setInterval: (callback, delay) => setInterval(callback, delay),\n clearInterval: (intervalId) => clearInterval(intervalId)\n};\nvar TimeoutManager = class {\n // We cannot have TimeoutManager as we must instantiate it with a concrete\n // type at app boot; and if we leave that type, then any new timer provider\n // would need to support ReturnType, which is infeasible.\n //\n // We settle for type safety for the TimeoutProvider type, and accept that\n // this class is unsafe internally to allow for extension.\n #provider = defaultTimeoutProvider;\n #providerCalled = false;\n setTimeoutProvider(provider) {\n if (process.env.NODE_ENV !== \"production\") {\n if (this.#providerCalled && provider !== this.#provider) {\n console.error(\n `[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`,\n { previous: this.#provider, provider }\n );\n }\n }\n this.#provider = provider;\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = false;\n }\n }\n setTimeout(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setTimeout(callback, delay);\n }\n clearTimeout(timeoutId) {\n this.#provider.clearTimeout(timeoutId);\n }\n setInterval(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setInterval(callback, delay);\n }\n clearInterval(intervalId) {\n this.#provider.clearInterval(intervalId);\n }\n};\nvar timeoutManager = new TimeoutManager();\nfunction systemSetTimeoutZero(callback) {\n setTimeout(callback, 0);\n}\nexport {\n TimeoutManager,\n defaultTimeoutProvider,\n systemSetTimeoutZero,\n timeoutManager\n};\n//# sourceMappingURL=timeoutManager.js.map","// src/utils.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {\n}\nfunction functionalUpdate(updater, input) {\n return typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n return typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveStaleTime(staleTime, query) {\n return typeof staleTime === \"function\" ? staleTime(query) : staleTime;\n}\nfunction resolveEnabled(enabled, query) {\n return typeof enabled === \"function\" ? enabled(query) : enabled;\n}\nfunction matchQuery(filters, query) {\n const {\n type = \"all\",\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale\n } = filters;\n if (queryKey) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false;\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false;\n }\n }\n if (type !== \"all\") {\n const isActive = query.isActive();\n if (type === \"active\" && !isActive) {\n return false;\n }\n if (type === \"inactive\" && isActive) {\n return false;\n }\n }\n if (typeof stale === \"boolean\" && query.isStale() !== stale) {\n return false;\n }\n if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n return false;\n }\n if (predicate && !predicate(query)) {\n return false;\n }\n return true;\n}\nfunction matchMutation(filters, mutation) {\n const { exact, status, predicate, mutationKey } = filters;\n if (mutationKey) {\n if (!mutation.options.mutationKey) {\n return false;\n }\n if (exact) {\n if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n return false;\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false;\n }\n }\n if (status && mutation.state.status !== status) {\n return false;\n }\n if (predicate && !predicate(mutation)) {\n return false;\n }\n return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n const hashFn = options?.queryKeyHashFn || hashKey;\n return hashFn(queryKey);\n}\nfunction hashKey(queryKey) {\n return JSON.stringify(\n queryKey,\n (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n result[key] = val[key];\n return result;\n }, {}) : val\n );\n}\nfunction partialMatchKey(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n return Object.keys(b).every((key) => partialMatchKey(a[key], b[key]));\n }\n return false;\n}\nvar hasOwn = Object.prototype.hasOwnProperty;\nfunction replaceEqualDeep(a, b) {\n if (a === b) {\n return a;\n }\n const array = isPlainArray(a) && isPlainArray(b);\n if (!array && !(isPlainObject(a) && isPlainObject(b))) return b;\n const aItems = array ? a : Object.keys(a);\n const aSize = aItems.length;\n const bItems = array ? b : Object.keys(b);\n const bSize = bItems.length;\n const copy = array ? new Array(bSize) : {};\n let equalItems = 0;\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i];\n const aItem = a[key];\n const bItem = b[key];\n if (aItem === bItem) {\n copy[key] = aItem;\n if (array ? i < aSize : hasOwn.call(a, key)) equalItems++;\n continue;\n }\n if (aItem === null || bItem === null || typeof aItem !== \"object\" || typeof bItem !== \"object\") {\n copy[key] = bItem;\n continue;\n }\n const v = replaceEqualDeep(aItem, bItem);\n copy[key] = v;\n if (v === aItem) equalItems++;\n }\n return aSize === bSize && equalItems === aSize ? a : copy;\n}\nfunction shallowEqualObjects(a, b) {\n if (!b || Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n}\nfunction isPlainArray(value) {\n return Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n if (!hasObjectPrototype(o)) {\n return false;\n }\n const ctor = o.constructor;\n if (ctor === void 0) {\n return true;\n }\n const prot = ctor.prototype;\n if (!hasObjectPrototype(prot)) {\n return false;\n }\n if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n return false;\n }\n if (Object.getPrototypeOf(o) !== Object.prototype) {\n return false;\n }\n return true;\n}\nfunction hasObjectPrototype(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n return new Promise((resolve) => {\n timeoutManager.setTimeout(resolve, timeout);\n });\n}\nfunction replaceData(prevData, data, options) {\n if (typeof options.structuralSharing === \"function\") {\n return options.structuralSharing(prevData, data);\n } else if (options.structuralSharing !== false) {\n if (process.env.NODE_ENV !== \"production\") {\n try {\n return replaceEqualDeep(prevData, data);\n } catch (error) {\n console.error(\n `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`\n );\n throw error;\n }\n }\n return replaceEqualDeep(prevData, data);\n }\n return data;\n}\nfunction keepPreviousData(previousData) {\n return previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n const newItems = [...items, item];\n return max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n const newItems = [item, ...items];\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\nvar skipToken = Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n if (process.env.NODE_ENV !== \"production\") {\n if (options.queryFn === skipToken) {\n console.error(\n `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`\n );\n }\n }\n if (!options.queryFn && fetchOptions?.initialPromise) {\n return () => fetchOptions.initialPromise;\n }\n if (!options.queryFn || options.queryFn === skipToken) {\n return () => Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));\n }\n return options.queryFn;\n}\nfunction shouldThrowError(throwOnError, params) {\n if (typeof throwOnError === \"function\") {\n return throwOnError(...params);\n }\n return !!throwOnError;\n}\nexport {\n addToEnd,\n addToStart,\n ensureQueryFn,\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n isPlainArray,\n isPlainObject,\n isServer,\n isValidTimeout,\n keepPreviousData,\n matchMutation,\n matchQuery,\n noop,\n partialMatchKey,\n replaceData,\n replaceEqualDeep,\n resolveEnabled,\n resolveStaleTime,\n shallowEqualObjects,\n shouldThrowError,\n skipToken,\n sleep,\n timeUntilStale\n};\n//# sourceMappingURL=utils.js.map","// src/focusManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar FocusManager = class extends Subscribable {\n #focused;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onFocus) => {\n if (!isServer && window.addEventListener) {\n const listener = () => onFocus();\n window.addEventListener(\"visibilitychange\", listener, false);\n return () => {\n window.removeEventListener(\"visibilitychange\", listener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup((focused) => {\n if (typeof focused === \"boolean\") {\n this.setFocused(focused);\n } else {\n this.onFocus();\n }\n });\n }\n setFocused(focused) {\n const changed = this.#focused !== focused;\n if (changed) {\n this.#focused = focused;\n this.onFocus();\n }\n }\n onFocus() {\n const isFocused = this.isFocused();\n this.listeners.forEach((listener) => {\n listener(isFocused);\n });\n }\n isFocused() {\n if (typeof this.#focused === \"boolean\") {\n return this.#focused;\n }\n return globalThis.document?.visibilityState !== \"hidden\";\n }\n};\nvar focusManager = new FocusManager();\nexport {\n FocusManager,\n focusManager\n};\n//# sourceMappingURL=focusManager.js.map","// src/thenable.ts\nimport { noop } from \"./utils.js\";\nfunction pendingThenable() {\n let resolve;\n let reject;\n const thenable = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n thenable.status = \"pending\";\n thenable.catch(() => {\n });\n function finalize(data) {\n Object.assign(thenable, data);\n delete thenable.resolve;\n delete thenable.reject;\n }\n thenable.resolve = (value) => {\n finalize({\n status: \"fulfilled\",\n value\n });\n resolve(value);\n };\n thenable.reject = (reason) => {\n finalize({\n status: \"rejected\",\n reason\n });\n reject(reason);\n };\n return thenable;\n}\nfunction tryResolveSync(promise) {\n let data;\n promise.then((result) => {\n data = result;\n return result;\n }, noop)?.catch(noop);\n if (data !== void 0) {\n return { data };\n }\n return void 0;\n}\nexport {\n pendingThenable,\n tryResolveSync\n};\n//# sourceMappingURL=thenable.js.map","// src/notifyManager.ts\nimport { systemSetTimeoutZero } from \"./timeoutManager.js\";\nvar defaultScheduler = systemSetTimeoutZero;\nfunction createNotifyManager() {\n let queue = [];\n let transactions = 0;\n let notifyFn = (callback) => {\n callback();\n };\n let batchNotifyFn = (callback) => {\n callback();\n };\n let scheduleFn = defaultScheduler;\n const schedule = (callback) => {\n if (transactions) {\n queue.push(callback);\n } else {\n scheduleFn(() => {\n notifyFn(callback);\n });\n }\n };\n const flush = () => {\n const originalQueue = queue;\n queue = [];\n if (originalQueue.length) {\n scheduleFn(() => {\n batchNotifyFn(() => {\n originalQueue.forEach((callback) => {\n notifyFn(callback);\n });\n });\n });\n }\n };\n return {\n batch: (callback) => {\n let result;\n transactions++;\n try {\n result = callback();\n } finally {\n transactions--;\n if (!transactions) {\n flush();\n }\n }\n return result;\n },\n /**\n * All calls to the wrapped function will be batched.\n */\n batchCalls: (callback) => {\n return (...args) => {\n schedule(() => {\n callback(...args);\n });\n };\n },\n schedule,\n /**\n * Use this method to set a custom notify function.\n * This can be used to for example wrap notifications with `React.act` while running tests.\n */\n setNotifyFunction: (fn) => {\n notifyFn = fn;\n },\n /**\n * Use this method to set a custom function to batch notifications together into a single tick.\n * By default React Query will use the batch function provided by ReactDOM or React Native.\n */\n setBatchNotifyFunction: (fn) => {\n batchNotifyFn = fn;\n },\n setScheduler: (fn) => {\n scheduleFn = fn;\n }\n };\n}\nvar notifyManager = createNotifyManager();\nexport {\n createNotifyManager,\n defaultScheduler,\n notifyManager\n};\n//# sourceMappingURL=notifyManager.js.map","// src/onlineManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar OnlineManager = class extends Subscribable {\n #online = true;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onOnline) => {\n if (!isServer && window.addEventListener) {\n const onlineListener = () => onOnline(true);\n const offlineListener = () => onOnline(false);\n window.addEventListener(\"online\", onlineListener, false);\n window.addEventListener(\"offline\", offlineListener, false);\n return () => {\n window.removeEventListener(\"online\", onlineListener);\n window.removeEventListener(\"offline\", offlineListener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup(this.setOnline.bind(this));\n }\n setOnline(online) {\n const changed = this.#online !== online;\n if (changed) {\n this.#online = online;\n this.listeners.forEach((listener) => {\n listener(online);\n });\n }\n }\n isOnline() {\n return this.#online;\n }\n};\nvar onlineManager = new OnlineManager();\nexport {\n OnlineManager,\n onlineManager\n};\n//# sourceMappingURL=onlineManager.js.map","// src/retryer.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport { isServer, sleep } from \"./utils.js\";\nfunction defaultRetryDelay(failureCount) {\n return Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n return (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\nvar CancelledError = class extends Error {\n constructor(options) {\n super(\"CancelledError\");\n this.revert = options?.revert;\n this.silent = options?.silent;\n }\n};\nfunction isCancelledError(value) {\n return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n let isRetryCancelled = false;\n let failureCount = 0;\n let continueFn;\n const thenable = pendingThenable();\n const isResolved = () => thenable.status !== \"pending\";\n const cancel = (cancelOptions) => {\n if (!isResolved()) {\n const error = new CancelledError(cancelOptions);\n reject(error);\n config.onCancel?.(error);\n }\n };\n const cancelRetry = () => {\n isRetryCancelled = true;\n };\n const continueRetry = () => {\n isRetryCancelled = false;\n };\n const canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n const canStart = () => canFetch(config.networkMode) && config.canRun();\n const resolve = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.resolve(value);\n }\n };\n const reject = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.reject(value);\n }\n };\n const pause = () => {\n return new Promise((continueResolve) => {\n continueFn = (value) => {\n if (isResolved() || canContinue()) {\n continueResolve(value);\n }\n };\n config.onPause?.();\n }).then(() => {\n continueFn = void 0;\n if (!isResolved()) {\n config.onContinue?.();\n }\n });\n };\n const run = () => {\n if (isResolved()) {\n return;\n }\n let promiseOrValue;\n const initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n try {\n promiseOrValue = initialPromise ?? config.fn();\n } catch (error) {\n promiseOrValue = Promise.reject(error);\n }\n Promise.resolve(promiseOrValue).then(resolve).catch((error) => {\n if (isResolved()) {\n return;\n }\n const retry = config.retry ?? (isServer ? 0 : 3);\n const retryDelay = config.retryDelay ?? defaultRetryDelay;\n const delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n const shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n if (isRetryCancelled || !shouldRetry) {\n reject(error);\n return;\n }\n failureCount++;\n config.onFail?.(failureCount, error);\n sleep(delay).then(() => {\n return canContinue() ? void 0 : pause();\n }).then(() => {\n if (isRetryCancelled) {\n reject(error);\n } else {\n run();\n }\n });\n });\n };\n return {\n promise: thenable,\n status: () => thenable.status,\n cancel,\n continue: () => {\n continueFn?.();\n return thenable;\n },\n cancelRetry,\n continueRetry,\n canStart,\n start: () => {\n if (canStart()) {\n run();\n } else {\n pause().then(run);\n }\n return thenable;\n }\n };\n}\nexport {\n CancelledError,\n canFetch,\n createRetryer,\n isCancelledError\n};\n//# sourceMappingURL=retryer.js.map","// src/removable.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nimport { isServer, isValidTimeout } from \"./utils.js\";\nvar Removable = class {\n #gcTimeout;\n destroy() {\n this.clearGcTimeout();\n }\n scheduleGc() {\n this.clearGcTimeout();\n if (isValidTimeout(this.gcTime)) {\n this.#gcTimeout = timeoutManager.setTimeout(() => {\n this.optionalRemove();\n }, this.gcTime);\n }\n }\n updateGcTime(newGcTime) {\n this.gcTime = Math.max(\n this.gcTime || 0,\n newGcTime ?? (isServer ? Infinity : 5 * 60 * 1e3)\n );\n }\n clearGcTimeout() {\n if (this.#gcTimeout) {\n timeoutManager.clearTimeout(this.#gcTimeout);\n this.#gcTimeout = void 0;\n }\n }\n};\nexport {\n Removable\n};\n//# sourceMappingURL=removable.js.map","// src/query.ts\nimport {\n ensureQueryFn,\n noop,\n replaceData,\n resolveEnabled,\n resolveStaleTime,\n skipToken,\n timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { CancelledError, canFetch, createRetryer } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nvar Query = class extends Removable {\n #initialState;\n #revertState;\n #cache;\n #client;\n #retryer;\n #defaultOptions;\n #abortSignalConsumed;\n constructor(config) {\n super();\n this.#abortSignalConsumed = false;\n this.#defaultOptions = config.defaultOptions;\n this.setOptions(config.options);\n this.observers = [];\n this.#client = config.client;\n this.#cache = this.#client.getQueryCache();\n this.queryKey = config.queryKey;\n this.queryHash = config.queryHash;\n this.#initialState = getDefaultState(this.options);\n this.state = config.state ?? this.#initialState;\n this.scheduleGc();\n }\n get meta() {\n return this.options.meta;\n }\n get promise() {\n return this.#retryer?.promise;\n }\n setOptions(options) {\n this.options = { ...this.#defaultOptions, ...options };\n this.updateGcTime(this.options.gcTime);\n if (this.state && this.state.data === void 0) {\n const defaultState = getDefaultState(this.options);\n if (defaultState.data !== void 0) {\n this.setState(\n successState(defaultState.data, defaultState.dataUpdatedAt)\n );\n this.#initialState = defaultState;\n }\n }\n }\n optionalRemove() {\n if (!this.observers.length && this.state.fetchStatus === \"idle\") {\n this.#cache.remove(this);\n }\n }\n setData(newData, options) {\n const data = replaceData(this.state.data, newData, this.options);\n this.#dispatch({\n data,\n type: \"success\",\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual\n });\n return data;\n }\n setState(state, setStateOptions) {\n this.#dispatch({ type: \"setState\", state, setStateOptions });\n }\n cancel(options) {\n const promise = this.#retryer?.promise;\n this.#retryer?.cancel(options);\n return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n }\n destroy() {\n super.destroy();\n this.cancel({ silent: true });\n }\n reset() {\n this.destroy();\n this.setState(this.#initialState);\n }\n isActive() {\n return this.observers.some(\n (observer) => resolveEnabled(observer.options.enabled, this) !== false\n );\n }\n isDisabled() {\n if (this.getObserversCount() > 0) {\n return !this.isActive();\n }\n return this.options.queryFn === skipToken || this.state.dataUpdateCount + this.state.errorUpdateCount === 0;\n }\n isStatic() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => resolveStaleTime(observer.options.staleTime, this) === \"static\"\n );\n }\n return false;\n }\n isStale() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => observer.getCurrentResult().isStale\n );\n }\n return this.state.data === void 0 || this.state.isInvalidated;\n }\n isStaleByTime(staleTime = 0) {\n if (this.state.data === void 0) {\n return true;\n }\n if (staleTime === \"static\") {\n return false;\n }\n if (this.state.isInvalidated) {\n return true;\n }\n return !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n }\n onFocus() {\n const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n onOnline() {\n const observer = this.observers.find((x) => x.shouldFetchOnReconnect());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n addObserver(observer) {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer);\n this.clearGcTimeout();\n this.#cache.notify({ type: \"observerAdded\", query: this, observer });\n }\n }\n removeObserver(observer) {\n if (this.observers.includes(observer)) {\n this.observers = this.observers.filter((x) => x !== observer);\n if (!this.observers.length) {\n if (this.#retryer) {\n if (this.#abortSignalConsumed) {\n this.#retryer.cancel({ revert: true });\n } else {\n this.#retryer.cancelRetry();\n }\n }\n this.scheduleGc();\n }\n this.#cache.notify({ type: \"observerRemoved\", query: this, observer });\n }\n }\n getObserversCount() {\n return this.observers.length;\n }\n invalidate() {\n if (!this.state.isInvalidated) {\n this.#dispatch({ type: \"invalidate\" });\n }\n }\n async fetch(options, fetchOptions) {\n if (this.state.fetchStatus !== \"idle\" && // If the promise in the retyer is already rejected, we have to definitely\n // re-start the fetch; there is a chance that the query is still in a\n // pending state when that happens\n this.#retryer?.status() !== \"rejected\") {\n if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) {\n this.cancel({ silent: true });\n } else if (this.#retryer) {\n this.#retryer.continueRetry();\n return this.#retryer.promise;\n }\n }\n if (options) {\n this.setOptions(options);\n }\n if (!this.options.queryFn) {\n const observer = this.observers.find((x) => x.options.queryFn);\n if (observer) {\n this.setOptions(observer.options);\n }\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (!Array.isArray(this.options.queryKey)) {\n console.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`\n );\n }\n }\n const abortController = new AbortController();\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n this.#abortSignalConsumed = true;\n return abortController.signal;\n }\n });\n };\n const fetchFn = () => {\n const queryFn = ensureQueryFn(this.options, fetchOptions);\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: this.#client,\n queryKey: this.queryKey,\n meta: this.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n this.#abortSignalConsumed = false;\n if (this.options.persister) {\n return this.options.persister(\n queryFn,\n queryFnContext,\n this\n );\n }\n return queryFn(queryFnContext);\n };\n const createFetchContext = () => {\n const context2 = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n client: this.#client,\n state: this.state,\n fetchFn\n };\n addSignalProperty(context2);\n return context2;\n };\n const context = createFetchContext();\n this.options.behavior?.onFetch(context, this);\n this.#revertState = this.state;\n if (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) {\n this.#dispatch({ type: \"fetch\", meta: context.fetchOptions?.meta });\n }\n this.#retryer = createRetryer({\n initialPromise: fetchOptions?.initialPromise,\n fn: context.fetchFn,\n onCancel: (error) => {\n if (error instanceof CancelledError && error.revert) {\n this.setState({\n ...this.#revertState,\n fetchStatus: \"idle\"\n });\n }\n abortController.abort();\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue: () => {\n this.#dispatch({ type: \"continue\" });\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n canRun: () => true\n });\n try {\n const data = await this.#retryer.start();\n if (data === void 0) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`\n );\n }\n throw new Error(`${this.queryHash} data is undefined`);\n }\n this.setData(data);\n this.#cache.config.onSuccess?.(data, this);\n this.#cache.config.onSettled?.(\n data,\n this.state.error,\n this\n );\n return data;\n } catch (error) {\n if (error instanceof CancelledError) {\n if (error.silent) {\n return this.#retryer.promise;\n } else if (error.revert) {\n if (this.state.data === void 0) {\n throw error;\n }\n return this.state.data;\n }\n }\n this.#dispatch({\n type: \"error\",\n error\n });\n this.#cache.config.onError?.(\n error,\n this\n );\n this.#cache.config.onSettled?.(\n this.state.data,\n error,\n this\n );\n throw error;\n } finally {\n this.scheduleGc();\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n fetchStatus: \"paused\"\n };\n case \"continue\":\n return {\n ...state,\n fetchStatus: \"fetching\"\n };\n case \"fetch\":\n return {\n ...state,\n ...fetchState(state.data, this.options),\n fetchMeta: action.meta ?? null\n };\n case \"success\":\n const newState = {\n ...state,\n ...successState(action.data, action.dataUpdatedAt),\n dataUpdateCount: state.dataUpdateCount + 1,\n ...!action.manual && {\n fetchStatus: \"idle\",\n fetchFailureCount: 0,\n fetchFailureReason: null\n }\n };\n this.#revertState = action.manual ? newState : void 0;\n return newState;\n case \"error\":\n const error = action.error;\n return {\n ...state,\n error,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error,\n fetchStatus: \"idle\",\n status: \"error\"\n };\n case \"invalidate\":\n return {\n ...state,\n isInvalidated: true\n };\n case \"setState\":\n return {\n ...state,\n ...action.state\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.observers.forEach((observer) => {\n observer.onQueryUpdate();\n });\n this.#cache.notify({ query: this, type: \"updated\", action });\n });\n }\n};\nfunction fetchState(data, options) {\n return {\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n ...data === void 0 && {\n error: null,\n status: \"pending\"\n }\n };\n}\nfunction successState(data, dataUpdatedAt) {\n return {\n data,\n dataUpdatedAt: dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: \"success\"\n };\n}\nfunction getDefaultState(options) {\n const data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n const hasData = data !== void 0;\n const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? \"success\" : \"pending\",\n fetchStatus: \"idle\"\n };\n}\nexport {\n Query,\n fetchState\n};\n//# sourceMappingURL=query.js.map","// src/queryObserver.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport {\n isServer,\n isValidTimeout,\n noop,\n replaceData,\n resolveEnabled,\n resolveStaleTime,\n shallowEqualObjects,\n timeUntilStale\n} from \"./utils.js\";\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar QueryObserver = class extends Subscribable {\n constructor(client, options) {\n super();\n this.options = options;\n this.#client = client;\n this.#selectError = null;\n this.#currentThenable = pendingThenable();\n this.bindMethods();\n this.setOptions(options);\n }\n #client;\n #currentQuery = void 0;\n #currentQueryInitialState = void 0;\n #currentResult = void 0;\n #currentResultState;\n #currentResultOptions;\n #currentThenable;\n #selectError;\n #selectFn;\n #selectResult;\n // This property keeps track of the last query with defined data.\n // It will be used to pass the previous data and query to the placeholder function between renders.\n #lastQueryWithDefinedData;\n #staleTimeoutId;\n #refetchIntervalId;\n #currentRefetchInterval;\n #trackedProps = /* @__PURE__ */ new Set();\n bindMethods() {\n this.refetch = this.refetch.bind(this);\n }\n onSubscribe() {\n if (this.listeners.size === 1) {\n this.#currentQuery.addObserver(this);\n if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n this.#executeFetch();\n } else {\n this.updateResult();\n }\n this.#updateTimers();\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.destroy();\n }\n }\n shouldFetchOnReconnect() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnReconnect\n );\n }\n shouldFetchOnWindowFocus() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnWindowFocus\n );\n }\n destroy() {\n this.listeners = /* @__PURE__ */ new Set();\n this.#clearStaleTimeout();\n this.#clearRefetchInterval();\n this.#currentQuery.removeObserver(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n const prevQuery = this.#currentQuery;\n this.options = this.#client.defaultQueryOptions(options);\n if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveEnabled(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n throw new Error(\n \"Expected enabled to be a boolean or a callback that returns a boolean\"\n );\n }\n this.#updateQuery();\n this.#currentQuery.setOptions(this.options);\n if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getQueryCache().notify({\n type: \"observerOptionsUpdated\",\n query: this.#currentQuery,\n observer: this\n });\n }\n const mounted = this.hasListeners();\n if (mounted && shouldFetchOptionally(\n this.#currentQuery,\n prevQuery,\n this.options,\n prevOptions\n )) {\n this.#executeFetch();\n }\n this.updateResult();\n if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n this.#updateStaleTimeout();\n }\n const nextRefetchInterval = this.#computeRefetchInterval();\n if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n this.#updateRefetchInterval(nextRefetchInterval);\n }\n }\n getOptimisticResult(options) {\n const query = this.#client.getQueryCache().build(this.#client, options);\n const result = this.createResult(query, options);\n if (shouldAssignObserverCurrentProperties(this, result)) {\n this.#currentResult = result;\n this.#currentResultOptions = this.options;\n this.#currentResultState = this.#currentQuery.state;\n }\n return result;\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n trackResult(result, onPropTracked) {\n return new Proxy(result, {\n get: (target, key) => {\n this.trackProp(key);\n onPropTracked?.(key);\n if (key === \"promise\") {\n this.trackProp(\"data\");\n if (!this.options.experimental_prefetchInRender && this.#currentThenable.status === \"pending\") {\n this.#currentThenable.reject(\n new Error(\n \"experimental_prefetchInRender feature flag is not enabled\"\n )\n );\n }\n }\n return Reflect.get(target, key);\n }\n });\n }\n trackProp(key) {\n this.#trackedProps.add(key);\n }\n getCurrentQuery() {\n return this.#currentQuery;\n }\n refetch({ ...options } = {}) {\n return this.fetch({\n ...options\n });\n }\n fetchOptimistic(options) {\n const defaultedOptions = this.#client.defaultQueryOptions(options);\n const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n return query.fetch().then(() => this.createResult(query, defaultedOptions));\n }\n fetch(fetchOptions) {\n return this.#executeFetch({\n ...fetchOptions,\n cancelRefetch: fetchOptions.cancelRefetch ?? true\n }).then(() => {\n this.updateResult();\n return this.#currentResult;\n });\n }\n #executeFetch(fetchOptions) {\n this.#updateQuery();\n let promise = this.#currentQuery.fetch(\n this.options,\n fetchOptions\n );\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop);\n }\n return promise;\n }\n #updateStaleTimeout() {\n this.#clearStaleTimeout();\n const staleTime = resolveStaleTime(\n this.options.staleTime,\n this.#currentQuery\n );\n if (isServer || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n return;\n }\n const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n const timeout = time + 1;\n this.#staleTimeoutId = timeoutManager.setTimeout(() => {\n if (!this.#currentResult.isStale) {\n this.updateResult();\n }\n }, timeout);\n }\n #computeRefetchInterval() {\n return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n }\n #updateRefetchInterval(nextInterval) {\n this.#clearRefetchInterval();\n this.#currentRefetchInterval = nextInterval;\n if (isServer || resolveEnabled(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n return;\n }\n this.#refetchIntervalId = timeoutManager.setInterval(() => {\n if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n this.#executeFetch();\n }\n }, this.#currentRefetchInterval);\n }\n #updateTimers() {\n this.#updateStaleTimeout();\n this.#updateRefetchInterval(this.#computeRefetchInterval());\n }\n #clearStaleTimeout() {\n if (this.#staleTimeoutId) {\n timeoutManager.clearTimeout(this.#staleTimeoutId);\n this.#staleTimeoutId = void 0;\n }\n }\n #clearRefetchInterval() {\n if (this.#refetchIntervalId) {\n timeoutManager.clearInterval(this.#refetchIntervalId);\n this.#refetchIntervalId = void 0;\n }\n }\n createResult(query, options) {\n const prevQuery = this.#currentQuery;\n const prevOptions = this.options;\n const prevResult = this.#currentResult;\n const prevResultState = this.#currentResultState;\n const prevResultOptions = this.#currentResultOptions;\n const queryChange = query !== prevQuery;\n const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n const { state } = query;\n let newState = { ...state };\n let isPlaceholderData = false;\n let data;\n if (options._optimisticResults) {\n const mounted = this.hasListeners();\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n if (fetchOnMount || fetchOptionally) {\n newState = {\n ...newState,\n ...fetchState(state.data, query.options)\n };\n }\n if (options._optimisticResults === \"isRestoring\") {\n newState.fetchStatus = \"idle\";\n }\n }\n let { error, errorUpdatedAt, status } = newState;\n data = newState.data;\n let skipSelect = false;\n if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n let placeholderData;\n if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n placeholderData = prevResult.data;\n skipSelect = true;\n } else {\n placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(\n this.#lastQueryWithDefinedData?.state.data,\n this.#lastQueryWithDefinedData\n ) : options.placeholderData;\n }\n if (placeholderData !== void 0) {\n status = \"success\";\n data = replaceData(\n prevResult?.data,\n placeholderData,\n options\n );\n isPlaceholderData = true;\n }\n }\n if (options.select && data !== void 0 && !skipSelect) {\n if (prevResult && data === prevResultState?.data && options.select === this.#selectFn) {\n data = this.#selectResult;\n } else {\n try {\n this.#selectFn = options.select;\n data = options.select(data);\n data = replaceData(prevResult?.data, data, options);\n this.#selectResult = data;\n this.#selectError = null;\n } catch (selectError) {\n this.#selectError = selectError;\n }\n }\n }\n if (this.#selectError) {\n error = this.#selectError;\n data = this.#selectResult;\n errorUpdatedAt = Date.now();\n status = \"error\";\n }\n const isFetching = newState.fetchStatus === \"fetching\";\n const isPending = status === \"pending\";\n const isError = status === \"error\";\n const isLoading = isPending && isFetching;\n const hasData = data !== void 0;\n const result = {\n status,\n fetchStatus: newState.fetchStatus,\n isPending,\n isSuccess: status === \"success\",\n isError,\n isInitialLoading: isLoading,\n isLoading,\n data,\n dataUpdatedAt: newState.dataUpdatedAt,\n error,\n errorUpdatedAt,\n failureCount: newState.fetchFailureCount,\n failureReason: newState.fetchFailureReason,\n errorUpdateCount: newState.errorUpdateCount,\n isFetched: newState.dataUpdateCount > 0 || newState.errorUpdateCount > 0,\n isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n isFetching,\n isRefetching: isFetching && !isPending,\n isLoadingError: isError && !hasData,\n isPaused: newState.fetchStatus === \"paused\",\n isPlaceholderData,\n isRefetchError: isError && hasData,\n isStale: isStale(query, options),\n refetch: this.refetch,\n promise: this.#currentThenable,\n isEnabled: resolveEnabled(options.enabled, query) !== false\n };\n const nextResult = result;\n if (this.options.experimental_prefetchInRender) {\n const finalizeThenableIfPossible = (thenable) => {\n if (nextResult.status === \"error\") {\n thenable.reject(nextResult.error);\n } else if (nextResult.data !== void 0) {\n thenable.resolve(nextResult.data);\n }\n };\n const recreateThenable = () => {\n const pending = this.#currentThenable = nextResult.promise = pendingThenable();\n finalizeThenableIfPossible(pending);\n };\n const prevThenable = this.#currentThenable;\n switch (prevThenable.status) {\n case \"pending\":\n if (query.queryHash === prevQuery.queryHash) {\n finalizeThenableIfPossible(prevThenable);\n }\n break;\n case \"fulfilled\":\n if (nextResult.status === \"error\" || nextResult.data !== prevThenable.value) {\n recreateThenable();\n }\n break;\n case \"rejected\":\n if (nextResult.status !== \"error\" || nextResult.error !== prevThenable.reason) {\n recreateThenable();\n }\n break;\n }\n }\n return nextResult;\n }\n updateResult() {\n const prevResult = this.#currentResult;\n const nextResult = this.createResult(this.#currentQuery, this.options);\n this.#currentResultState = this.#currentQuery.state;\n this.#currentResultOptions = this.options;\n if (this.#currentResultState.data !== void 0) {\n this.#lastQueryWithDefinedData = this.#currentQuery;\n }\n if (shallowEqualObjects(nextResult, prevResult)) {\n return;\n }\n this.#currentResult = nextResult;\n const shouldNotifyListeners = () => {\n if (!prevResult) {\n return true;\n }\n const { notifyOnChangeProps } = this.options;\n const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n return true;\n }\n const includedProps = new Set(\n notifyOnChangePropsValue ?? this.#trackedProps\n );\n if (this.options.throwOnError) {\n includedProps.add(\"error\");\n }\n return Object.keys(this.#currentResult).some((key) => {\n const typedKey = key;\n const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n return changed && includedProps.has(typedKey);\n });\n };\n this.#notify({ listeners: shouldNotifyListeners() });\n }\n #updateQuery() {\n const query = this.#client.getQueryCache().build(this.#client, this.options);\n if (query === this.#currentQuery) {\n return;\n }\n const prevQuery = this.#currentQuery;\n this.#currentQuery = query;\n this.#currentQueryInitialState = query.state;\n if (this.hasListeners()) {\n prevQuery?.removeObserver(this);\n query.addObserver(this);\n }\n }\n onQueryUpdate() {\n this.updateResult();\n if (this.hasListeners()) {\n this.#updateTimers();\n }\n }\n #notify(notifyOptions) {\n notifyManager.batch(() => {\n if (notifyOptions.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n }\n this.#client.getQueryCache().notify({\n query: this.#currentQuery,\n type: \"observerResultsUpdated\"\n });\n });\n }\n};\nfunction shouldLoadOnMount(query, options) {\n return resolveEnabled(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && options.retryOnMount === false);\n}\nfunction shouldFetchOnMount(query, options) {\n return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n if (resolveEnabled(options.enabled, query) !== false && resolveStaleTime(options.staleTime, query) !== \"static\") {\n const value = typeof field === \"function\" ? field(query) : field;\n return value === \"always\" || value !== false && isStale(query, options);\n }\n return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n return (query !== prevQuery || resolveEnabled(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n return resolveEnabled(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true;\n }\n return false;\n}\nexport {\n QueryObserver\n};\n//# sourceMappingURL=queryObserver.js.map","// src/infiniteQueryBehavior.ts\nimport { addToEnd, addToStart, ensureQueryFn } from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n if (context.signal.aborted) {\n cancelled = true;\n } else {\n context.signal.addEventListener(\"abort\", () => {\n cancelled = true;\n });\n }\n return context.signal;\n }\n });\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject();\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: context.client,\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n const page = await queryFn(queryFnContext);\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n client: context.client,\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data) return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam) return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n #client;\n #observers;\n #mutationCache;\n #retryer;\n constructor(config) {\n super();\n this.#client = config.client;\n this.mutationId = config.mutationId;\n this.#mutationCache = config.mutationCache;\n this.#observers = [];\n this.state = config.state || getDefaultState();\n this.setOptions(config.options);\n this.scheduleGc();\n }\n setOptions(options) {\n this.options = options;\n this.updateGcTime(this.options.gcTime);\n }\n get meta() {\n return this.options.meta;\n }\n addObserver(observer) {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer);\n this.clearGcTimeout();\n this.#mutationCache.notify({\n type: \"observerAdded\",\n mutation: this,\n observer\n });\n }\n }\n removeObserver(observer) {\n this.#observers = this.#observers.filter((x) => x !== observer);\n this.scheduleGc();\n this.#mutationCache.notify({\n type: \"observerRemoved\",\n mutation: this,\n observer\n });\n }\n optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === \"pending\") {\n this.scheduleGc();\n } else {\n this.#mutationCache.remove(this);\n }\n }\n }\n continue() {\n return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables);\n }\n async execute(variables) {\n const onContinue = () => {\n this.#dispatch({ type: \"continue\" });\n };\n const mutationFnContext = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error(\"No mutationFn found\"));\n }\n return this.options.mutationFn(variables, mutationFnContext);\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue,\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n canRun: () => this.#mutationCache.canRun(this)\n });\n const restored = this.state.status === \"pending\";\n const isPaused = !this.#retryer.canStart();\n try {\n if (restored) {\n onContinue();\n } else {\n this.#dispatch({ type: \"pending\", variables, isPaused });\n await this.#mutationCache.config.onMutate?.(\n variables,\n this,\n mutationFnContext\n );\n const context = await this.options.onMutate?.(\n variables,\n mutationFnContext\n );\n if (context !== this.state.context) {\n this.#dispatch({\n type: \"pending\",\n context,\n variables,\n isPaused\n });\n }\n }\n const data = await this.#retryer.start();\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSuccess?.(\n data,\n variables,\n this.state.context,\n mutationFnContext\n );\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSettled?.(\n data,\n null,\n variables,\n this.state.context,\n mutationFnContext\n );\n this.#dispatch({ type: \"success\", data });\n return data;\n } catch (error) {\n try {\n await this.#mutationCache.config.onError?.(\n error,\n variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onError?.(\n error,\n variables,\n this.state.context,\n mutationFnContext\n );\n await this.#mutationCache.config.onSettled?.(\n void 0,\n error,\n this.state.variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSettled?.(\n void 0,\n error,\n variables,\n this.state.context,\n mutationFnContext\n );\n throw error;\n } finally {\n this.#dispatch({ type: \"error\", error });\n }\n } finally {\n this.#mutationCache.runNext(this);\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n isPaused: true\n };\n case \"continue\":\n return {\n ...state,\n isPaused: false\n };\n case \"pending\":\n return {\n ...state,\n context: action.context,\n data: void 0,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: action.isPaused,\n status: \"pending\",\n variables: action.variables,\n submittedAt: Date.now()\n };\n case \"success\":\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: \"success\",\n isPaused: false\n };\n case \"error\":\n return {\n ...state,\n data: void 0,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: \"error\"\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action);\n });\n this.#mutationCache.notify({\n mutation: this,\n type: \"updated\",\n action\n });\n });\n }\n};\nfunction getDefaultState() {\n return {\n context: void 0,\n data: void 0,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: \"idle\",\n variables: void 0,\n submittedAt: 0\n };\n}\nexport {\n Mutation,\n getDefaultState\n};\n//# sourceMappingURL=mutation.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Set();\n this.#scopes = /* @__PURE__ */ new Map();\n this.#mutationId = 0;\n }\n #mutations;\n #scopes;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n client,\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n this.#mutations.add(mutation);\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n scopedMutations.push(mutation);\n } else {\n this.#scopes.set(scope, [mutation]);\n }\n }\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n if (this.#mutations.delete(mutation)) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n if (scopedMutations.length > 1) {\n const index = scopedMutations.indexOf(mutation);\n if (index !== -1) {\n scopedMutations.splice(index, 1);\n }\n } else if (scopedMutations[0] === mutation) {\n this.#scopes.delete(scope);\n }\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const mutationsWithSameScope = this.#scopes.get(scope);\n const firstPendingMutation = mutationsWithSameScope?.find(\n (m) => m.state.status === \"pending\"\n );\n return !firstPendingMutation || firstPendingMutation === mutation;\n } else {\n return true;\n }\n }\n runNext(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n } else {\n return Promise.resolve();\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.notify({ type: \"removed\", mutation });\n });\n this.#mutations.clear();\n this.#scopes.clear();\n });\n }\n getAll() {\n return Array.from(this.#mutations);\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id;\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/mutationObserver.ts\nimport { getDefaultState } from \"./mutation.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { hashKey, shallowEqualObjects } from \"./utils.js\";\nvar MutationObserver = class extends Subscribable {\n #client;\n #currentResult = void 0;\n #currentMutation;\n #mutateOptions;\n constructor(client, options) {\n super();\n this.#client = client;\n this.setOptions(options);\n this.bindMethods();\n this.#updateResult();\n }\n bindMethods() {\n this.mutate = this.mutate.bind(this);\n this.reset = this.reset.bind(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n this.options = this.#client.defaultMutationOptions(options);\n if (!shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getMutationCache().notify({\n type: \"observerOptionsUpdated\",\n mutation: this.#currentMutation,\n observer: this\n });\n }\n if (prevOptions?.mutationKey && this.options.mutationKey && hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)) {\n this.reset();\n } else if (this.#currentMutation?.state.status === \"pending\") {\n this.#currentMutation.setOptions(this.options);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#currentMutation?.removeObserver(this);\n }\n }\n onMutationUpdate(action) {\n this.#updateResult();\n this.#notify(action);\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n reset() {\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = void 0;\n this.#updateResult();\n this.#notify();\n }\n mutate(variables, options) {\n this.#mutateOptions = options;\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options);\n this.#currentMutation.addObserver(this);\n return this.#currentMutation.execute(variables);\n }\n #updateResult() {\n const state = this.#currentMutation?.state ?? getDefaultState();\n this.#currentResult = {\n ...state,\n isPending: state.status === \"pending\",\n isSuccess: state.status === \"success\",\n isError: state.status === \"error\",\n isIdle: state.status === \"idle\",\n mutate: this.mutate,\n reset: this.reset\n };\n }\n #notify(action) {\n notifyManager.batch(() => {\n if (this.#mutateOptions && this.hasListeners()) {\n const variables = this.#currentResult.variables;\n const onMutateResult = this.#currentResult.context;\n const context = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n if (action?.type === \"success\") {\n this.#mutateOptions.onSuccess?.(\n action.data,\n variables,\n onMutateResult,\n context\n );\n this.#mutateOptions.onSettled?.(\n action.data,\n null,\n variables,\n onMutateResult,\n context\n );\n } else if (action?.type === \"error\") {\n this.#mutateOptions.onError?.(\n action.error,\n variables,\n onMutateResult,\n context\n );\n this.#mutateOptions.onSettled?.(\n void 0,\n action.error,\n variables,\n onMutateResult,\n context\n );\n }\n }\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n });\n }\n};\nexport {\n MutationObserver\n};\n//# sourceMappingURL=mutationObserver.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n client,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1) return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0) return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n /**\n * Imperative (non-reactive) way to retrieve data for a QueryKey.\n * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n *\n * Hint: Do not use this function inside a component, because it won't receive updates.\n * Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n */\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n const cachedData = query.state.data;\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n }\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(\n options.queryHash\n )?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(\n {\n type: \"active\",\n ...filters\n },\n options\n );\n });\n }\n cancelQueries(filters, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters?.refetchType === \"none\") {\n return Promise.resolve();\n }\n return this.refetchQueries(\n {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? \"active\"\n },\n options\n );\n });\n }\n refetchQueries(filters, options = {}) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n ensureInfiniteQueryData(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.ensureQueryData(options);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","\"use client\";\n\n// src/QueryClientProvider.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar QueryClientContext = React.createContext(\n void 0\n);\nvar useQueryClient = (queryClient) => {\n const client = React.useContext(QueryClientContext);\n if (queryClient) {\n return queryClient;\n }\n if (!client) {\n throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n }\n return client;\n};\nvar QueryClientProvider = ({\n client,\n children\n}) => {\n React.useEffect(() => {\n client.mount();\n return () => {\n client.unmount();\n };\n }, [client]);\n return /* @__PURE__ */ jsx(QueryClientContext.Provider, { value: client, children });\n};\nexport {\n QueryClientContext,\n QueryClientProvider,\n useQueryClient\n};\n//# sourceMappingURL=QueryClientProvider.js.map","\"use client\";\n\n// src/IsRestoringProvider.ts\nimport * as React from \"react\";\nvar IsRestoringContext = React.createContext(false);\nvar useIsRestoring = () => React.useContext(IsRestoringContext);\nvar IsRestoringProvider = IsRestoringContext.Provider;\nexport {\n IsRestoringProvider,\n useIsRestoring\n};\n//# sourceMappingURL=IsRestoringProvider.js.map","\"use client\";\n\n// src/QueryErrorResetBoundary.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createValue() {\n let isReset = false;\n return {\n clearReset: () => {\n isReset = false;\n },\n reset: () => {\n isReset = true;\n },\n isReset: () => {\n return isReset;\n }\n };\n}\nvar QueryErrorResetBoundaryContext = React.createContext(createValue());\nvar useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\nvar QueryErrorResetBoundary = ({\n children\n}) => {\n const [value] = React.useState(() => createValue());\n return /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, { value, children: typeof children === \"function\" ? children(value) : children });\n};\nexport {\n QueryErrorResetBoundary,\n useQueryErrorResetBoundary\n};\n//# sourceMappingURL=QueryErrorResetBoundary.js.map","\"use client\";\n\n// src/errorBoundaryUtils.ts\nimport * as React from \"react\";\nimport { shouldThrowError } from \"@tanstack/query-core\";\nvar ensurePreventErrorBoundaryRetry = (options, errorResetBoundary) => {\n if (options.suspense || options.throwOnError || options.experimental_prefetchInRender) {\n if (!errorResetBoundary.isReset()) {\n options.retryOnMount = false;\n }\n }\n};\nvar useClearResetErrorBoundary = (errorResetBoundary) => {\n React.useEffect(() => {\n errorResetBoundary.clearReset();\n }, [errorResetBoundary]);\n};\nvar getHasError = ({\n result,\n errorResetBoundary,\n throwOnError,\n query,\n suspense\n}) => {\n return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));\n};\nexport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n};\n//# sourceMappingURL=errorBoundaryUtils.js.map","// src/suspense.ts\nvar defaultThrowOnError = (_error, query) => query.state.data === void 0;\nvar ensureSuspenseTimers = (defaultedOptions) => {\n if (defaultedOptions.suspense) {\n const MIN_SUSPENSE_TIME_MS = 1e3;\n const clamp = (value) => value === \"static\" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);\n const originalStaleTime = defaultedOptions.staleTime;\n defaultedOptions.staleTime = typeof originalStaleTime === \"function\" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);\n if (typeof defaultedOptions.gcTime === \"number\") {\n defaultedOptions.gcTime = Math.max(\n defaultedOptions.gcTime,\n MIN_SUSPENSE_TIME_MS\n );\n }\n }\n};\nvar willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;\nvar shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nvar fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n errorResetBoundary.clearReset();\n});\nexport {\n defaultThrowOnError,\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n};\n//# sourceMappingURL=suspense.js.map","\"use client\";\n\n// src/useBaseQuery.ts\nimport * as React from \"react\";\nimport { isServer, noop, notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n} from \"./suspense.js\";\nfunction useBaseQuery(options, Observer, queryClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n throw new Error(\n 'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object'\n );\n }\n }\n const isRestoring = useIsRestoring();\n const errorResetBoundary = useQueryErrorResetBoundary();\n const client = useQueryClient(queryClient);\n const defaultedOptions = client.defaultQueryOptions(options);\n client.getDefaultOptions().queries?._experimental_beforeQuery?.(\n defaultedOptions\n );\n if (process.env.NODE_ENV !== \"production\") {\n if (!defaultedOptions.queryFn) {\n console.error(\n `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`\n );\n }\n }\n defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : \"optimistic\";\n ensureSuspenseTimers(defaultedOptions);\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary);\n useClearResetErrorBoundary(errorResetBoundary);\n const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash);\n const [observer] = React.useState(\n () => new Observer(\n client,\n defaultedOptions\n )\n );\n const result = observer.getOptimisticResult(defaultedOptions);\n const shouldSubscribe = !isRestoring && options.subscribed !== false;\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;\n observer.updateResult();\n return unsubscribe;\n },\n [observer, shouldSubscribe]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n React.useEffect(() => {\n observer.setOptions(defaultedOptions);\n }, [defaultedOptions, observer]);\n if (shouldSuspend(defaultedOptions, result)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n }\n if (getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query: client.getQueryCache().get(defaultedOptions.queryHash),\n suspense: defaultedOptions.suspense\n })) {\n throw result.error;\n }\n ;\n client.getDefaultOptions().queries?._experimental_afterQuery?.(\n defaultedOptions,\n result\n );\n if (defaultedOptions.experimental_prefetchInRender && !isServer && willFetch(result, isRestoring)) {\n const promise = isNewCacheEntry ? (\n // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted\n fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n ) : (\n // subscribe to the \"cache promise\" so that we can finalize the currentThenable once data comes in\n client.getQueryCache().get(defaultedOptions.queryHash)?.promise\n );\n promise?.catch(noop).finally(() => {\n observer.updateResult();\n });\n }\n return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\nexport {\n useBaseQuery\n};\n//# sourceMappingURL=useBaseQuery.js.map","\"use client\";\n\n// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n return useBaseQuery(options, QueryObserver, queryClient);\n}\nexport {\n useQuery\n};\n//# sourceMappingURL=useQuery.js.map","\"use client\";\n\n// src/useMutation.ts\nimport * as React from \"react\";\nimport {\n MutationObserver,\n noop,\n notifyManager,\n shouldThrowError\n} from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction useMutation(options, queryClient) {\n const client = useQueryClient(queryClient);\n const [observer] = React.useState(\n () => new MutationObserver(\n client,\n options\n )\n );\n React.useEffect(() => {\n observer.setOptions(options);\n }, [observer, options]);\n const result = React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n const mutate = React.useCallback(\n (variables, mutateOptions) => {\n observer.mutate(variables, mutateOptions).catch(noop);\n },\n [observer]\n );\n if (result.error && shouldThrowError(observer.options.throwOnError, [result.error])) {\n throw result.error;\n }\n return { ...result, mutate, mutateAsync: result.mutate };\n}\nexport {\n useMutation\n};\n//# sourceMappingURL=useMutation.js.map","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z\",\n key: \"lc1i9w\"\n }\n ],\n [\"path\", { d: \"m7 16.5-4.74-2.85\", key: \"1o9zyk\" }],\n [\"path\", { d: \"m7 16.5 5-3\", key: \"va8pkn\" }],\n [\"path\", { d: \"M7 16.5v5.17\", key: \"jnp8gn\" }],\n [\n \"path\",\n {\n d: \"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z\",\n key: \"8zsnat\"\n }\n ],\n [\"path\", { d: \"m17 16.5-5-3\", key: \"8arw3v\" }],\n [\"path\", { d: \"m17 16.5 4.74-2.85\", key: \"8rfmw\" }],\n [\"path\", { d: \"M17 16.5v5.17\", key: \"k6z78m\" }],\n [\n \"path\",\n {\n d: \"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z\",\n key: \"1xygjf\"\n }\n ],\n [\"path\", { d: \"M12 8 7.26 5.15\", key: \"1vbdud\" }],\n [\"path\", { d: \"m12 8 4.74-2.85\", key: \"3rx089\" }],\n [\"path\", { d: \"M12 13.5V8\", key: \"1io7kd\" }]\n];\nconst Boxes = createLucideIcon(\"boxes\", __iconNode);\n\nexport { __iconNode, Boxes as default };\n//# sourceMappingURL=boxes.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 12h4\", key: \"a56b0p\" }],\n [\"path\", { d: \"M10 8h4\", key: \"1sr2af\" }],\n [\"path\", { d: \"M14 21v-3a2 2 0 0 0-4 0v3\", key: \"1rgiei\" }],\n [\n \"path\",\n {\n d: \"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2\",\n key: \"secmi2\"\n }\n ],\n [\"path\", { d: \"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16\", key: \"16ra0t\" }]\n];\nconst Building2 = createLucideIcon(\"building-2\", __iconNode);\n\nexport { __iconNode, Building2 as default };\n//# sourceMappingURL=building-2.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]];\nconst ChevronUp = createLucideIcon(\"chevron-up\", __iconNode);\n\nexport { __iconNode, ChevronUp as default };\n//# sourceMappingURL=chevron-up.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m7 15 5 5 5-5\", key: \"1hf1tw\" }],\n [\"path\", { d: \"m7 9 5-5 5 5\", key: \"sgt6xg\" }]\n];\nconst ChevronsUpDown = createLucideIcon(\"chevrons-up-down\", __iconNode);\n\nexport { __iconNode, ChevronsUpDown as default };\n//# sourceMappingURL=chevrons-up-down.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n];\nconst CircleCheck = createLucideIcon(\"circle-check\", __iconNode);\n\nexport { __iconNode, CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M22 2 2 22\", key: \"y4kqgn\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]\n];\nconst CircleSlash2 = createLucideIcon(\"circle-slash-2\", __iconNode);\n\nexport { __iconNode, CircleSlash2 as default };\n//# sourceMappingURL=circle-slash-2.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M15.536 11.293a1 1 0 0 0 0 1.414l2.376 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z\",\n key: \"1uwlt4\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2.297 11.293a1 1 0 0 0 0 1.414l2.377 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414L6.088 8.916a1 1 0 0 0-1.414 0z\",\n key: \"10291m\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8.916 17.912a1 1 0 0 0 0 1.415l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.415l-2.377-2.376a1 1 0 0 0-1.414 0z\",\n key: \"1tqoq1\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8.916 4.674a1 1 0 0 0 0 1.414l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z\",\n key: \"1x6lto\"\n }\n ]\n];\nconst Component = createLucideIcon(\"component\", __iconNode);\n\nexport { __iconNode, Component as default };\n//# sourceMappingURL=component.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 15V3\", key: \"m9g1x1\" }],\n [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }],\n [\"path\", { d: \"m7 10 5 5 5-5\", key: \"brsn70\" }]\n];\nconst Download = createLucideIcon(\"download\", __iconNode);\n\nexport { __iconNode, Download as default };\n//# sourceMappingURL=download.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n [\"circle\", { cx: \"19\", cy: \"12\", r: \"1\", key: \"1wjl8i\" }],\n [\"circle\", { cx: \"5\", cy: \"12\", r: \"1\", key: \"1pcz8c\" }]\n];\nconst Ellipsis = createLucideIcon(\"ellipsis\", __iconNode);\n\nexport { __iconNode, Ellipsis as default };\n//# sourceMappingURL=ellipsis.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.65 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v10.1\",\n key: \"1a2hbp\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"m10 15 1 1\", key: \"1h4vmv\" }],\n [\"path\", { d: \"m11 14-4.586 4.586\", key: \"maylof\" }],\n [\"circle\", { cx: \"5\", cy: \"20\", r: \"2\", key: \"860zyv\" }]\n];\nconst FileKey = createLucideIcon(\"file-key\", __iconNode);\n\nexport { __iconNode, FileKey as default };\n//# sourceMappingURL=file-key.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 16v-4\", key: \"1dtifu\" }],\n [\"path\", { d: \"M12 8h.01\", key: \"e9boi3\" }]\n];\nconst Info = createLucideIcon(\"info\", __iconNode);\n\nexport { __iconNode, Info as default };\n//# sourceMappingURL=info.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\",\n key: \"1s6t7t\"\n }\n ],\n [\"circle\", { cx: \"16.5\", cy: \"7.5\", r: \".5\", fill: \"currentColor\", key: \"w0ekpg\" }]\n];\nconst KeyRound = createLucideIcon(\"key-round\", __iconNode);\n\nexport { __iconNode, KeyRound as default };\n//# sourceMappingURL=key-round.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\", key: \"1cjeqo\" }],\n [\"path\", { d: \"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\", key: \"19qd67\" }]\n];\nconst Link = createLucideIcon(\"link\", __iconNode);\n\nexport { __iconNode, Link as default };\n//# sourceMappingURL=link.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n [\n \"path\",\n {\n d: \"M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z\",\n key: \"2d38gg\"\n }\n ],\n [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n];\nconst OctagonX = createLucideIcon(\"octagon-x\", __iconNode);\n\nexport { __iconNode, OctagonX as default };\n//# sourceMappingURL=octagon-x.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M9 3v18\", key: \"fh3hqa\" }]\n];\nconst PanelLeft = createLucideIcon(\"panel-left\", __iconNode);\n\nexport { __iconNode, PanelLeft as default };\n//# sourceMappingURL=panel-left.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\",\n key: \"1a8usu\"\n }\n ],\n [\"path\", { d: \"m15 5 4 4\", key: \"1mk7zo\" }]\n];\nconst Pencil = createLucideIcon(\"pencil\", __iconNode);\n\nexport { __iconNode, Pencil as default };\n//# sourceMappingURL=pencil.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\", key: \"v9h5vc\" }],\n [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }],\n [\"path\", { d: \"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\", key: \"3uifl3\" }],\n [\"path\", { d: \"M8 16H3v5\", key: \"1cv678\" }]\n];\nconst RefreshCw = createLucideIcon(\"refresh-cw\", __iconNode);\n\nexport { __iconNode, RefreshCw as default };\n//# sourceMappingURL=refresh-cw.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"20\", height: \"8\", x: \"2\", y: \"2\", rx: \"2\", ry: \"2\", key: \"ngkwjq\" }],\n [\"rect\", { width: \"20\", height: \"8\", x: \"2\", y: \"14\", rx: \"2\", ry: \"2\", key: \"iecqi9\" }],\n [\"line\", { x1: \"6\", x2: \"6.01\", y1: \"6\", y2: \"6\", key: \"16zg32\" }],\n [\"line\", { x1: \"6\", x2: \"6.01\", y1: \"18\", y2: \"18\", key: \"nzw8ys\" }]\n];\nconst Server = createLucideIcon(\"server\", __iconNode);\n\nexport { __iconNode, Server as default };\n//# sourceMappingURL=server.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 3h.01\", key: \"159qn6\" }],\n [\"path\", { d: \"M7 5h.01\", key: \"1hq22a\" }],\n [\"path\", { d: \"M11 7h.01\", key: \"1osv80\" }],\n [\"path\", { d: \"M3 7h.01\", key: \"1xzrh3\" }],\n [\"path\", { d: \"M7 9h.01\", key: \"19b3jx\" }],\n [\"path\", { d: \"M3 11h.01\", key: \"1eifu7\" }],\n [\"rect\", { width: \"4\", height: \"4\", x: \"15\", y: \"5\", key: \"mri9e4\" }],\n [\"path\", { d: \"m19 9 2 2v10c0 .6-.4 1-1 1h-6c-.6 0-1-.4-1-1V11l2-2\", key: \"aib6hk\" }],\n [\"path\", { d: \"m13 14 8-2\", key: \"1d7bmk\" }],\n [\"path\", { d: \"m13 19 8-2\", key: \"1y2vml\" }]\n];\nconst SprayCan = createLucideIcon(\"spray-can\", __iconNode);\n\nexport { __iconNode, SprayCan as default };\n//# sourceMappingURL=spray-can.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M13.172 2a2 2 0 0 1 1.414.586l6.71 6.71a2.4 2.4 0 0 1 0 3.408l-4.592 4.592a2.4 2.4 0 0 1-3.408 0l-6.71-6.71A2 2 0 0 1 6 9.172V3a1 1 0 0 1 1-1z\",\n key: \"16rjxf\"\n }\n ],\n [\n \"path\",\n { d: \"M2 7v6.172a2 2 0 0 0 .586 1.414l6.71 6.71a2.4 2.4 0 0 0 3.191.193\", key: \"178nd4\" }\n ],\n [\"circle\", { cx: \"10.5\", cy: \"6.5\", r: \".5\", fill: \"currentColor\", key: \"12ikhr\" }]\n];\nconst Tags = createLucideIcon(\"tags\", __iconNode);\n\nexport { __iconNode, Tags as default };\n//# sourceMappingURL=tags.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst TriangleAlert = createLucideIcon(\"triangle-alert\", __iconNode);\n\nexport { __iconNode, TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"8\", r: \"5\", key: \"1hypcn\" }],\n [\"path\", { d: \"M20 21a8 8 0 0 0-16 0\", key: \"rfgkzh\" }]\n];\nconst UserRound = createLucideIcon(\"user-round\", __iconNode);\n\nexport { __iconNode, UserRound as default };\n//# sourceMappingURL=user-round.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n [\"path\", { d: \"M16 3.128a4 4 0 0 1 0 7.744\", key: \"16gr8j\" }],\n [\"path\", { d: \"M22 21v-2a4 4 0 0 0-3-3.87\", key: \"kshegd\" }],\n [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }]\n];\nconst Users = createLucideIcon(\"users\", __iconNode);\n\nexport { __iconNode, Users as default };\n//# sourceMappingURL=users.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","'use client';\nfunction __insertCSS(code) {\n if (!code || typeof document == 'undefined') return\n let head = document.head || document.getElementsByTagName('head')[0]\n let style = document.createElement('style')\n style.type = 'text/css'\n head.appendChild(style)\n ;style.styleSheet ? (style.styleSheet.cssText = code) : style.appendChild(document.createTextNode(code))\n}\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nconst getAsset = (type)=>{\n switch(type){\n case 'success':\n return SuccessIcon;\n case 'info':\n return InfoIcon;\n case 'warning':\n return WarningIcon;\n case 'error':\n return ErrorIcon;\n default:\n return null;\n }\n};\nconst bars = Array(12).fill(0);\nconst Loader = ({ visible, className })=>{\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: [\n 'sonner-loading-wrapper',\n className\n ].filter(Boolean).join(' '),\n \"data-visible\": visible\n }, /*#__PURE__*/ React.createElement(\"div\", {\n className: \"sonner-spinner\"\n }, bars.map((_, i)=>/*#__PURE__*/ React.createElement(\"div\", {\n className: \"sonner-loading-bar\",\n key: `spinner-bar-${i}`\n }))));\n};\nconst SuccessIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\",\n clipRule: \"evenodd\"\n}));\nconst WarningIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\",\n clipRule: \"evenodd\"\n}));\nconst InfoIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\",\n clipRule: \"evenodd\"\n}));\nconst ErrorIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\",\n clipRule: \"evenodd\"\n}));\nconst CloseIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"12\",\n height: \"12\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n}, /*#__PURE__*/ React.createElement(\"line\", {\n x1: \"18\",\n y1: \"6\",\n x2: \"6\",\n y2: \"18\"\n}), /*#__PURE__*/ React.createElement(\"line\", {\n x1: \"6\",\n y1: \"6\",\n x2: \"18\",\n y2: \"18\"\n}));\n\nconst useIsDocumentHidden = ()=>{\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(document.hidden);\n React.useEffect(()=>{\n const callback = ()=>{\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return ()=>window.removeEventListener('visibilitychange', callback);\n }, []);\n return isDocumentHidden;\n};\n\nlet toastsCounter = 1;\nclass Observer {\n constructor(){\n // We use arrow functions to maintain the correct `this` reference\n this.subscribe = (subscriber)=>{\n this.subscribers.push(subscriber);\n return ()=>{\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n this.publish = (data)=>{\n this.subscribers.forEach((subscriber)=>subscriber(data));\n };\n this.addToast = (data)=>{\n this.publish(data);\n this.toasts = [\n ...this.toasts,\n data\n ];\n };\n this.create = (data)=>{\n var _data_id;\n const { message, ...rest } = data;\n const id = typeof (data == null ? void 0 : data.id) === 'number' || ((_data_id = data.id) == null ? void 0 : _data_id.length) > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast)=>{\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n if (this.dismissedToasts.has(id)) {\n this.dismissedToasts.delete(id);\n }\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast)=>{\n if (toast.id === id) {\n this.publish({\n ...toast,\n ...data,\n id,\n title: message\n });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message\n };\n }\n return toast;\n });\n } else {\n this.addToast({\n title: message,\n ...rest,\n dismissible,\n id\n });\n }\n return id;\n };\n this.dismiss = (id)=>{\n if (id) {\n this.dismissedToasts.add(id);\n requestAnimationFrame(()=>this.subscribers.forEach((subscriber)=>subscriber({\n id,\n dismiss: true\n })));\n } else {\n this.toasts.forEach((toast)=>{\n this.subscribers.forEach((subscriber)=>subscriber({\n id: toast.id,\n dismiss: true\n }));\n });\n }\n return id;\n };\n this.message = (message, data)=>{\n return this.create({\n ...data,\n message\n });\n };\n this.error = (message, data)=>{\n return this.create({\n ...data,\n message,\n type: 'error'\n });\n };\n this.success = (message, data)=>{\n return this.create({\n ...data,\n type: 'success',\n message\n });\n };\n this.info = (message, data)=>{\n return this.create({\n ...data,\n type: 'info',\n message\n });\n };\n this.warning = (message, data)=>{\n return this.create({\n ...data,\n type: 'warning',\n message\n });\n };\n this.loading = (message, data)=>{\n return this.create({\n ...data,\n type: 'loading',\n message\n });\n };\n this.promise = (promise, data)=>{\n if (!data) {\n // Nothing to show\n return;\n }\n let id = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined\n });\n }\n const p = Promise.resolve(promise instanceof Function ? promise() : promise);\n let shouldDismiss = id !== undefined;\n let result;\n const originalPromise = p.then(async (response)=>{\n result = [\n 'resolve',\n response\n ];\n const isReactElementResponse = React.isValidElement(response);\n if (isReactElementResponse) {\n shouldDismiss = false;\n this.create({\n id,\n type: 'default',\n message: response\n });\n } else if (isHttpResponse(response) && !response.ok) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description = typeof data.description === 'function' ? await data.description(`HTTP error! status: ${response.status}`) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n } else if (response instanceof Error) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(response) : data.error;\n const description = typeof data.description === 'function' ? await data.description(response) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const promiseData = typeof data.success === 'function' ? await data.success(response) : data.success;\n const description = typeof data.description === 'function' ? await data.description(response) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'success',\n description,\n ...toastSettings\n });\n }\n }).catch(async (error)=>{\n result = [\n 'reject',\n error\n ];\n if (data.error !== undefined) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(error) : data.error;\n const description = typeof data.description === 'function' ? await data.description(error) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n }\n }).finally(()=>{\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n data.finally == null ? void 0 : data.finally.call(data);\n });\n const unwrap = ()=>new Promise((resolve, reject)=>originalPromise.then(()=>result[0] === 'reject' ? reject(result[1]) : resolve(result[1])).catch(reject));\n if (typeof id !== 'string' && typeof id !== 'number') {\n // cannot Object.assign on undefined\n return {\n unwrap\n };\n } else {\n return Object.assign(id, {\n unwrap\n });\n }\n };\n this.custom = (jsx, data)=>{\n const id = (data == null ? void 0 : data.id) || toastsCounter++;\n this.create({\n jsx: jsx(id),\n id,\n ...data\n });\n return id;\n };\n this.getActiveToasts = ()=>{\n return this.toasts.filter((toast)=>!this.dismissedToasts.has(toast.id));\n };\n this.subscribers = [];\n this.toasts = [];\n this.dismissedToasts = new Set();\n }\n}\nconst ToastState = new Observer();\n// bind this to the toast function\nconst toastFunction = (message, data)=>{\n const id = (data == null ? void 0 : data.id) || toastsCounter++;\n ToastState.addToast({\n title: message,\n ...data,\n id\n });\n return id;\n};\nconst isHttpResponse = (data)=>{\n return data && typeof data === 'object' && 'ok' in data && typeof data.ok === 'boolean' && 'status' in data && typeof data.status === 'number';\n};\nconst basicToast = toastFunction;\nconst getHistory = ()=>ToastState.toasts;\nconst getToasts = ()=>ToastState.getActiveToasts();\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nconst toast = Object.assign(basicToast, {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading\n}, {\n getHistory,\n getToasts\n});\n\n__insertCSS(\"[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\");\n\nfunction isAction(action) {\n return action.label !== undefined;\n}\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n// Viewport padding\nconst VIEWPORT_OFFSET = '24px';\n// Mobile viewport padding\nconst MOBILE_VIEWPORT_OFFSET = '16px';\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n// Default toast width\nconst TOAST_WIDTH = 356;\n// Default gap between toasts\nconst GAP = 14;\n// Threshold to dismiss a toast\nconst SWIPE_THRESHOLD = 45;\n// Equal to exit animation duration\nconst TIME_BEFORE_UNMOUNT = 200;\nfunction cn(...classes) {\n return classes.filter(Boolean).join(' ');\n}\nfunction getDefaultSwipeDirections(position) {\n const [y, x] = position.split('-');\n const directions = [];\n if (y) {\n directions.push(y);\n }\n if (x) {\n directions.push(x);\n }\n return directions;\n}\nconst Toast = (props)=>{\n var _toast_classNames, _toast_classNames1, _toast_classNames2, _toast_classNames3, _toast_classNames4, _toast_classNames5, _toast_classNames6, _toast_classNames7, _toast_classNames8;\n const { invert: ToasterInvert, toast, unstyled, interacting, setHeights, visibleToasts, heights, index, toasts, expanded, removeToast, defaultRichColors, closeButton: closeButtonFromToaster, style, cancelButtonStyle, actionButtonStyle, className = '', descriptionClassName = '', duration: durationFromToaster, position, gap, expandByDefault, classNames, icons, closeButtonAriaLabel = 'Close toast' } = props;\n const [swipeDirection, setSwipeDirection] = React.useState(null);\n const [swipeOutDirection, setSwipeOutDirection] = React.useState(null);\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [isSwiped, setIsSwiped] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const remainingTime = React.useRef(toast.duration || durationFromToaster || TOAST_LIFETIME);\n const dragStartTime = React.useRef(null);\n const toastRef = React.useRef(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(()=>heights.findIndex((height)=>height.toastId === toast.id) || 0, [\n heights,\n toast.id\n ]);\n const closeButton = React.useMemo(()=>{\n var _toast_closeButton;\n return (_toast_closeButton = toast.closeButton) != null ? _toast_closeButton : closeButtonFromToaster;\n }, [\n toast.closeButton,\n closeButtonFromToaster\n ]);\n const duration = React.useMemo(()=>toast.duration || durationFromToaster || TOAST_LIFETIME, [\n toast.duration,\n durationFromToaster\n ]);\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(()=>{\n return heights.reduce((prev, curr, reducerIndex)=>{\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n return prev + curr.height;\n }, 0);\n }, [\n heights,\n heightIndex\n ]);\n const isDocumentHidden = useIsDocumentHidden();\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n offset.current = React.useMemo(()=>heightIndex * gap + toastsHeightBefore, [\n heightIndex,\n toastsHeightBefore\n ]);\n React.useEffect(()=>{\n remainingTime.current = duration;\n }, [\n duration\n ]);\n React.useEffect(()=>{\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n React.useEffect(()=>{\n const toastNode = toastRef.current;\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height to heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h)=>[\n {\n toastId: toast.id,\n height,\n position: toast.position\n },\n ...h\n ]);\n return ()=>setHeights((h)=>h.filter((height)=>height.toastId !== toast.id));\n }\n }, [\n setHeights,\n toast.id\n ]);\n React.useLayoutEffect(()=>{\n // Keep height up to date with the content in case it updates\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n setInitialHeight(newHeight);\n setHeights((heights)=>{\n const alreadyExists = heights.find((height)=>height.toastId === toast.id);\n if (!alreadyExists) {\n return [\n {\n toastId: toast.id,\n height: newHeight,\n position: toast.position\n },\n ...heights\n ];\n } else {\n return heights.map((height)=>height.toastId === toast.id ? {\n ...height,\n height: newHeight\n } : height);\n }\n });\n }, [\n mounted,\n toast.title,\n toast.description,\n setHeights,\n toast.id,\n toast.jsx,\n toast.action,\n toast.cancel\n ]);\n const deleteToast = React.useCallback(()=>{\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h)=>h.filter((height)=>height.toastId !== toast.id));\n setTimeout(()=>{\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [\n toast,\n removeToast,\n setHeights,\n offset\n ]);\n React.useEffect(()=>{\n if (toast.promise && toastType === 'loading' || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId;\n // Pause the timer on each hover\n const pauseTimer = ()=>{\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n remainingTime.current = remainingTime.current - elapsedTime;\n }\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n const startTimer = ()=>{\n // setTimeout(, Infinity) behaves as if the delay is 0.\n // As a result, the toast would be closed immediately, giving the appearance that it was never rendered.\n // See: https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#an-infinite-timeout\n if (remainingTime.current === Infinity) return;\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout(()=>{\n toast.onAutoClose == null ? void 0 : toast.onAutoClose.call(toast, toast);\n deleteToast();\n }, remainingTime.current);\n };\n if (expanded || interacting || isDocumentHidden) {\n pauseTimer();\n } else {\n startTimer();\n }\n return ()=>clearTimeout(timeoutId);\n }, [\n expanded,\n interacting,\n toast,\n toastType,\n isDocumentHidden,\n deleteToast\n ]);\n React.useEffect(()=>{\n if (toast.delete) {\n deleteToast();\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n }\n }, [\n deleteToast,\n toast.delete\n ]);\n function getLoadingIcon() {\n var _toast_classNames;\n if (icons == null ? void 0 : icons.loading) {\n var _toast_classNames1;\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: cn(classNames == null ? void 0 : classNames.loader, toast == null ? void 0 : (_toast_classNames1 = toast.classNames) == null ? void 0 : _toast_classNames1.loader, 'sonner-loader'),\n \"data-visible\": toastType === 'loading'\n }, icons.loading);\n }\n return /*#__PURE__*/ React.createElement(Loader, {\n className: cn(classNames == null ? void 0 : classNames.loader, toast == null ? void 0 : (_toast_classNames = toast.classNames) == null ? void 0 : _toast_classNames.loader),\n visible: toastType === 'loading'\n });\n }\n const icon = toast.icon || (icons == null ? void 0 : icons[toastType]) || getAsset(toastType);\n var _toast_richColors, _icons_close;\n return /*#__PURE__*/ React.createElement(\"li\", {\n tabIndex: 0,\n ref: toastRef,\n className: cn(className, toastClassname, classNames == null ? void 0 : classNames.toast, toast == null ? void 0 : (_toast_classNames = toast.classNames) == null ? void 0 : _toast_classNames.toast, classNames == null ? void 0 : classNames.default, classNames == null ? void 0 : classNames[toastType], toast == null ? void 0 : (_toast_classNames1 = toast.classNames) == null ? void 0 : _toast_classNames1[toastType]),\n \"data-sonner-toast\": \"\",\n \"data-rich-colors\": (_toast_richColors = toast.richColors) != null ? _toast_richColors : defaultRichColors,\n \"data-styled\": !Boolean(toast.jsx || toast.unstyled || unstyled),\n \"data-mounted\": mounted,\n \"data-promise\": Boolean(toast.promise),\n \"data-swiped\": isSwiped,\n \"data-removed\": removed,\n \"data-visible\": isVisible,\n \"data-y-position\": y,\n \"data-x-position\": x,\n \"data-index\": index,\n \"data-front\": isFront,\n \"data-swiping\": swiping,\n \"data-dismissible\": dismissible,\n \"data-type\": toastType,\n \"data-invert\": invert,\n \"data-swipe-out\": swipeOut,\n \"data-swipe-direction\": swipeOutDirection,\n \"data-expanded\": Boolean(expanded || expandByDefault && mounted),\n \"data-testid\": toast.testId,\n style: {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style\n },\n onDragEnd: ()=>{\n setSwiping(false);\n setSwipeDirection(null);\n pointerStartRef.current = null;\n },\n onPointerDown: (event)=>{\n if (event.button === 2) return; // Return early on right click\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n event.target.setPointerCapture(event.pointerId);\n if (event.target.tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = {\n x: event.clientX,\n y: event.clientY\n };\n },\n onPointerUp: ()=>{\n var _toastRef_current, _toastRef_current1, _dragStartTime_current;\n if (swipeOut || !dismissible) return;\n pointerStartRef.current = null;\n const swipeAmountX = Number(((_toastRef_current = toastRef.current) == null ? void 0 : _toastRef_current.style.getPropertyValue('--swipe-amount-x').replace('px', '')) || 0);\n const swipeAmountY = Number(((_toastRef_current1 = toastRef.current) == null ? void 0 : _toastRef_current1.style.getPropertyValue('--swipe-amount-y').replace('px', '')) || 0);\n const timeTaken = new Date().getTime() - ((_dragStartTime_current = dragStartTime.current) == null ? void 0 : _dragStartTime_current.getTime());\n const swipeAmount = swipeDirection === 'x' ? swipeAmountX : swipeAmountY;\n const velocity = Math.abs(swipeAmount) / timeTaken;\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n if (swipeDirection === 'x') {\n setSwipeOutDirection(swipeAmountX > 0 ? 'right' : 'left');\n } else {\n setSwipeOutDirection(swipeAmountY > 0 ? 'down' : 'up');\n }\n deleteToast();\n setSwipeOut(true);\n return;\n } else {\n var _toastRef_current2, _toastRef_current3;\n (_toastRef_current2 = toastRef.current) == null ? void 0 : _toastRef_current2.style.setProperty('--swipe-amount-x', `0px`);\n (_toastRef_current3 = toastRef.current) == null ? void 0 : _toastRef_current3.style.setProperty('--swipe-amount-y', `0px`);\n }\n setIsSwiped(false);\n setSwiping(false);\n setSwipeDirection(null);\n },\n onPointerMove: (event)=>{\n var _window_getSelection, // Apply transform using both x and y values\n _toastRef_current, _toastRef_current1;\n if (!pointerStartRef.current || !dismissible) return;\n const isHighlighted = ((_window_getSelection = window.getSelection()) == null ? void 0 : _window_getSelection.toString().length) > 0;\n if (isHighlighted) return;\n const yDelta = event.clientY - pointerStartRef.current.y;\n const xDelta = event.clientX - pointerStartRef.current.x;\n var _props_swipeDirections;\n const swipeDirections = (_props_swipeDirections = props.swipeDirections) != null ? _props_swipeDirections : getDefaultSwipeDirections(position);\n // Determine swipe direction if not already locked\n if (!swipeDirection && (Math.abs(xDelta) > 1 || Math.abs(yDelta) > 1)) {\n setSwipeDirection(Math.abs(xDelta) > Math.abs(yDelta) ? 'x' : 'y');\n }\n let swipeAmount = {\n x: 0,\n y: 0\n };\n const getDampening = (delta)=>{\n const factor = Math.abs(delta) / 20;\n return 1 / (1.5 + factor);\n };\n // Only apply swipe in the locked direction\n if (swipeDirection === 'y') {\n // Handle vertical swipes\n if (swipeDirections.includes('top') || swipeDirections.includes('bottom')) {\n if (swipeDirections.includes('top') && yDelta < 0 || swipeDirections.includes('bottom') && yDelta > 0) {\n swipeAmount.y = yDelta;\n } else {\n // Smoothly transition to dampened movement\n const dampenedDelta = yDelta * getDampening(yDelta);\n // Ensure we don't jump when transitioning to dampened movement\n swipeAmount.y = Math.abs(dampenedDelta) < Math.abs(yDelta) ? dampenedDelta : yDelta;\n }\n }\n } else if (swipeDirection === 'x') {\n // Handle horizontal swipes\n if (swipeDirections.includes('left') || swipeDirections.includes('right')) {\n if (swipeDirections.includes('left') && xDelta < 0 || swipeDirections.includes('right') && xDelta > 0) {\n swipeAmount.x = xDelta;\n } else {\n // Smoothly transition to dampened movement\n const dampenedDelta = xDelta * getDampening(xDelta);\n // Ensure we don't jump when transitioning to dampened movement\n swipeAmount.x = Math.abs(dampenedDelta) < Math.abs(xDelta) ? dampenedDelta : xDelta;\n }\n }\n }\n if (Math.abs(swipeAmount.x) > 0 || Math.abs(swipeAmount.y) > 0) {\n setIsSwiped(true);\n }\n (_toastRef_current = toastRef.current) == null ? void 0 : _toastRef_current.style.setProperty('--swipe-amount-x', `${swipeAmount.x}px`);\n (_toastRef_current1 = toastRef.current) == null ? void 0 : _toastRef_current1.style.setProperty('--swipe-amount-y', `${swipeAmount.y}px`);\n }\n }, closeButton && !toast.jsx && toastType !== 'loading' ? /*#__PURE__*/ React.createElement(\"button\", {\n \"aria-label\": closeButtonAriaLabel,\n \"data-disabled\": disabled,\n \"data-close-button\": true,\n onClick: disabled || !dismissible ? ()=>{} : ()=>{\n deleteToast();\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n },\n className: cn(classNames == null ? void 0 : classNames.closeButton, toast == null ? void 0 : (_toast_classNames2 = toast.classNames) == null ? void 0 : _toast_classNames2.closeButton)\n }, (_icons_close = icons == null ? void 0 : icons.close) != null ? _icons_close : CloseIcon) : null, (toastType || toast.icon || toast.promise) && toast.icon !== null && ((icons == null ? void 0 : icons[toastType]) !== null || toast.icon) ? /*#__PURE__*/ React.createElement(\"div\", {\n \"data-icon\": \"\",\n className: cn(classNames == null ? void 0 : classNames.icon, toast == null ? void 0 : (_toast_classNames3 = toast.classNames) == null ? void 0 : _toast_classNames3.icon)\n }, toast.promise || toast.type === 'loading' && !toast.icon ? toast.icon || getLoadingIcon() : null, toast.type !== 'loading' ? icon : null) : null, /*#__PURE__*/ React.createElement(\"div\", {\n \"data-content\": \"\",\n className: cn(classNames == null ? void 0 : classNames.content, toast == null ? void 0 : (_toast_classNames4 = toast.classNames) == null ? void 0 : _toast_classNames4.content)\n }, /*#__PURE__*/ React.createElement(\"div\", {\n \"data-title\": \"\",\n className: cn(classNames == null ? void 0 : classNames.title, toast == null ? void 0 : (_toast_classNames5 = toast.classNames) == null ? void 0 : _toast_classNames5.title)\n }, toast.jsx ? toast.jsx : typeof toast.title === 'function' ? toast.title() : toast.title), toast.description ? /*#__PURE__*/ React.createElement(\"div\", {\n \"data-description\": \"\",\n className: cn(descriptionClassName, toastDescriptionClassname, classNames == null ? void 0 : classNames.description, toast == null ? void 0 : (_toast_classNames6 = toast.classNames) == null ? void 0 : _toast_classNames6.description)\n }, typeof toast.description === 'function' ? toast.description() : toast.description) : null), /*#__PURE__*/ React.isValidElement(toast.cancel) ? toast.cancel : toast.cancel && isAction(toast.cancel) ? /*#__PURE__*/ React.createElement(\"button\", {\n \"data-button\": true,\n \"data-cancel\": true,\n style: toast.cancelButtonStyle || cancelButtonStyle,\n onClick: (event)=>{\n // We need to check twice because typescript\n if (!isAction(toast.cancel)) return;\n if (!dismissible) return;\n toast.cancel.onClick == null ? void 0 : toast.cancel.onClick.call(toast.cancel, event);\n deleteToast();\n },\n className: cn(classNames == null ? void 0 : classNames.cancelButton, toast == null ? void 0 : (_toast_classNames7 = toast.classNames) == null ? void 0 : _toast_classNames7.cancelButton)\n }, toast.cancel.label) : null, /*#__PURE__*/ React.isValidElement(toast.action) ? toast.action : toast.action && isAction(toast.action) ? /*#__PURE__*/ React.createElement(\"button\", {\n \"data-button\": true,\n \"data-action\": true,\n style: toast.actionButtonStyle || actionButtonStyle,\n onClick: (event)=>{\n // We need to check twice because typescript\n if (!isAction(toast.action)) return;\n toast.action.onClick == null ? void 0 : toast.action.onClick.call(toast.action, event);\n if (event.defaultPrevented) return;\n deleteToast();\n },\n className: cn(classNames == null ? void 0 : classNames.actionButton, toast == null ? void 0 : (_toast_classNames8 = toast.classNames) == null ? void 0 : _toast_classNames8.actionButton)\n }, toast.action.label) : null);\n};\nfunction getDocumentDirection() {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n const dirAttribute = document.documentElement.getAttribute('dir');\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction;\n }\n return dirAttribute;\n}\nfunction assignOffset(defaultOffset, mobileOffset) {\n const styles = {};\n [\n defaultOffset,\n mobileOffset\n ].forEach((offset, index)=>{\n const isMobile = index === 1;\n const prefix = isMobile ? '--mobile-offset' : '--offset';\n const defaultValue = isMobile ? MOBILE_VIEWPORT_OFFSET : VIEWPORT_OFFSET;\n function assignAll(offset) {\n [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ].forEach((key)=>{\n styles[`${prefix}-${key}`] = typeof offset === 'number' ? `${offset}px` : offset;\n });\n }\n if (typeof offset === 'number' || typeof offset === 'string') {\n assignAll(offset);\n } else if (typeof offset === 'object') {\n [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ].forEach((key)=>{\n if (offset[key] === undefined) {\n styles[`${prefix}-${key}`] = defaultValue;\n } else {\n styles[`${prefix}-${key}`] = typeof offset[key] === 'number' ? `${offset[key]}px` : offset[key];\n }\n });\n } else {\n assignAll(defaultValue);\n }\n });\n return styles;\n}\nfunction useSonner() {\n const [activeToasts, setActiveToasts] = React.useState([]);\n React.useEffect(()=>{\n return ToastState.subscribe((toast)=>{\n if (toast.dismiss) {\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setActiveToasts((toasts)=>toasts.filter((t)=>t.id !== toast.id));\n });\n });\n return;\n }\n // Prevent batching, temp solution.\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setActiveToasts((toasts)=>{\n const indexOfExistingToast = toasts.findIndex((t)=>t.id === toast.id);\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n {\n ...toasts[indexOfExistingToast],\n ...toast\n },\n ...toasts.slice(indexOfExistingToast + 1)\n ];\n }\n return [\n toast,\n ...toasts\n ];\n });\n });\n });\n });\n }, []);\n return {\n toasts: activeToasts\n };\n}\nconst Toaster = /*#__PURE__*/ React.forwardRef(function Toaster(props, ref) {\n const { id, invert, position = 'bottom-right', hotkey = [\n 'altKey',\n 'KeyT'\n ], expand, closeButton, className, offset, mobileOffset, theme = 'light', richColors, duration, style, visibleToasts = VISIBLE_TOASTS_AMOUNT, toastOptions, dir = getDocumentDirection(), gap = GAP, icons, containerAriaLabel = 'Notifications' } = props;\n const [toasts, setToasts] = React.useState([]);\n const filteredToasts = React.useMemo(()=>{\n if (id) {\n return toasts.filter((toast)=>toast.toasterId === id);\n }\n return toasts.filter((toast)=>!toast.toasterId);\n }, [\n toasts,\n id\n ]);\n const possiblePositions = React.useMemo(()=>{\n return Array.from(new Set([\n position\n ].concat(filteredToasts.filter((toast)=>toast.position).map((toast)=>toast.position))));\n }, [\n filteredToasts,\n position\n ]);\n const [heights, setHeights] = React.useState([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(theme !== 'system' ? theme : typeof window !== 'undefined' ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' : 'light');\n const listRef = React.useRef(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef(null);\n const isFocusWithinRef = React.useRef(false);\n const removeToast = React.useCallback((toastToRemove)=>{\n setToasts((toasts)=>{\n var _toasts_find;\n if (!((_toasts_find = toasts.find((toast)=>toast.id === toastToRemove.id)) == null ? void 0 : _toasts_find.delete)) {\n ToastState.dismiss(toastToRemove.id);\n }\n return toasts.filter(({ id })=>id !== toastToRemove.id);\n });\n }, []);\n React.useEffect(()=>{\n return ToastState.subscribe((toast)=>{\n if (toast.dismiss) {\n // Prevent batching of other state updates\n requestAnimationFrame(()=>{\n setToasts((toasts)=>toasts.map((t)=>t.id === toast.id ? {\n ...t,\n delete: true\n } : t));\n });\n return;\n }\n // Prevent batching, temp solution.\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setToasts((toasts)=>{\n const indexOfExistingToast = toasts.findIndex((t)=>t.id === toast.id);\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n {\n ...toasts[indexOfExistingToast],\n ...toast\n },\n ...toasts.slice(indexOfExistingToast + 1)\n ];\n }\n return [\n toast,\n ...toasts\n ];\n });\n });\n });\n });\n }, [\n toasts\n ]);\n React.useEffect(()=>{\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n if (theme === 'system') {\n // check if current preference is dark\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n if (typeof window === 'undefined') return;\n const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n try {\n // Chrome & Firefox\n darkMediaQuery.addEventListener('change', ({ matches })=>{\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n } catch (error) {\n // Safari < 14\n darkMediaQuery.addListener(({ matches })=>{\n try {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n } catch (e) {\n console.error(e);\n }\n });\n }\n }, [\n theme\n ]);\n React.useEffect(()=>{\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [\n toasts\n ]);\n React.useEffect(()=>{\n const handleKeyDown = (event)=>{\n var _listRef_current;\n const isHotkeyPressed = hotkey.every((key)=>event[key] || event.code === key);\n if (isHotkeyPressed) {\n var _listRef_current1;\n setExpanded(true);\n (_listRef_current1 = listRef.current) == null ? void 0 : _listRef_current1.focus();\n }\n if (event.code === 'Escape' && (document.activeElement === listRef.current || ((_listRef_current = listRef.current) == null ? void 0 : _listRef_current.contains(document.activeElement)))) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return ()=>document.removeEventListener('keydown', handleKeyDown);\n }, [\n hotkey\n ]);\n React.useEffect(()=>{\n if (listRef.current) {\n return ()=>{\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({\n preventScroll: true\n });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [\n listRef.current\n ]);\n return(// Remove item from normal navigation flow, only available via hotkey\n /*#__PURE__*/ React.createElement(\"section\", {\n ref: ref,\n \"aria-label\": `${containerAriaLabel} ${hotkeyLabel}`,\n tabIndex: -1,\n \"aria-live\": \"polite\",\n \"aria-relevant\": \"additions text\",\n \"aria-atomic\": \"false\",\n suppressHydrationWarning: true\n }, possiblePositions.map((position, index)=>{\n var _heights_;\n const [y, x] = position.split('-');\n if (!filteredToasts.length) return null;\n return /*#__PURE__*/ React.createElement(\"ol\", {\n key: position,\n dir: dir === 'auto' ? getDocumentDirection() : dir,\n tabIndex: -1,\n ref: listRef,\n className: className,\n \"data-sonner-toaster\": true,\n \"data-sonner-theme\": actualTheme,\n \"data-y-position\": y,\n \"data-x-position\": x,\n style: {\n '--front-toast-height': `${((_heights_ = heights[0]) == null ? void 0 : _heights_.height) || 0}px`,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${gap}px`,\n ...style,\n ...assignOffset(offset, mobileOffset)\n },\n onBlur: (event)=>{\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({\n preventScroll: true\n });\n lastFocusedElementRef.current = null;\n }\n }\n },\n onFocus: (event)=>{\n const isNotDismissible = event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n if (isNotDismissible) return;\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget;\n }\n },\n onMouseEnter: ()=>setExpanded(true),\n onMouseMove: ()=>setExpanded(true),\n onMouseLeave: ()=>{\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n },\n onDragEnd: ()=>setExpanded(false),\n onPointerDown: (event)=>{\n const isNotDismissible = event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n if (isNotDismissible) return;\n setInteracting(true);\n },\n onPointerUp: ()=>setInteracting(false)\n }, filteredToasts.filter((toast)=>!toast.position && index === 0 || toast.position === position).map((toast, index)=>{\n var _toastOptions_duration, _toastOptions_closeButton;\n return /*#__PURE__*/ React.createElement(Toast, {\n key: toast.id,\n icons: icons,\n index: index,\n toast: toast,\n defaultRichColors: richColors,\n duration: (_toastOptions_duration = toastOptions == null ? void 0 : toastOptions.duration) != null ? _toastOptions_duration : duration,\n className: toastOptions == null ? void 0 : toastOptions.className,\n descriptionClassName: toastOptions == null ? void 0 : toastOptions.descriptionClassName,\n invert: invert,\n visibleToasts: visibleToasts,\n closeButton: (_toastOptions_closeButton = toastOptions == null ? void 0 : toastOptions.closeButton) != null ? _toastOptions_closeButton : closeButton,\n interacting: interacting,\n position: position,\n style: toastOptions == null ? void 0 : toastOptions.style,\n unstyled: toastOptions == null ? void 0 : toastOptions.unstyled,\n classNames: toastOptions == null ? void 0 : toastOptions.classNames,\n cancelButtonStyle: toastOptions == null ? void 0 : toastOptions.cancelButtonStyle,\n actionButtonStyle: toastOptions == null ? void 0 : toastOptions.actionButtonStyle,\n closeButtonAriaLabel: toastOptions == null ? void 0 : toastOptions.closeButtonAriaLabel,\n removeToast: removeToast,\n toasts: filteredToasts.filter((t)=>t.position == toast.position),\n heights: heights.filter((h)=>h.position == toast.position),\n setHeights: setHeights,\n expandByDefault: expand,\n gap: gap,\n expanded: expanded,\n swipeDirections: props.swipeDirections\n });\n }));\n })));\n});\n\nexport { Toaster, toast, useSonner };\n","import {\n CircleCheckIcon,\n InfoIcon,\n Loader2Icon,\n OctagonXIcon,\n TriangleAlertIcon,\n} from \"lucide-react\"\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n ,\n info: ,\n warning: ,\n error: ,\n loading: ,\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","import type { ReactNode } from \"react\"\nimport { ThemeProvider } from \"@/providers/theme-provider.tsx\"\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\"\n\nimport { Toaster } from \"@/components/ui/sonner.tsx\"\n\nconst queryClient = new QueryClient()\n\nexport const Providers = ({ children }: { children: ReactNode }) => {\n return (\n \n \n {children}\n \n \n \n )\n}\n","/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n a: for (; 0 < index; ) {\n var parentIndex = (index - 1) >>> 1,\n parent = heap[parentIndex];\n if (0 < compare(parent, node))\n (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n else break a;\n }\n}\nfunction peek(heap) {\n return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n if (0 === heap.length) return null;\n var first = heap[0],\n last = heap.pop();\n if (last !== first) {\n heap[0] = last;\n a: for (\n var index = 0, length = heap.length, halfLength = length >>> 1;\n index < halfLength;\n\n ) {\n var leftIndex = 2 * (index + 1) - 1,\n left = heap[leftIndex],\n rightIndex = leftIndex + 1,\n right = heap[rightIndex];\n if (0 > compare(left, last))\n rightIndex < length && 0 > compare(right, left)\n ? ((heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex))\n : ((heap[index] = left),\n (heap[leftIndex] = last),\n (index = leftIndex));\n else if (rightIndex < length && 0 > compare(right, last))\n (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n else break a;\n }\n }\n return first;\n}\nfunction compare(a, b) {\n var diff = a.sortIndex - b.sortIndex;\n return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n var localPerformance = performance;\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n} else {\n var localDate = Date,\n initialTime = localDate.now();\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n}\nvar taskQueue = [],\n timerQueue = [],\n taskIdCounter = 1,\n currentTask = null,\n currentPriorityLevel = 3,\n isPerformingWork = !1,\n isHostCallbackScheduled = !1,\n isHostTimeoutScheduled = !1,\n needsPaint = !1,\n localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n for (var timer = peek(timerQueue); null !== timer; ) {\n if (null === timer.callback) pop(timerQueue);\n else if (timer.startTime <= currentTime)\n pop(timerQueue),\n (timer.sortIndex = timer.expirationTime),\n push(taskQueue, timer);\n else break;\n timer = peek(timerQueue);\n }\n}\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = !1;\n advanceTimers(currentTime);\n if (!isHostCallbackScheduled)\n if (null !== peek(taskQueue))\n (isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n}\nvar isMessageLoopRunning = !1,\n taskTimeoutID = -1,\n frameInterval = 5,\n startTime = -1;\nfunction shouldYieldToHost() {\n return needsPaint\n ? !0\n : exports.unstable_now() - startTime < frameInterval\n ? !1\n : !0;\n}\nfunction performWorkUntilDeadline() {\n needsPaint = !1;\n if (isMessageLoopRunning) {\n var currentTime = exports.unstable_now();\n startTime = currentTime;\n var hasMoreWork = !0;\n try {\n a: {\n isHostCallbackScheduled = !1;\n isHostTimeoutScheduled &&\n ((isHostTimeoutScheduled = !1),\n localClearTimeout(taskTimeoutID),\n (taskTimeoutID = -1));\n isPerformingWork = !0;\n var previousPriorityLevel = currentPriorityLevel;\n try {\n b: {\n advanceTimers(currentTime);\n for (\n currentTask = peek(taskQueue);\n null !== currentTask &&\n !(\n currentTask.expirationTime > currentTime && shouldYieldToHost()\n );\n\n ) {\n var callback = currentTask.callback;\n if (\"function\" === typeof callback) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var continuationCallback = callback(\n currentTask.expirationTime <= currentTime\n );\n currentTime = exports.unstable_now();\n if (\"function\" === typeof continuationCallback) {\n currentTask.callback = continuationCallback;\n advanceTimers(currentTime);\n hasMoreWork = !0;\n break b;\n }\n currentTask === peek(taskQueue) && pop(taskQueue);\n advanceTimers(currentTime);\n } else pop(taskQueue);\n currentTask = peek(taskQueue);\n }\n if (null !== currentTask) hasMoreWork = !0;\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n hasMoreWork = !1;\n }\n }\n break a;\n } finally {\n (currentTask = null),\n (currentPriorityLevel = previousPriorityLevel),\n (isPerformingWork = !1);\n }\n hasMoreWork = void 0;\n }\n } finally {\n hasMoreWork\n ? schedulePerformWorkUntilDeadline()\n : (isMessageLoopRunning = !1);\n }\n }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\nelse if (\"undefined\" !== typeof MessageChannel) {\n var channel = new MessageChannel(),\n port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n} else\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\nfunction requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n 0 > fps || 125 < fps\n ? console.error(\n \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n )\n : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n switch (currentPriorityLevel) {\n case 1:\n case 2:\n case 3:\n var priorityLevel = 3;\n break;\n default:\n priorityLevel = currentPriorityLevel;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_requestPaint = function () {\n needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n default:\n priorityLevel = 3;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_scheduleCallback = function (\n priorityLevel,\n callback,\n options\n) {\n var currentTime = exports.unstable_now();\n \"object\" === typeof options && null !== options\n ? ((options = options.delay),\n (options =\n \"number\" === typeof options && 0 < options\n ? currentTime + options\n : currentTime))\n : (options = currentTime);\n switch (priorityLevel) {\n case 1:\n var timeout = -1;\n break;\n case 2:\n timeout = 250;\n break;\n case 5:\n timeout = 1073741823;\n break;\n case 4:\n timeout = 1e4;\n break;\n default:\n timeout = 5e3;\n }\n timeout = options + timeout;\n priorityLevel = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: options,\n expirationTime: timeout,\n sortIndex: -1\n };\n options > currentTime\n ? ((priorityLevel.sortIndex = options),\n push(timerQueue, priorityLevel),\n null === peek(taskQueue) &&\n priorityLevel === peek(timerQueue) &&\n (isHostTimeoutScheduled\n ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n : (isHostTimeoutScheduled = !0),\n requestHostTimeout(handleTimeout, options - currentTime)))\n : ((priorityLevel.sortIndex = timeout),\n push(taskQueue, priorityLevel),\n isHostCallbackScheduled ||\n isPerformingWork ||\n ((isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n React = require(\"react\"),\n ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction isValidContainer(node) {\n return !(\n !node ||\n (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n );\n}\nfunction getNearestMountedFiber(fiber) {\n var node = fiber,\n nearestMounted = fiber;\n if (fiber.alternate) for (; node.return; ) node = node.return;\n else {\n fiber = node;\n do\n (node = fiber),\n 0 !== (node.flags & 4098) && (nearestMounted = node.return),\n (fiber = node.return);\n while (fiber);\n }\n return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n if (13 === fiber.tag) {\n var suspenseState = fiber.memoizedState;\n null === suspenseState &&\n ((fiber = fiber.alternate),\n null !== fiber && (suspenseState = fiber.memoizedState));\n if (null !== suspenseState) return suspenseState.dehydrated;\n }\n return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n if (31 === fiber.tag) {\n var activityState = fiber.memoizedState;\n null === activityState &&\n ((fiber = fiber.alternate),\n null !== fiber && (activityState = fiber.memoizedState));\n if (null !== activityState) return activityState.dehydrated;\n }\n return null;\n}\nfunction assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate) throw Error(formatProdErrorMessage(188));\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(formatProdErrorMessage(188));\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) {\n for (child$0 = parentB.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) throw Error(formatProdErrorMessage(189));\n }\n }\n if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n }\n if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n var tag = node.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n for (node = node.child; null !== node; ) {\n tag = findCurrentHostFiberImpl(node);\n if (null !== tag) return tag;\n node = node.sibling;\n }\n return null;\n}\nvar assign = Object.assign,\n REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n}\nvar isArrayImpl = Array.isArray,\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n ReactDOMSharedInternals =\n ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n sharedNotPendingObject = {\n pending: !1,\n data: null,\n method: null,\n action: null\n },\n valueStack = [],\n index = -1;\nfunction createCursor(defaultValue) {\n return { current: defaultValue };\n}\nfunction pop(cursor) {\n 0 > index ||\n ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n index++;\n valueStack[index] = cursor.current;\n cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n contextFiberStackCursor = createCursor(null),\n rootInstanceStackCursor = createCursor(null),\n hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance);\n push(contextFiberStackCursor, fiber);\n push(contextStackCursor, null);\n switch (nextRootInstance.nodeType) {\n case 9:\n case 11:\n fiber = (fiber = nextRootInstance.documentElement)\n ? (fiber = fiber.namespaceURI)\n ? getOwnHostContext(fiber)\n : 0\n : 0;\n break;\n default:\n if (\n ((fiber = nextRootInstance.tagName),\n (nextRootInstance = nextRootInstance.namespaceURI))\n )\n (nextRootInstance = getOwnHostContext(nextRootInstance)),\n (fiber = getChildHostContextProd(nextRootInstance, fiber));\n else\n switch (fiber) {\n case \"svg\":\n fiber = 1;\n break;\n case \"math\":\n fiber = 2;\n break;\n default:\n fiber = 0;\n }\n }\n pop(contextStackCursor);\n push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n pop(contextStackCursor);\n pop(contextFiberStackCursor);\n pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n var context = contextStackCursor.current;\n var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n context !== JSCompiler_inline_result &&\n (push(contextFiberStackCursor, fiber),\n push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor), pop(contextFiberStackCursor));\n hostTransitionProviderCursor.current === fiber &&\n (pop(hostTransitionProviderCursor),\n (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" ()\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n reentry = !0;\n var previousPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$1) {\n control = x$1;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$2) {\n control = x$2;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n namePropDescriptor = RunInRootFrame = 0;\n RunInRootFrame < sampleLines.length &&\n !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n )\n RunInRootFrame++;\n for (\n ;\n namePropDescriptor < controlLines.length &&\n !controlLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n if (\n RunInRootFrame === sampleLines.length ||\n namePropDescriptor === controlLines.length\n )\n for (\n RunInRootFrame = sampleLines.length - 1,\n namePropDescriptor = controlLines.length - 1;\n 1 <= RunInRootFrame &&\n 0 <= namePropDescriptor &&\n sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n )\n namePropDescriptor--;\n for (\n ;\n 1 <= RunInRootFrame && 0 <= namePropDescriptor;\n RunInRootFrame--, namePropDescriptor--\n )\n if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n do\n if (\n (RunInRootFrame--,\n namePropDescriptor--,\n 0 > namePropDescriptor ||\n sampleLines[RunInRootFrame] !==\n controlLines[namePropDescriptor])\n ) {\n var frame =\n \"\\n\" +\n sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n fn.displayName &&\n frame.includes(\"\") &&\n (frame = frame.replace(\"\", fn.displayName));\n return frame;\n }\n while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n }\n break;\n }\n }\n } finally {\n (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n }\n return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return describeBuiltInComponentFrame(fiber.type);\n case 16:\n return describeBuiltInComponentFrame(\"Lazy\");\n case 13:\n return fiber.child !== childFiber && null !== childFiber\n ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n : describeBuiltInComponentFrame(\"Suspense\");\n case 19:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n case 0:\n case 15:\n return describeNativeComponentFrame(fiber.type, !1);\n case 11:\n return describeNativeComponentFrame(fiber.type.render, !1);\n case 1:\n return describeNativeComponentFrame(fiber.type, !0);\n case 31:\n return describeBuiltInComponentFrame(\"Activity\");\n default:\n return \"\";\n }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = \"\",\n previous = null;\n do\n (info += describeFiber(workInProgress, previous)),\n (previous = workInProgress),\n (workInProgress = workInProgress.return);\n while (workInProgress);\n return info;\n } catch (x) {\n return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n cancelCallback$1 = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now = Scheduler.unstable_now,\n getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority$1 = Scheduler.unstable_NormalPriority,\n LowPriority = Scheduler.unstable_LowPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n log$1 = Scheduler.log,\n unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n rendererID = null,\n injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n x >>>= 0;\n return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n nextTransitionDeferredLane = 262144,\n nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n var pendingSyncLanes = lanes & 42;\n if (0 !== pendingSyncLanes) return pendingSyncLanes;\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n return 128;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n return lanes & 261888;\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 3932160;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return lanes & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return lanes;\n }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n root = root.warmLanes;\n var nonIdlePendingLanes = pendingLanes & 134217727;\n 0 !== nonIdlePendingLanes\n ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n 0 !== pendingLanes\n ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = pendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n return 0 === nextLanes\n ? 0\n : 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (rootHasPendingCommit = wipLanes & -wipLanes),\n suspendedLanes >= rootHasPendingCommit ||\n (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n ? wipLanes\n : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n return (\n 0 ===\n (root.pendingLanes &\n ~(root.suspendedLanes & ~root.pingedLanes) &\n renderLanes)\n );\n}\nfunction computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n case 8:\n case 64:\n return currentTime + 250;\n case 16:\n case 32:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return -1;\n }\n}\nfunction claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n return lane;\n}\nfunction createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n root.pendingLanes |= updateLane;\n 268435456 !== updateLane &&\n ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n root,\n finishedLanes,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n) {\n var previouslyPendingLanes = root.pendingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.warmLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n root.errorRecoveryDisabledLanes &= remainingLanes;\n root.shellSuspendCounter = 0;\n var entanglements = root.entanglements,\n expirationTimes = root.expirationTimes,\n hiddenUpdates = root.hiddenUpdates;\n for (\n remainingLanes = previouslyPendingLanes & ~remainingLanes;\n 0 < remainingLanes;\n\n ) {\n var index$7 = 31 - clz32(remainingLanes),\n lane = 1 << index$7;\n entanglements[index$7] = 0;\n expirationTimes[index$7] = -1;\n var hiddenUpdatesForLane = hiddenUpdates[index$7];\n if (null !== hiddenUpdatesForLane)\n for (\n hiddenUpdates[index$7] = null, index$7 = 0;\n index$7 < hiddenUpdatesForLane.length;\n index$7++\n ) {\n var update = hiddenUpdatesForLane[index$7];\n null !== update && (update.lane &= -536870913);\n }\n remainingLanes &= ~lane;\n }\n 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n 0 !== suspendedRetryLanes &&\n 0 === updatedLanes &&\n 0 !== root.tag &&\n (root.suspendedLanes |=\n suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n root.pendingLanes |= spawnedLane;\n root.suspendedLanes &= ~spawnedLane;\n var spawnedLaneIndex = 31 - clz32(spawnedLane);\n root.entangledLanes |= spawnedLane;\n root.entanglements[spawnedLaneIndex] =\n root.entanglements[spawnedLaneIndex] |\n 1073741824 |\n (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index$8 = 31 - clz32(rootEntangledLanes),\n lane = 1 << index$8;\n (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n (root[index$8] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n var renderLane = renderLanes & -renderLanes;\n renderLane =\n 0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n ? 0\n : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n switch (lane) {\n case 2:\n lane = 1;\n break;\n case 8:\n lane = 4;\n break;\n case 32:\n lane = 16;\n break;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n lane = 128;\n break;\n case 268435456:\n lane = 134217728;\n break;\n default:\n lane = 0;\n }\n return lane;\n}\nfunction lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 2 < lanes\n ? 8 < lanes\n ? 0 !== (lanes & 134217727)\n ? 32\n : 268435456\n : 8\n : 2;\n}\nfunction resolveUpdatePriority() {\n var updatePriority = ReactDOMSharedInternals.p;\n if (0 !== updatePriority) return updatePriority;\n updatePriority = window.event;\n return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n return (ReactDOMSharedInternals.p = priority), fn();\n } finally {\n ReactDOMSharedInternals.p = previousPriority;\n }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n internalInstanceKey = \"__reactFiber$\" + randomKey,\n internalPropsKey = \"__reactProps$\" + randomKey,\n internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlersKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n var targetInst = targetNode[internalInstanceKey];\n if (targetInst) return targetInst;\n for (var parentNode = targetNode.parentNode; parentNode; ) {\n if (\n (targetInst =\n parentNode[internalContainerInstanceKey] ||\n parentNode[internalInstanceKey])\n ) {\n parentNode = targetInst.alternate;\n if (\n null !== targetInst.child ||\n (null !== parentNode && null !== parentNode.child)\n )\n for (\n targetNode = getParentHydrationBoundary(targetNode);\n null !== targetNode;\n\n ) {\n if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n targetNode = getParentHydrationBoundary(targetNode);\n }\n return targetInst;\n }\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n return null;\n}\nfunction getInstanceFromNode(node) {\n if (\n (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n ) {\n var tag = node.tag;\n if (\n 5 === tag ||\n 6 === tag ||\n 13 === tag ||\n 31 === tag ||\n 26 === tag ||\n 27 === tag ||\n 3 === tag\n )\n return node;\n }\n return null;\n}\nfunction getNodeFromInstance(inst) {\n var tag = inst.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n var resources = root[internalRootNodeResourcesKey];\n resources ||\n (resources = root[internalRootNodeResourcesKey] =\n { hoistableStyles: new Map(), hoistableScripts: new Map() });\n return resources;\n}\nfunction markNodeAsHoistable(node) {\n node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n registrationNameDependencies[registrationName] = dependencies;\n for (\n registrationName = 0;\n registrationName < dependencies.length;\n registrationName++\n )\n allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n illegalAttributeNameCache = {},\n validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n return !0;\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n return (validatedAttributeNameCache[attributeName] = !0);\n illegalAttributeNameCache[attributeName] = !0;\n return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n if (isAttributeNameSafe(name))\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n node.removeAttribute(name);\n return;\n case \"boolean\":\n var prefix$10 = name.toLowerCase().slice(0, 5);\n if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n node.removeAttribute(name);\n return;\n }\n }\n node.setAttribute(name, \"\" + value);\n }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttribute(name, \"\" + value);\n }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttributeNS(namespace, name, \"\" + value);\n }\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return value;\n case \"object\":\n return value;\n default:\n return \"\";\n }\n}\nfunction isCheckable(elem) {\n var type = elem.type;\n return (\n (elem = elem.nodeName) &&\n \"input\" === elem.toLowerCase() &&\n (\"checkbox\" === type || \"radio\" === type)\n );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n var descriptor = Object.getOwnPropertyDescriptor(\n node.constructor.prototype,\n valueField\n );\n if (\n !node.hasOwnProperty(valueField) &&\n \"undefined\" !== typeof descriptor &&\n \"function\" === typeof descriptor.get &&\n \"function\" === typeof descriptor.set\n ) {\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: !0,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = \"\" + value;\n set.call(this, value);\n }\n });\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n return {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = \"\" + value;\n },\n stopTracking: function () {\n node._valueTracker = null;\n delete node[valueField];\n }\n };\n }\n}\nfunction track(node) {\n if (!node._valueTracker) {\n var valueField = isCheckable(node) ? \"checked\" : \"value\";\n node._valueTracker = trackValueOnNode(\n node,\n valueField,\n \"\" + node[valueField]\n );\n }\n}\nfunction updateValueIfChanged(node) {\n if (!node) return !1;\n var tracker = node._valueTracker;\n if (!tracker) return !0;\n var lastValue = tracker.getValue();\n var value = \"\";\n node &&\n (value = isCheckable(node)\n ? node.checked\n ? \"true\"\n : \"false\"\n : node.value);\n node = value;\n return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n if (\"undefined\" === typeof doc) return null;\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n return value.replace(\n escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n function (ch) {\n return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n }\n );\n}\nfunction updateInput(\n element,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n) {\n element.name = \"\";\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type\n ? (element.type = type)\n : element.removeAttribute(\"type\");\n if (null != value)\n if (\"number\" === type) {\n if ((0 === value && \"\" === element.value) || element.value != value)\n element.value = \"\" + getToStringValue(value);\n } else\n element.value !== \"\" + getToStringValue(value) &&\n (element.value = \"\" + getToStringValue(value));\n else\n (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n null != value\n ? setDefaultValue(element, type, getToStringValue(value))\n : null != defaultValue\n ? setDefaultValue(element, type, getToStringValue(defaultValue))\n : null != lastDefaultValue && element.removeAttribute(\"value\");\n null == checked &&\n null != defaultChecked &&\n (element.defaultChecked = !!defaultChecked);\n null != checked &&\n (element.checked =\n checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name\n ? (element.name = \"\" + getToStringValue(name))\n : element.removeAttribute(\"name\");\n}\nfunction initInput(\n element,\n value,\n defaultValue,\n checked,\n defaultChecked,\n type,\n name,\n isHydrating\n) {\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type &&\n (element.type = type);\n if (null != value || null != defaultValue) {\n if (\n !(\n (\"submit\" !== type && \"reset\" !== type) ||\n (void 0 !== value && null !== value)\n )\n ) {\n track(element);\n return;\n }\n defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n isHydrating || value === element.value || (element.value = value);\n element.defaultValue = value;\n }\n checked = null != checked ? checked : defaultChecked;\n checked =\n \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n element.checked = isHydrating ? element.checked : !!checked;\n element.defaultChecked = !!checked;\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name &&\n (element.name = name);\n track(element);\n}\nfunction setDefaultValue(node, type, value) {\n (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n node.defaultValue === \"\" + value ||\n (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n node = node.options;\n if (multiple) {\n multiple = {};\n for (var i = 0; i < propValue.length; i++)\n multiple[\"$\" + propValue[i]] = !0;\n for (propValue = 0; propValue < node.length; propValue++)\n (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n node[propValue].selected !== i && (node[propValue].selected = i),\n i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n } else {\n propValue = \"\" + getToStringValue(propValue);\n multiple = null;\n for (i = 0; i < node.length; i++) {\n if (node[i].value === propValue) {\n node[i].selected = !0;\n setDefaultSelected && (node[i].defaultSelected = !0);\n return;\n }\n null !== multiple || node[i].disabled || (multiple = node[i]);\n }\n null !== multiple && (multiple.selected = !0);\n }\n}\nfunction updateTextarea(element, value, defaultValue) {\n if (\n null != value &&\n ((value = \"\" + getToStringValue(value)),\n value !== element.value && (element.value = value),\n null == defaultValue)\n ) {\n element.defaultValue !== value && (element.defaultValue = value);\n return;\n }\n element.defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n if (null == value) {\n if (null != children) {\n if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n if (isArrayImpl(children)) {\n if (1 < children.length) throw Error(formatProdErrorMessage(93));\n children = children[0];\n }\n defaultValue = children;\n }\n null == defaultValue && (defaultValue = \"\");\n value = defaultValue;\n }\n defaultValue = getToStringValue(value);\n element.defaultValue = defaultValue;\n children = element.textContent;\n children === defaultValue &&\n \"\" !== children &&\n null !== children &&\n (element.value = children);\n track(element);\n}\nfunction setTextContent(node, text) {\n if (text) {\n var firstChild = node.firstChild;\n if (\n firstChild &&\n firstChild === node.lastChild &&\n 3 === firstChild.nodeType\n ) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n \" \"\n )\n);\nfunction setValueForStyle(style, styleName, value) {\n var isCustomProperty = 0 === styleName.indexOf(\"--\");\n null == value || \"boolean\" === typeof value || \"\" === value\n ? isCustomProperty\n ? style.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (style.cssFloat = \"\")\n : (style[styleName] = \"\")\n : isCustomProperty\n ? style.setProperty(styleName, value)\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? \"float\" === styleName\n ? (style.cssFloat = value)\n : (style[styleName] = (\"\" + value).trim())\n : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n if (null != styles && \"object\" !== typeof styles)\n throw Error(formatProdErrorMessage(62));\n node = node.style;\n if (null != prevStyles) {\n for (var styleName in prevStyles)\n !prevStyles.hasOwnProperty(styleName) ||\n (null != styles && styles.hasOwnProperty(styleName)) ||\n (0 === styleName.indexOf(\"--\")\n ? node.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (node.cssFloat = \"\")\n : (node[styleName] = \"\"));\n for (var styleName$16 in styles)\n (styleName = styles[styleName$16]),\n styles.hasOwnProperty(styleName$16) &&\n prevStyles[styleName$16] !== styleName &&\n setValueForStyle(node, styleName$16, styleName);\n } else\n for (var styleName$17 in styles)\n styles.hasOwnProperty(styleName$17) &&\n setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n if (-1 === tagName.indexOf(\"-\")) return !1;\n switch (tagName) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n return !1;\n default:\n return !0;\n }\n}\nvar aliases = new Map([\n [\"acceptCharset\", \"accept-charset\"],\n [\"htmlFor\", \"for\"],\n [\"httpEquiv\", \"http-equiv\"],\n [\"crossOrigin\", \"crossorigin\"],\n [\"accentHeight\", \"accent-height\"],\n [\"alignmentBaseline\", \"alignment-baseline\"],\n [\"arabicForm\", \"arabic-form\"],\n [\"baselineShift\", \"baseline-shift\"],\n [\"capHeight\", \"cap-height\"],\n [\"clipPath\", \"clip-path\"],\n [\"clipRule\", \"clip-rule\"],\n [\"colorInterpolation\", \"color-interpolation\"],\n [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n [\"colorProfile\", \"color-profile\"],\n [\"colorRendering\", \"color-rendering\"],\n [\"dominantBaseline\", \"dominant-baseline\"],\n [\"enableBackground\", \"enable-background\"],\n [\"fillOpacity\", \"fill-opacity\"],\n [\"fillRule\", \"fill-rule\"],\n [\"floodColor\", \"flood-color\"],\n [\"floodOpacity\", \"flood-opacity\"],\n [\"fontFamily\", \"font-family\"],\n [\"fontSize\", \"font-size\"],\n [\"fontSizeAdjust\", \"font-size-adjust\"],\n [\"fontStretch\", \"font-stretch\"],\n [\"fontStyle\", \"font-style\"],\n [\"fontVariant\", \"font-variant\"],\n [\"fontWeight\", \"font-weight\"],\n [\"glyphName\", \"glyph-name\"],\n [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n [\"horizAdvX\", \"horiz-adv-x\"],\n [\"horizOriginX\", \"horiz-origin-x\"],\n [\"imageRendering\", \"image-rendering\"],\n [\"letterSpacing\", \"letter-spacing\"],\n [\"lightingColor\", \"lighting-color\"],\n [\"markerEnd\", \"marker-end\"],\n [\"markerMid\", \"marker-mid\"],\n [\"markerStart\", \"marker-start\"],\n [\"overlinePosition\", \"overline-position\"],\n [\"overlineThickness\", \"overline-thickness\"],\n [\"paintOrder\", \"paint-order\"],\n [\"panose-1\", \"panose-1\"],\n [\"pointerEvents\", \"pointer-events\"],\n [\"renderingIntent\", \"rendering-intent\"],\n [\"shapeRendering\", \"shape-rendering\"],\n [\"stopColor\", \"stop-color\"],\n [\"stopOpacity\", \"stop-opacity\"],\n [\"strikethroughPosition\", \"strikethrough-position\"],\n [\"strikethroughThickness\", \"strikethrough-thickness\"],\n [\"strokeDasharray\", \"stroke-dasharray\"],\n [\"strokeDashoffset\", \"stroke-dashoffset\"],\n [\"strokeLinecap\", \"stroke-linecap\"],\n [\"strokeLinejoin\", \"stroke-linejoin\"],\n [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n [\"strokeOpacity\", \"stroke-opacity\"],\n [\"strokeWidth\", \"stroke-width\"],\n [\"textAnchor\", \"text-anchor\"],\n [\"textDecoration\", \"text-decoration\"],\n [\"textRendering\", \"text-rendering\"],\n [\"transformOrigin\", \"transform-origin\"],\n [\"underlinePosition\", \"underline-position\"],\n [\"underlineThickness\", \"underline-thickness\"],\n [\"unicodeBidi\", \"unicode-bidi\"],\n [\"unicodeRange\", \"unicode-range\"],\n [\"unitsPerEm\", \"units-per-em\"],\n [\"vAlphabetic\", \"v-alphabetic\"],\n [\"vHanging\", \"v-hanging\"],\n [\"vIdeographic\", \"v-ideographic\"],\n [\"vMathematical\", \"v-mathematical\"],\n [\"vectorEffect\", \"vector-effect\"],\n [\"vertAdvY\", \"vert-adv-y\"],\n [\"vertOriginX\", \"vert-origin-x\"],\n [\"vertOriginY\", \"vert-origin-y\"],\n [\"wordSpacing\", \"word-spacing\"],\n [\"writingMode\", \"writing-mode\"],\n [\"xmlnsXlink\", \"xmlns:xlink\"],\n [\"xHeight\", \"x-height\"]\n ]),\n isJavaScriptProtocol =\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n return isJavaScriptProtocol.test(\"\" + url)\n ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n nativeEvent.correspondingUseElement &&\n (nativeEvent = nativeEvent.correspondingUseElement);\n return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n var internalInstance = getInstanceFromNode(target);\n if (internalInstance && (target = internalInstance.stateNode)) {\n var props = target[internalPropsKey] || null;\n a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n case \"input\":\n updateInput(\n target,\n props.value,\n props.defaultValue,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name\n );\n internalInstance = props.name;\n if (\"radio\" === props.type && null != internalInstance) {\n for (props = target; props.parentNode; ) props = props.parentNode;\n props = props.querySelectorAll(\n 'input[name=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n \"\" + internalInstance\n ) +\n '\"][type=\"radio\"]'\n );\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n ) {\n var otherNode = props[internalInstance];\n if (otherNode !== target && otherNode.form === target.form) {\n var otherProps = otherNode[internalPropsKey] || null;\n if (!otherProps) throw Error(formatProdErrorMessage(90));\n updateInput(\n otherNode,\n otherProps.value,\n otherProps.defaultValue,\n otherProps.defaultValue,\n otherProps.checked,\n otherProps.defaultChecked,\n otherProps.type,\n otherProps.name\n );\n }\n }\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n )\n (otherNode = props[internalInstance]),\n otherNode.form === target.form && updateValueIfChanged(otherNode);\n }\n break a;\n case \"textarea\":\n updateTextarea(target, props.value, props.defaultValue);\n break a;\n case \"select\":\n (internalInstance = props.value),\n null != internalInstance &&\n updateOptions(target, !!props.multiple, internalInstance, !1);\n }\n }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n if (isInsideEventHandler) return fn(a, b);\n isInsideEventHandler = !0;\n try {\n var JSCompiler_inline_result = fn(a);\n return JSCompiler_inline_result;\n } finally {\n if (\n ((isInsideEventHandler = !1),\n null !== restoreTarget || null !== restoreQueue)\n )\n if (\n (flushSyncWork$1(),\n restoreTarget &&\n ((a = restoreTarget),\n (fn = restoreQueue),\n (restoreQueue = restoreTarget = null),\n restoreStateOfTarget(a),\n fn))\n )\n for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n }\n}\nfunction getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n if (null === stateNode) return null;\n var props = stateNode[internalPropsKey] || null;\n if (null === props) return null;\n stateNode = props[registrationName];\n a: switch (registrationName) {\n case \"onClick\":\n case \"onClickCapture\":\n case \"onDoubleClick\":\n case \"onDoubleClickCapture\":\n case \"onMouseDown\":\n case \"onMouseDownCapture\":\n case \"onMouseMove\":\n case \"onMouseMoveCapture\":\n case \"onMouseUp\":\n case \"onMouseUpCapture\":\n case \"onMouseEnter\":\n (props = !props.disabled) ||\n ((inst = inst.type),\n (props = !(\n \"button\" === inst ||\n \"input\" === inst ||\n \"select\" === inst ||\n \"textarea\" === inst\n )));\n inst = !props;\n break a;\n default:\n inst = !1;\n }\n if (inst) return null;\n if (stateNode && \"function\" !== typeof stateNode)\n throw Error(\n formatProdErrorMessage(231, registrationName, typeof stateNode)\n );\n return stateNode;\n}\nvar canUseDOM = !(\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ),\n passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n try {\n var options = {};\n Object.defineProperty(options, \"passive\", {\n get: function () {\n passiveBrowserEventsSupported = !0;\n }\n });\n window.addEventListener(\"test\", options, options);\n window.removeEventListener(\"test\", options, options);\n } catch (e) {\n passiveBrowserEventsSupported = !1;\n }\nvar root = null,\n startText = null,\n fallbackText = null;\nfunction getData() {\n if (fallbackText) return fallbackText;\n var start,\n startValue = startText,\n startLength = startValue.length,\n end,\n endValue = \"value\" in root ? root.value : root.textContent,\n endLength = endValue.length;\n for (\n start = 0;\n start < startLength && startValue[start] === endValue[start];\n start++\n );\n var minEnd = startLength - start;\n for (\n end = 1;\n end <= minEnd &&\n startValue[startLength - end] === endValue[endLength - end];\n end++\n );\n return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n var keyCode = nativeEvent.keyCode;\n \"charCode\" in nativeEvent\n ? ((nativeEvent = nativeEvent.charCode),\n 0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n : (nativeEvent = keyCode);\n 10 === nativeEvent && (nativeEvent = 13);\n return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n return !0;\n}\nfunction functionThatReturnsFalse() {\n return !1;\n}\nfunction createSyntheticEvent(Interface) {\n function SyntheticBaseEvent(\n reactName,\n reactEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n for (var propName in Interface)\n Interface.hasOwnProperty(propName) &&\n ((reactName = Interface[propName]),\n (this[propName] = reactName\n ? reactName(nativeEvent)\n : nativeEvent[propName]));\n this.isDefaultPrevented = (\n null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue\n )\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n }\n assign(SyntheticBaseEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble &&\n (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function () {},\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n}\nvar EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n },\n SyntheticEvent = createSyntheticEvent(EventInterface),\n UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n lastMovementX,\n lastMovementY,\n lastMouseEvent,\n MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n return void 0 === event.relatedTarget\n ? event.fromElement === event.srcElement\n ? event.toElement\n : event.fromElement\n : event.relatedTarget;\n },\n movementX: function (event) {\n if (\"movementX\" in event) return event.movementX;\n event !== lastMouseEvent &&\n (lastMouseEvent && \"mousemove\" === event.type\n ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n (lastMovementY = event.screenY - lastMouseEvent.screenY))\n : (lastMovementY = lastMovementX = 0),\n (lastMouseEvent = event));\n return lastMovementX;\n },\n movementY: function (event) {\n return \"movementY\" in event ? event.movementY : lastMovementY;\n }\n }),\n SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return \"clipboardData\" in event\n ? event.clipboardData\n : window.clipboardData;\n }\n }),\n SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n normalizeKey = {\n Esc: \"Escape\",\n Spacebar: \" \",\n Left: \"ArrowLeft\",\n Up: \"ArrowUp\",\n Right: \"ArrowRight\",\n Down: \"ArrowDown\",\n Del: \"Delete\",\n Win: \"OS\",\n Menu: \"ContextMenu\",\n Apps: \"ContextMenu\",\n Scroll: \"ScrollLock\",\n MozPrintableKey: \"Unidentified\"\n },\n translateToKey = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 12: \"Clear\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 45: \"Insert\",\n 46: \"Delete\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 224: \"Meta\"\n },\n modifierKeyToProp = {\n Alt: \"altKey\",\n Control: \"ctrlKey\",\n Meta: \"metaKey\",\n Shift: \"shiftKey\"\n };\nfunction modifierStateGetter(keyArg) {\n var nativeEvent = this.nativeEvent;\n return nativeEvent.getModifierState\n ? nativeEvent.getModifierState(keyArg)\n : (keyArg = modifierKeyToProp[keyArg])\n ? !!nativeEvent[keyArg]\n : !1;\n}\nfunction getEventModifierState() {\n return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n key: function (nativeEvent) {\n if (nativeEvent.key) {\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (\"Unidentified\" !== key) return key;\n }\n return \"keypress\" === nativeEvent.type\n ? ((nativeEvent = getEventCharCode(nativeEvent)),\n 13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n : \"\";\n },\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n charCode: function (event) {\n return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n },\n keyCode: function (event) {\n return \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n },\n which: function (event) {\n return \"keypress\" === event.type\n ? getEventCharCode(event)\n : \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n }\n }),\n SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n }),\n SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n }),\n SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return \"deltaX\" in event\n ? event.deltaX\n : \"wheelDeltaX\" in event\n ? -event.wheelDeltaX\n : 0;\n },\n deltaY: function (event) {\n return \"deltaY\" in event\n ? event.deltaY\n : \"wheelDeltaY\" in event\n ? -event.wheelDeltaY\n : \"wheelDelta\" in event\n ? -event.wheelDelta\n : 0;\n },\n deltaZ: 0,\n deltaMode: 0\n }),\n SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n ToggleEventInterface = assign({}, EventInterface, {\n newState: 0,\n oldState: 0\n }),\n SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n END_KEYCODES = [9, 13, 27, 32],\n canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n documentMode = null;\ncanUseDOM &&\n \"documentMode\" in document &&\n (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n useFallbackCompositionData =\n canUseDOM &&\n (!canUseCompositionEvent ||\n (documentMode && 8 < documentMode && 11 >= documentMode)),\n SPACEBAR_CHAR = String.fromCharCode(32),\n hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"keyup\":\n return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n case \"keydown\":\n return 229 !== nativeEvent.keyCode;\n case \"keypress\":\n case \"mousedown\":\n case \"focusout\":\n return !0;\n default:\n return !1;\n }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n nativeEvent = nativeEvent.detail;\n return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n ? nativeEvent.data\n : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"compositionend\":\n return getDataFromCustomEvent(nativeEvent);\n case \"keypress\":\n if (32 !== nativeEvent.which) return null;\n hasSpaceKeypress = !0;\n return SPACEBAR_CHAR;\n case \"textInput\":\n return (\n (domEventName = nativeEvent.data),\n domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n );\n default:\n return null;\n }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n if (isComposing)\n return \"compositionend\" === domEventName ||\n (!canUseCompositionEvent &&\n isFallbackCompositionEnd(domEventName, nativeEvent))\n ? ((domEventName = getData()),\n (fallbackText = startText = root = null),\n (isComposing = !1),\n domEventName)\n : null;\n switch (domEventName) {\n case \"paste\":\n return null;\n case \"keypress\":\n if (\n !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n (nativeEvent.ctrlKey && nativeEvent.altKey)\n ) {\n if (nativeEvent.char && 1 < nativeEvent.char.length)\n return nativeEvent.char;\n if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case \"compositionend\":\n return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n ? null\n : nativeEvent.data;\n default:\n return null;\n }\n}\nvar supportedInputTypes = {\n color: !0,\n date: !0,\n datetime: !0,\n \"datetime-local\": !0,\n email: !0,\n month: !0,\n number: !0,\n password: !0,\n range: !0,\n search: !0,\n tel: !0,\n text: !0,\n time: !0,\n url: !0,\n week: !0\n};\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return \"input\" === nodeName\n ? !!supportedInputTypes[elem.type]\n : \"textarea\" === nodeName\n ? !0\n : !1;\n}\nfunction createAndAccumulateChangeEvent(\n dispatchQueue,\n inst,\n nativeEvent,\n target\n) {\n restoreTarget\n ? restoreQueue\n ? restoreQueue.push(target)\n : (restoreQueue = [target])\n : (restoreTarget = target);\n inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n 0 < inst.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onChange\",\n \"change\",\n null,\n nativeEvent,\n target\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n var JSCompiler_inline_result$jscomp$286;\n if (canUseDOM) {\n var isSupported$jscomp$inline_427 = \"oninput\" in document;\n if (!isSupported$jscomp$inline_427) {\n var element$jscomp$inline_428 = document.createElement(\"div\");\n element$jscomp$inline_428.setAttribute(\"oninput\", \"return;\");\n isSupported$jscomp$inline_427 =\n \"function\" === typeof element$jscomp$inline_428.oninput;\n }\n JSCompiler_inline_result$jscomp$286 = isSupported$jscomp$inline_427;\n } else JSCompiler_inline_result$jscomp$286 = !1;\n isInputEventSupported =\n JSCompiler_inline_result$jscomp$286 &&\n (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n activeElement$1 &&\n (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n if (\n \"value\" === nativeEvent.propertyName &&\n getInstIfValueChanged(activeElementInst$1)\n ) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(\n dispatchQueue,\n activeElementInst$1,\n nativeEvent,\n getEventTarget(nativeEvent)\n );\n batchedUpdates$1(runEventInBatch, dispatchQueue);\n }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n \"focusin\" === domEventName\n ? (stopWatchingForValueChange(),\n (activeElement$1 = target),\n (activeElementInst$1 = targetInst),\n activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n if (\n \"selectionchange\" === domEventName ||\n \"keyup\" === domEventName ||\n \"keydown\" === domEventName\n )\n return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (\"input\" === domEventName || \"change\" === domEventName)\n return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++) {\n var currentKey = keysA[keysB];\n if (\n !hasOwnProperty.call(objB, currentKey) ||\n !objectIs(objA[currentKey], objB[currentKey])\n )\n return !1;\n }\n return !0;\n}\nfunction getLeafNode(node) {\n for (; node && node.firstChild; ) node = node.firstChild;\n return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n root = 0;\n for (var nodeEnd; node; ) {\n if (3 === node.nodeType) {\n nodeEnd = root + node.textContent.length;\n if (root <= offset && nodeEnd >= offset)\n return { node: node, offset: offset - root };\n root = nodeEnd;\n }\n a: {\n for (; node; ) {\n if (node.nextSibling) {\n node = node.nextSibling;\n break a;\n }\n node = node.parentNode;\n }\n node = void 0;\n }\n node = getLeafNode(node);\n }\n}\nfunction containsNode(outerNode, innerNode) {\n return outerNode && innerNode\n ? outerNode === innerNode\n ? !0\n : outerNode && 3 === outerNode.nodeType\n ? !1\n : innerNode && 3 === innerNode.nodeType\n ? containsNode(outerNode, innerNode.parentNode)\n : \"contains\" in outerNode\n ? outerNode.contains(innerNode)\n : outerNode.compareDocumentPosition\n ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n : !1\n : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n containerInfo =\n null != containerInfo &&\n null != containerInfo.ownerDocument &&\n null != containerInfo.ownerDocument.defaultView\n ? containerInfo.ownerDocument.defaultView\n : window;\n for (\n var element = getActiveElement(containerInfo.document);\n element instanceof containerInfo.HTMLIFrameElement;\n\n ) {\n try {\n var JSCompiler_inline_result =\n \"string\" === typeof element.contentWindow.location.href;\n } catch (err) {\n JSCompiler_inline_result = !1;\n }\n if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n else break;\n element = getActiveElement(containerInfo.document);\n }\n return element;\n}\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return (\n nodeName &&\n ((\"input\" === nodeName &&\n (\"text\" === elem.type ||\n \"search\" === elem.type ||\n \"tel\" === elem.type ||\n \"url\" === elem.type ||\n \"password\" === elem.type)) ||\n \"textarea\" === nodeName ||\n \"true\" === elem.contentEditable)\n );\n}\nvar skipSelectionChangeEvent =\n canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n activeElement = null,\n activeElementInst = null,\n lastSelection = null,\n mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n var doc =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget.document\n : 9 === nativeEventTarget.nodeType\n ? nativeEventTarget\n : nativeEventTarget.ownerDocument;\n mouseDown ||\n null == activeElement ||\n activeElement !== getActiveElement(doc) ||\n ((doc = activeElement),\n \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n : ((doc = (\n (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n window\n ).getSelection()),\n (doc = {\n anchorNode: doc.anchorNode,\n anchorOffset: doc.anchorOffset,\n focusNode: doc.focusNode,\n focusOffset: doc.focusOffset\n })),\n (lastSelection && shallowEqual(lastSelection, doc)) ||\n ((lastSelection = doc),\n (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n 0 < doc.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onSelect\",\n \"select\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n return prefixes;\n}\nvar vendorPrefixes = {\n animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n },\n prefixedEventNames = {},\n style = {};\ncanUseDOM &&\n ((style = document.createElement(\"div\").style),\n \"AnimationEvent\" in window ||\n (delete vendorPrefixes.animationend.animation,\n delete vendorPrefixes.animationiteration.animation,\n delete vendorPrefixes.animationstart.animation),\n \"TransitionEvent\" in window ||\n delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n if (!vendorPrefixes[eventName]) return eventName;\n var prefixMap = vendorPrefixes[eventName],\n styleProp;\n for (styleProp in prefixMap)\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n topLevelEventsToReactNames = new Map(),\n simpleEventPluginEvents =\n \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n \" \"\n );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n concurrentQueues = [],\n concurrentQueuesIndex = 0,\n concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n for (\n var endIndex = concurrentQueuesIndex,\n i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n i < endIndex;\n\n ) {\n var fiber = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var queue = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var update = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var lane = concurrentQueues[i];\n concurrentQueues[i++] = null;\n if (null !== queue && null !== update) {\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n concurrentQueues[concurrentQueuesIndex++] = fiber;\n concurrentQueues[concurrentQueuesIndex++] = queue;\n concurrentQueues[concurrentQueuesIndex++] = update;\n concurrentQueues[concurrentQueuesIndex++] = lane;\n concurrentlyUpdatedLanes |= lane;\n fiber.lanes |= lane;\n fiber = fiber.alternate;\n null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n enqueueUpdate$1(fiber, queue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n enqueueUpdate$1(fiber, null, null, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n (parent.childLanes |= lane),\n (alternate = parent.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n 22 === parent.tag &&\n ((sourceFiber = parent.stateNode),\n null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n (sourceFiber = parent),\n (parent = parent.return);\n return 3 === sourceFiber.tag\n ? ((parent = sourceFiber.stateNode),\n isHidden &&\n null !== update &&\n ((isHidden = 31 - clz32(lane)),\n (sourceFiber = parent.hiddenUpdates),\n (alternate = sourceFiber[isHidden]),\n null === alternate\n ? (sourceFiber[isHidden] = [update])\n : alternate.push(update),\n (update.lane = lane | 536870912)),\n parent)\n : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n if (50 < nestedUpdateCount)\n throw (\n ((nestedUpdateCount = 0),\n (rootWithNestedUpdates = null),\n Error(formatProdErrorMessage(185)))\n );\n for (var parent = sourceFiber.return; null !== parent; )\n (sourceFiber = parent), (parent = sourceFiber.return);\n return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling =\n this.child =\n this.return =\n this.stateNode =\n this.type =\n this.elementType =\n null;\n this.index = 0;\n this.refCleanup = this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies =\n this.memoizedState =\n this.updateQueue =\n this.memoizedProps =\n null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiberImplClass(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null));\n workInProgress.flags = current.flags & 65011712;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n workInProgress.refCleanup = current.refCleanup;\n return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n workInProgress.flags &= 65011714;\n var current = workInProgress.alternate;\n null === current\n ? ((workInProgress.childLanes = 0),\n (workInProgress.lanes = renderLanes),\n (workInProgress.child = null),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.memoizedProps = null),\n (workInProgress.memoizedState = null),\n (workInProgress.updateQueue = null),\n (workInProgress.dependencies = null),\n (workInProgress.stateNode = null))\n : ((workInProgress.childLanes = current.childLanes),\n (workInProgress.lanes = current.lanes),\n (workInProgress.child = current.child),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.memoizedProps = current.memoizedProps),\n (workInProgress.memoizedState = current.memoizedState),\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.type = current.type),\n (renderLanes = current.dependencies),\n (workInProgress.dependencies =\n null === renderLanes\n ? null\n : {\n lanes: renderLanes.lanes,\n firstContext: renderLanes.firstContext\n }));\n return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n) {\n var fiberTag = 0;\n owner = type;\n if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n else if (\"string\" === typeof type)\n fiberTag = isHostHoistableType(\n type,\n pendingProps,\n contextStackCursor.current\n )\n ? 26\n : \"html\" === type || \"head\" === type || \"body\" === type\n ? 27\n : 5;\n else\n a: switch (type) {\n case REACT_ACTIVITY_TYPE:\n return (\n (type = createFiberImplClass(31, pendingProps, key, mode)),\n (type.elementType = REACT_ACTIVITY_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= 24;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n (type.elementType = REACT_PROFILER_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (type = createFiberImplClass(13, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (type = createFiberImplClass(19, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n (type.lanes = lanes),\n type\n );\n default:\n if (\"object\" === typeof type && null !== type)\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONSUMER_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n owner = null;\n break a;\n }\n fiberTag = 29;\n pendingProps = Error(\n formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n );\n owner = null;\n }\n key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = owner;\n key.lanes = lanes;\n return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiberImplClass(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n content = createFiberImplClass(6, content, null, mode);\n content.lanes = lanes;\n return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n var fiber = createFiberImplClass(18, null, null, 0);\n fiber.stateNode = dehydratedNode;\n return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n mode = createFiberImplClass(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n if (\"object\" === typeof value && null !== value) {\n var existing = CapturedStacks.get(value);\n if (void 0 !== existing) return existing;\n source = {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n CapturedStacks.set(value, source);\n return source;\n }\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n}\nvar forkStack = [],\n forkStackIndex = 0,\n treeForkProvider = null,\n treeForkCount = 0,\n idStack = [],\n idStackIndex = 0,\n treeContextProvider = null,\n treeContextId = 1,\n treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n workInProgress = treeContextOverflow;\n var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n baseIdWithLeadingBit &= ~(1 << baseLength);\n index += 1;\n var length = 32 - clz32(totalChildren) + baseLength;\n if (30 < length) {\n var numberOfOverflowBits = baseLength - (baseLength % 5);\n length = (\n baseIdWithLeadingBit &\n ((1 << numberOfOverflowBits) - 1)\n ).toString(32);\n baseIdWithLeadingBit >>= numberOfOverflowBits;\n baseLength -= numberOfOverflowBits;\n treeContextId =\n (1 << (32 - clz32(totalChildren) + baseLength)) |\n (index << baseLength) |\n baseIdWithLeadingBit;\n treeContextOverflow = length + workInProgress;\n } else\n (treeContextId =\n (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n null !== workInProgress.return &&\n (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n for (; workInProgress === treeForkProvider; )\n (treeForkProvider = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null),\n (treeForkCount = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null);\n for (; workInProgress === treeContextProvider; )\n (treeContextProvider = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextOverflow = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextId = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextId = suspendedContext.id;\n treeContextOverflow = suspendedContext.overflow;\n treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n nextHydratableInstance = null,\n isHydrating = !1,\n hydrationErrors = null,\n rootOrSingletonContext = !1,\n HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n var error = Error(\n formatProdErrorMessage(\n 418,\n 1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n ? \"text\"\n : \"HTML\",\n \"\"\n )\n );\n queueHydrationError(createCapturedValueAtFiber(error, fiber));\n throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n var instance = fiber.stateNode,\n type = fiber.type,\n props = fiber.memoizedProps;\n instance[internalInstanceKey] = fiber;\n instance[internalPropsKey] = props;\n switch (type) {\n case \"dialog\":\n listenToNonDelegatedEvent(\"cancel\", instance);\n listenToNonDelegatedEvent(\"close\", instance);\n break;\n case \"iframe\":\n case \"object\":\n case \"embed\":\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"video\":\n case \"audio\":\n for (type = 0; type < mediaEventTypes.length; type++)\n listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n break;\n case \"source\":\n listenToNonDelegatedEvent(\"error\", instance);\n break;\n case \"img\":\n case \"image\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", instance);\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", instance);\n break;\n case \"input\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n initInput(\n instance,\n props.value,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name,\n !0\n );\n break;\n case \"select\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n break;\n case \"textarea\":\n listenToNonDelegatedEvent(\"invalid\", instance),\n initTextarea(instance, props.value, props.defaultValue, props.children);\n }\n type = props.children;\n (\"string\" !== typeof type &&\n \"number\" !== typeof type &&\n \"bigint\" !== typeof type) ||\n instance.textContent === \"\" + type ||\n !0 === props.suppressHydrationWarning ||\n checkForUnmatchedText(instance.textContent, type)\n ? (null != props.popover &&\n (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n listenToNonDelegatedEvent(\"toggle\", instance)),\n null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n null != props.onScrollEnd &&\n listenToNonDelegatedEvent(\"scrollend\", instance),\n null != props.onClick && (instance.onclick = noop$1),\n (instance = !0))\n : (instance = !1);\n instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n switch (hydrationParentFiber.tag) {\n case 5:\n case 31:\n case 13:\n rootOrSingletonContext = !1;\n return;\n case 27:\n case 3:\n rootOrSingletonContext = !0;\n return;\n default:\n hydrationParentFiber = hydrationParentFiber.return;\n }\n}\nfunction popHydrationState(fiber) {\n if (fiber !== hydrationParentFiber) return !1;\n if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n var tag = fiber.tag,\n JSCompiler_temp;\n if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n if ((JSCompiler_temp = 5 === tag))\n (JSCompiler_temp = fiber.type),\n (JSCompiler_temp =\n !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n shouldSetTextContent(fiber.type, fiber.memoizedProps));\n JSCompiler_temp = !JSCompiler_temp;\n }\n JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n popToNextHostParent(fiber);\n if (13 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else if (31 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else\n 27 === tag\n ? ((tag = nextHydratableInstance),\n isSingletonScope(fiber.type)\n ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n (previousHydratableOnEnteringScopedSingleton = null),\n (nextHydratableInstance = fiber))\n : (nextHydratableInstance = tag))\n : (nextHydratableInstance = hydrationParentFiber\n ? getNextHydratable(fiber.stateNode.nextSibling)\n : null);\n return !0;\n}\nfunction resetHydrationState() {\n nextHydratableInstance = hydrationParentFiber = null;\n isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n var queuedErrors = hydrationErrors;\n null !== queuedErrors &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = queuedErrors)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n queuedErrors\n ),\n (hydrationErrors = null));\n return queuedErrors;\n}\nfunction queueHydrationError(error) {\n null === hydrationErrors\n ? (hydrationErrors = [error])\n : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n currentlyRenderingFiber$1 = null,\n lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n push(valueCursor, context._currentValue);\n context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n context._currentValue = valueCursor.current;\n pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n (parent.childLanes & renderLanes) !== renderLanes\n ? ((parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes))\n : null !== alternate &&\n (alternate.childLanes & renderLanes) !== renderLanes &&\n (alternate.childLanes |= renderLanes);\n if (parent === propagationRoot) break;\n parent = parent.return;\n }\n}\nfunction propagateContextChanges(\n workInProgress,\n contexts,\n renderLanes,\n forcePropagateEntireTree\n) {\n var fiber = workInProgress.child;\n null !== fiber && (fiber.return = workInProgress);\n for (; null !== fiber; ) {\n var list = fiber.dependencies;\n if (null !== list) {\n var nextFiber = fiber.child;\n list = list.firstContext;\n a: for (; null !== list; ) {\n var dependency = list;\n list = fiber;\n for (var i = 0; i < contexts.length; i++)\n if (dependency.context === contexts[i]) {\n list.lanes |= renderLanes;\n dependency = list.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n list.return,\n renderLanes,\n workInProgress\n );\n forcePropagateEntireTree || (nextFiber = null);\n break a;\n }\n list = dependency.next;\n }\n } else if (18 === fiber.tag) {\n nextFiber = fiber.return;\n if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n nextFiber.lanes |= renderLanes;\n list = nextFiber.alternate;\n null !== list && (list.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n nextFiber = null;\n } else nextFiber = fiber.child;\n if (null !== nextFiber) nextFiber.return = fiber;\n else\n for (nextFiber = fiber; null !== nextFiber; ) {\n if (nextFiber === workInProgress) {\n nextFiber = null;\n break;\n }\n fiber = nextFiber.sibling;\n if (null !== fiber) {\n fiber.return = nextFiber.return;\n nextFiber = fiber;\n break;\n }\n nextFiber = nextFiber.return;\n }\n fiber = nextFiber;\n }\n}\nfunction propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n forcePropagateEntireTree\n) {\n current = null;\n for (\n var parent = workInProgress, isInsidePropagationBailout = !1;\n null !== parent;\n\n ) {\n if (!isInsidePropagationBailout)\n if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n else if (0 !== (parent.flags & 262144)) break;\n if (10 === parent.tag) {\n var currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent = currentParent.memoizedProps;\n if (null !== currentParent) {\n var context = parent.type;\n objectIs(parent.pendingProps.value, currentParent.value) ||\n (null !== current ? current.push(context) : (current = [context]));\n }\n } else if (parent === hostTransitionProviderCursor.current) {\n currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent.memoizedState.memoizedState !==\n parent.memoizedState.memoizedState &&\n (null !== current\n ? current.push(HostTransitionContext)\n : (current = [HostTransitionContext]));\n }\n parent = parent.return;\n }\n null !== current &&\n propagateContextChanges(\n workInProgress,\n current,\n renderLanes,\n forcePropagateEntireTree\n );\n workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n for (\n currentDependencies = currentDependencies.firstContext;\n null !== currentDependencies;\n\n ) {\n if (\n !objectIs(\n currentDependencies.context._currentValue,\n currentDependencies.memoizedValue\n )\n )\n return !0;\n currentDependencies = currentDependencies.next;\n }\n return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n currentlyRenderingFiber$1 = workInProgress;\n lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n var value = context._currentValue;\n context = { context: context, memoizedValue: value, next: null };\n if (null === lastContextDependency) {\n if (null === consumer) throw Error(formatProdErrorMessage(308));\n lastContextDependency = context;\n consumer.dependencies = { lanes: 0, firstContext: context };\n consumer.flags |= 524288;\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n}\nvar AbortControllerLocal =\n \"undefined\" !== typeof AbortController\n ? AbortController\n : function () {\n var listeners = [],\n signal = (this.signal = {\n aborted: !1,\n addEventListener: function (type, listener) {\n listeners.push(listener);\n }\n });\n this.abort = function () {\n signal.aborted = !0;\n listeners.forEach(function (listener) {\n return listener();\n });\n };\n },\n scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n NormalPriority = Scheduler.unstable_NormalPriority,\n CacheContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0\n };\nfunction createCache() {\n return {\n controller: new AbortControllerLocal(),\n data: new Map(),\n refCount: 0\n };\n}\nfunction releaseCache(cache) {\n cache.refCount--;\n 0 === cache.refCount &&\n scheduleCallback$2(NormalPriority, function () {\n cache.controller.abort();\n });\n}\nvar currentEntangledListeners = null,\n currentEntangledPendingCount = 0,\n currentEntangledLane = 0,\n currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n if (null === currentEntangledListeners) {\n var entangledListeners = (currentEntangledListeners = []);\n currentEntangledPendingCount = 0;\n currentEntangledLane = requestTransitionLane();\n currentEntangledActionThenable = {\n status: \"pending\",\n value: void 0,\n then: function (resolve) {\n entangledListeners.push(resolve);\n }\n };\n }\n currentEntangledPendingCount++;\n thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n return thenable;\n}\nfunction pingEngtangledActionScope() {\n if (\n 0 === --currentEntangledPendingCount &&\n null !== currentEntangledListeners\n ) {\n null !== currentEntangledActionThenable &&\n (currentEntangledActionThenable.status = \"fulfilled\");\n var listeners = currentEntangledListeners;\n currentEntangledListeners = null;\n currentEntangledLane = 0;\n currentEntangledActionThenable = null;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n }\n}\nfunction chainThenableValue(thenable, result) {\n var listeners = [],\n thenableWithOverride = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (resolve) {\n listeners.push(resolve);\n }\n };\n thenable.then(\n function () {\n thenableWithOverride.status = \"fulfilled\";\n thenableWithOverride.value = result;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n },\n function (error) {\n thenableWithOverride.status = \"rejected\";\n thenableWithOverride.reason = error;\n for (error = 0; error < listeners.length; error++)\n (0, listeners[error])(void 0);\n }\n );\n return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n globalMostRecentTransitionTime = now();\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n entangleAsyncAction(transition, returnValue);\n null !== prevOnStartTransitionFinish &&\n prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n var cacheResumedFromPreviousRender = resumedCache.current;\n return null !== cacheResumedFromPreviousRender\n ? cacheResumedFromPreviousRender\n : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n null === prevCachePool\n ? push(resumedCache, resumedCache.current)\n : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n var cacheFromPool = peekCacheFromPool();\n return null === cacheFromPool\n ? null\n : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n SuspenseActionException = Error(formatProdErrorMessage(542)),\n noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n thenable = thenable.status;\n return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n index = thenableState[index];\n void 0 === index\n ? thenableState.push(thenable)\n : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n default:\n if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n else {\n thenableState = workInProgressRoot;\n if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n throw Error(formatProdErrorMessage(482));\n thenableState = thenable;\n thenableState.status = \"pending\";\n thenableState.then(\n function (fulfilledValue) {\n if (\"pending\" === thenable.status) {\n var fulfilledThenable = thenable;\n fulfilledThenable.status = \"fulfilled\";\n fulfilledThenable.value = fulfilledValue;\n }\n },\n function (error) {\n if (\"pending\" === thenable.status) {\n var rejectedThenable = thenable;\n rejectedThenable.status = \"rejected\";\n rejectedThenable.reason = error;\n }\n }\n );\n }\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n }\n suspendedThenable = thenable;\n throw SuspenseException;\n }\n}\nfunction resolveLazy(lazyType) {\n try {\n var init = lazyType._init;\n return init(lazyType._payload);\n } catch (x) {\n if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n throw ((suspendedThenable = x), SuspenseException);\n throw x;\n }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n var thenable = suspendedThenable;\n suspendedThenable = null;\n return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n if (\n rejectedReason === SuspenseException ||\n rejectedReason === SuspenseActionException\n )\n throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n var index = thenableIndexCounter$1;\n thenableIndexCounter$1 += 1;\n null === thenableState$1 && (thenableState$1 = []);\n return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n element = element.props.ref;\n workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n throw Error(formatProdErrorMessage(525));\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n formatProdErrorMessage(\n 31,\n \"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber\n )\n );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(currentFirstChild) {\n for (var existingChildren = new Map(); null !== currentFirstChild; )\n null !== currentFirstChild.key\n ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n : existingChildren.set(currentFirstChild.index, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return existingChildren;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects)\n return (newFiber.flags |= 1048576), lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 67108866;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 67108866);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n );\n if (\n null !== current &&\n (current.elementType === elementType ||\n (\"object\" === typeof elementType &&\n null !== elementType &&\n elementType.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(elementType) === current.type))\n )\n return (\n (current = useFiber(current, element.props)),\n coerceRef(current, element),\n (current.return = returnFiber),\n current\n );\n current = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n null,\n returnFiber.mode,\n lanes\n );\n coerceRef(current, element);\n current.return = returnFiber;\n return current;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n createChild(returnFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newChild = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"function\" === typeof newChild.then)\n return createChild(returnFiber, unwrapThenable(newChild), lanes);\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return createChild(\n returnFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? updateElement(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateSlot(returnFiber, oldFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return null !== key\n ? null\n : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n if (\"function\" === typeof newChild.then)\n return updateSlot(\n returnFiber,\n oldFiber,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateSlot(\n returnFiber,\n oldFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updateElement(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n );\n if (\"function\" === typeof newChild.then)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n (shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n if (null == newChildren) throw Error(formatProdErrorMessage(151));\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n step = newChildren.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildren.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildren.next())\n (step = createChild(returnFiber, step.value, lanes)),\n null !== step &&\n ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n !step.done;\n newIdx++, step = newChildren.next()\n )\n (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n null !== step &&\n (shouldTrackSideEffects &&\n null !== step.alternate &&\n oldFiber.delete(null === step.key ? newIdx : step.key),\n (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n ) {\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key &&\n (newChild = newChild.props.children);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n a: {\n for (var key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === currentFirstChild.tag) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n newChild.props.children\n );\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n } else if (\n currentFirstChild.elementType === key ||\n (\"object\" === typeof key &&\n null !== key &&\n key.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(key) === currentFirstChild.type)\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.props);\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n } else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((lanes = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : ((lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = lanes));\n }\n return placeSingleChild(returnFiber);\n case REACT_PORTAL_TYPE:\n a: {\n for (key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n newChild.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n newChild.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.children || []);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n lanes.return = returnFiber;\n returnFiber = lanes;\n }\n return placeSingleChild(returnFiber);\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild))\n return reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n if (getIteratorFn(newChild)) {\n key = getIteratorFn(newChild);\n if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n newChild = key.call(newChild);\n return reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n }\n if (\"function\" === typeof newChild.then)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n ? ((newChild = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n (lanes = useFiber(currentFirstChild, newChild)),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n (lanes.return = returnFiber),\n (returnFiber = lanes)),\n placeSingleChild(returnFiber))\n : deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n return function (returnFiber, currentFirstChild, newChild, lanes) {\n try {\n thenableIndexCounter$1 = 0;\n var firstChildFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n thenableState$1 = null;\n return firstChildFiber;\n } catch (x) {\n if (x === SuspenseException || x === SuspenseActionException) throw x;\n var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n fiber.lanes = lanes;\n fiber.return = returnFiber;\n return fiber;\n } finally {\n }\n };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n mountChildFibers = createChildReconciler(!1),\n hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n callbacks: null\n };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n callbacks: null\n });\n}\nfunction createUpdate(lane) {\n return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n if (null === updateQueue) return null;\n updateQueue = updateQueue.shared;\n if (0 !== (executionContext & 2)) {\n var pending = updateQueue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n updateQueue.pending = update;\n update = getRootForUpdatedFiber(fiber);\n markUpdateLaneFromFiberToRoot(fiber, null, lane);\n return update;\n }\n enqueueUpdate$1(fiber, updateQueue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: null,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n callbacks: current.callbacks\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n if (didReadFromEntangledAsyncAction) {\n var entangledActionThenable = currentEntangledActionThenable;\n if (null !== entangledActionThenable) throw entangledActionThenable;\n }\n}\nfunction processUpdateQueue(\n workInProgress$jscomp$0,\n props,\n instance$jscomp$0,\n renderLanes\n) {\n didReadFromEntangledAsyncAction = !1;\n var queue = workInProgress$jscomp$0.updateQueue;\n hasForceUpdate = !1;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress$jscomp$0.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane & -536870913,\n isHiddenUpdate = updateLane !== pendingQueue.lane;\n if (\n isHiddenUpdate\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n 0 !== updateLane &&\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n null !== current &&\n (current = current.next =\n {\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: null,\n next: null\n });\n a: {\n var workInProgress = workInProgress$jscomp$0,\n update = pendingQueue;\n updateLane = props;\n var instance = instance$jscomp$0;\n switch (update.tag) {\n case 1:\n workInProgress = update.payload;\n if (\"function\" === typeof workInProgress) {\n newState = workInProgress.call(instance, newState, updateLane);\n break a;\n }\n newState = workInProgress;\n break a;\n case 3:\n workInProgress.flags = (workInProgress.flags & -65537) | 128;\n case 0:\n workInProgress = update.payload;\n updateLane =\n \"function\" === typeof workInProgress\n ? workInProgress.call(instance, newState, updateLane)\n : workInProgress;\n if (null === updateLane || void 0 === updateLane) break a;\n newState = assign({}, newState, updateLane);\n break a;\n case 2:\n hasForceUpdate = !0;\n }\n }\n updateLane = pendingQueue.callback;\n null !== updateLane &&\n ((workInProgress$jscomp$0.flags |= 64),\n isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n (isHiddenUpdate = queue.callbacks),\n null === isHiddenUpdate\n ? (queue.callbacks = [updateLane])\n : isHiddenUpdate.push(updateLane));\n } else\n (isHiddenUpdate = {\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = isHiddenUpdate),\n (lastPendingUpdate = newState))\n : (current = current.next = isHiddenUpdate),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (isHiddenUpdate = pendingQueue),\n (pendingQueue = isHiddenUpdate.next),\n (isHiddenUpdate.next = null),\n (queue.lastBaseUpdate = isHiddenUpdate),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress$jscomp$0.lanes = lastBaseUpdate;\n workInProgress$jscomp$0.memoizedState = newState;\n }\n}\nfunction callCallback(callback, context) {\n if (\"function\" !== typeof callback)\n throw Error(formatProdErrorMessage(191, callback));\n callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n var callbacks = updateQueue.callbacks;\n if (null !== callbacks)\n for (\n updateQueue.callbacks = null, updateQueue = 0;\n updateQueue < callbacks.length;\n updateQueue++\n )\n callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n fiber = entangledRenderLanes;\n push(prevEntangledRenderLanesCursor, fiber);\n push(currentTreeHiddenStackCursor, context);\n entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n pop(currentTreeHiddenStackCursor);\n pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n var current = handler.alternate;\n push(suspenseStackCursor, suspenseStackCursor.current & 1);\n push(suspenseHandlerStackCursor, handler);\n null === shellBoundary &&\n (null === current || null !== currentTreeHiddenStackCursor.current\n ? (shellBoundary = handler)\n : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, fiber);\n null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n 22 === fiber.tag\n ? (push(suspenseStackCursor, suspenseStackCursor.current),\n push(suspenseHandlerStackCursor, fiber),\n null === shellBoundary && (shellBoundary = fiber))\n : reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n pop(suspenseHandlerStackCursor);\n shellBoundary === fiber && (shellBoundary = null);\n pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (\n null !== state &&\n ((state = state.dehydrated),\n null === state ||\n isSuspenseInstancePending(state) ||\n isSuspenseInstanceFallback(state))\n )\n return node;\n } else if (\n 19 === node.tag &&\n (\"forwards\" === node.memoizedProps.revealOrder ||\n \"backwards\" === node.memoizedProps.revealOrder ||\n \"unstable_legacy-backwards\" === node.memoizedProps.revealOrder ||\n \"together\" === node.memoizedProps.revealOrder)\n ) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n}\nvar renderLanes = 0,\n currentlyRenderingFiber = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1,\n shouldDoubleInvokeUserFnsInHooksDEV = !1,\n localIdCounter = 0,\n thenableIndexCounter = 0,\n thenableState = null,\n globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n if (null === prevDeps) return !1;\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n}\nfunction renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber = workInProgress;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactSharedInternals.H =\n null === current || null === current.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate;\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n nextRenderLanes = Component(props, secondArg);\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n didScheduleRenderPhaseUpdateDuringThisPass &&\n (nextRenderLanes = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n ));\n finishRenderingHooks(current);\n return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n ReactSharedInternals.H = ContextOnlyDispatcher;\n var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdate = !1;\n thenableIndexCounter = 0;\n thenableState = null;\n if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n null === current ||\n didReceiveUpdate ||\n ((current = current.dependencies),\n null !== current &&\n checkIfContextChanged(current) &&\n (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n currentlyRenderingFiber = workInProgress;\n var numberOfReRenders = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n thenableIndexCounter = 0;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n numberOfReRenders += 1;\n workInProgressHook = currentHook = null;\n if (null != workInProgress.updateQueue) {\n var children = workInProgress.updateQueue;\n children.lastEffect = null;\n children.events = null;\n children.stores = null;\n null != children.memoCache && (children.memoCache.index = 0);\n }\n ReactSharedInternals.H = HooksDispatcherOnRerender;\n children = Component(props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n return children;\n}\nfunction TransitionAwareHostComponent() {\n var dispatcher = ReactSharedInternals.H,\n maybeThenable = dispatcher.useState()[0];\n maybeThenable =\n \"function\" === typeof maybeThenable.then\n ? useThenable(maybeThenable)\n : maybeThenable;\n dispatcher = dispatcher.useState()[0];\n (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n (currentlyRenderingFiber.flags |= 1024);\n return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n var didRenderIdHook = 0 !== localIdCounter;\n localIdCounter = 0;\n return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.flags &= -2053;\n current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n if (didScheduleRenderPhaseUpdate) {\n for (\n workInProgress = workInProgress.memoizedState;\n null !== workInProgress;\n\n ) {\n var queue = workInProgress.queue;\n null !== queue && (queue.pending = null);\n workInProgress = workInProgress.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n thenableIndexCounter = localIdCounter = 0;\n thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook) {\n if (null === currentlyRenderingFiber.alternate)\n throw Error(formatProdErrorMessage(467));\n throw Error(formatProdErrorMessage(310));\n }\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n var index = thenableIndexCounter;\n thenableIndexCounter += 1;\n null === thenableState && (thenableState = []);\n thenable = trackUsedThenable(thenableState, thenable, index);\n index = currentlyRenderingFiber;\n null ===\n (null === workInProgressHook\n ? index.memoizedState\n : workInProgressHook.next) &&\n ((index = index.alternate),\n (ReactSharedInternals.H =\n null === index || null === index.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate));\n return thenable;\n}\nfunction use(usable) {\n if (null !== usable && \"object\" === typeof usable) {\n if (\"function\" === typeof usable.then) return useThenable(usable);\n if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n }\n throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n var memoCache = null,\n updateQueue = currentlyRenderingFiber.updateQueue;\n null !== updateQueue && (memoCache = updateQueue.memoCache);\n if (null == memoCache) {\n var current = currentlyRenderingFiber.alternate;\n null !== current &&\n ((current = current.updateQueue),\n null !== current &&\n ((current = current.memoCache),\n null != current &&\n (memoCache = {\n data: current.data.map(function (array) {\n return array.slice();\n }),\n index: 0\n })));\n }\n null == memoCache && (memoCache = { data: [], index: 0 });\n null === updateQueue &&\n ((updateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = updateQueue));\n updateQueue.memoCache = memoCache;\n updateQueue = memoCache.data[memoCache.index];\n if (void 0 === updateQueue)\n for (\n updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n current < size;\n current++\n )\n updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n memoCache.index++;\n return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n var hook = updateWorkInProgressHook();\n return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n var queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var baseQueue = hook.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n pendingQueue = hook.baseState;\n if (null === baseQueue) hook.memoizedState = pendingQueue;\n else {\n current = baseQueue.next;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = current,\n didReadFromEntangledAsyncAction$60 = !1;\n do {\n var updateLane = update.lane & -536870913;\n if (\n updateLane !== update.lane\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n var revertLane = update.revertLane;\n if (0 === revertLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next =\n {\n lane: 0,\n revertLane: 0,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$60 = !0);\n else if ((renderLanes & revertLane) === revertLane) {\n update = update.next;\n revertLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$60 = !0);\n continue;\n } else\n (updateLane = {\n lane: 0,\n revertLane: update.revertLane,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n (currentlyRenderingFiber.lanes |= revertLane),\n (workInProgressRootSkippedLanes |= revertLane);\n updateLane = update.action;\n shouldDoubleInvokeUserFnsInHooksDEV &&\n reducer(pendingQueue, updateLane);\n pendingQueue = update.hasEagerState\n ? update.eagerState\n : reducer(pendingQueue, updateLane);\n } else\n (revertLane = {\n lane: updateLane,\n revertLane: update.revertLane,\n gesture: update.gesture,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n (currentlyRenderingFiber.lanes |= updateLane),\n (workInProgressRootSkippedLanes |= updateLane);\n update = update.next;\n } while (null !== update && update !== current);\n null === newBaseQueueLast\n ? (baseFirst = pendingQueue)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n if (\n !objectIs(pendingQueue, hook.memoizedState) &&\n ((didReceiveUpdate = !0),\n didReadFromEntangledAsyncAction$60 &&\n ((reducer = currentEntangledActionThenable), null !== reducer))\n )\n throw reducer;\n hook.memoizedState = pendingQueue;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = pendingQueue;\n }\n null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = updateWorkInProgressHook(),\n isHydrating$jscomp$0 = isHydrating;\n if (isHydrating$jscomp$0) {\n if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else getServerSnapshot = getSnapshot();\n var snapshotChanged = !objectIs(\n (currentHook || hook).memoizedState,\n getServerSnapshot\n );\n snapshotChanged &&\n ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n hook = hook.queue;\n updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n subscribe\n ]);\n if (\n hook.getSnapshot !== getSnapshot ||\n snapshotChanged ||\n (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n ) {\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n hook,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n isHydrating$jscomp$0 ||\n 0 !== (renderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= 16384;\n fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n getSnapshot = currentlyRenderingFiber.updateQueue;\n null === getSnapshot\n ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = getSnapshot),\n (getSnapshot.stores = [fiber]))\n : ((renderedSnapshot = getSnapshot.stores),\n null === renderedSnapshot\n ? (getSnapshot.stores = [fiber])\n : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n });\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n var hook = mountWorkInProgressHook();\n if (\"function\" === typeof initialState) {\n var initialStateInitializer = initialState;\n initialState = initialStateInitializer();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n initialStateInitializer();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n }\n hook.memoizedState = hook.baseState = initialState;\n hook.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n hook.baseState = passthrough;\n return updateReducerImpl(\n hook,\n currentHook,\n \"function\" === typeof reducer ? reducer : basicStateReducer\n );\n}\nfunction dispatchActionState(\n fiber,\n actionQueue,\n setPendingState,\n setState,\n payload\n) {\n if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n fiber = actionQueue.action;\n if (null !== fiber) {\n var actionNode = {\n payload: payload,\n action: fiber,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (listener) {\n actionNode.listeners.push(listener);\n }\n };\n null !== ReactSharedInternals.T\n ? setPendingState(!0)\n : (actionNode.isTransition = !1);\n setState(actionNode);\n setPendingState = actionQueue.pending;\n null === setPendingState\n ? ((actionNode.next = actionQueue.pending = actionNode),\n runActionStateAction(actionQueue, actionNode))\n : ((actionNode.next = setPendingState.next),\n (actionQueue.pending = setPendingState.next = actionNode));\n }\n}\nfunction runActionStateAction(actionQueue, node) {\n var action = node.action,\n payload = node.payload,\n prevState = actionQueue.state;\n if (node.isTransition) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = action(prevState, payload),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n handleActionReturnValue(actionQueue, node, returnValue);\n } catch (error) {\n onActionError(actionQueue, node, error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n } else\n try {\n (prevTransition = action(prevState, payload)),\n handleActionReturnValue(actionQueue, node, prevTransition);\n } catch (error$66) {\n onActionError(actionQueue, node, error$66);\n }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ? returnValue.then(\n function (nextState) {\n onActionSuccess(actionQueue, node, nextState);\n },\n function (error) {\n return onActionError(actionQueue, node, error);\n }\n )\n : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n actionNode.status = \"fulfilled\";\n actionNode.value = nextState;\n notifyActionListeners(actionNode);\n actionQueue.state = nextState;\n actionNode = actionQueue.pending;\n null !== actionNode &&\n ((nextState = actionNode.next),\n nextState === actionNode\n ? (actionQueue.pending = null)\n : ((nextState = nextState.next),\n (actionNode.next = nextState),\n runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n var last = actionQueue.pending;\n actionQueue.pending = null;\n if (null !== last) {\n last = last.next;\n do\n (actionNode.status = \"rejected\"),\n (actionNode.reason = error),\n notifyActionListeners(actionNode),\n (actionNode = actionNode.next);\n while (actionNode !== last);\n }\n actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n actionNode = actionNode.listeners;\n for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n if (isHydrating) {\n var ssrFormState = workInProgressRoot.formState;\n if (null !== ssrFormState) {\n a: {\n var JSCompiler_inline_result = currentlyRenderingFiber;\n if (isHydrating) {\n if (nextHydratableInstance) {\n b: {\n var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n for (\n var inRootOrSingleton = rootOrSingletonContext;\n 8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n ) {\n if (!inRootOrSingleton) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n if (null === JSCompiler_inline_result$jscomp$0) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n }\n inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n JSCompiler_inline_result$jscomp$0 =\n \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n ? JSCompiler_inline_result$jscomp$0\n : null;\n }\n if (JSCompiler_inline_result$jscomp$0) {\n nextHydratableInstance = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n JSCompiler_inline_result =\n \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n break a;\n }\n }\n throwOnHydrationMismatch(JSCompiler_inline_result);\n }\n JSCompiler_inline_result = !1;\n }\n JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n }\n }\n ssrFormState = mountWorkInProgressHook();\n ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n JSCompiler_inline_result = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: actionStateReducer,\n lastRenderedState: initialStateProp\n };\n ssrFormState.queue = JSCompiler_inline_result;\n ssrFormState = dispatchSetState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result\n );\n JSCompiler_inline_result.dispatch = ssrFormState;\n JSCompiler_inline_result = mountStateImpl(!1);\n inRootOrSingleton = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !1,\n JSCompiler_inline_result.queue\n );\n JSCompiler_inline_result = mountWorkInProgressHook();\n JSCompiler_inline_result$jscomp$0 = {\n state: initialStateProp,\n dispatch: null,\n action: action,\n pending: null\n };\n JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n ssrFormState = dispatchActionState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result$jscomp$0,\n inRootOrSingleton,\n ssrFormState\n );\n JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n JSCompiler_inline_result.memoizedState = action;\n return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n var stateHook = updateWorkInProgressHook();\n return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n currentStateHook = updateReducerImpl(\n stateHook,\n currentStateHook,\n actionStateReducer\n )[0];\n stateHook = updateReducer(basicStateReducer)[0];\n if (\n \"object\" === typeof currentStateHook &&\n null !== currentStateHook &&\n \"function\" === typeof currentStateHook.then\n )\n try {\n var state = useThenable(currentStateHook);\n } catch (x) {\n if (x === SuspenseException) throw SuspenseActionException;\n throw x;\n }\n else state = currentStateHook;\n currentStateHook = updateWorkInProgressHook();\n var actionQueue = currentStateHook.queue,\n dispatch = actionQueue.dispatch;\n action !== currentStateHook.memoizedState &&\n ((currentlyRenderingFiber.flags |= 2048),\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n actionStateActionEffect.bind(null, actionQueue, action),\n null\n ));\n return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n var stateHook = updateWorkInProgressHook(),\n currentStateHook = currentHook;\n if (null !== currentStateHook)\n return updateActionStateImpl(stateHook, currentStateHook, action);\n updateWorkInProgressHook();\n stateHook = stateHook.memoizedState;\n currentStateHook = updateWorkInProgressHook();\n var dispatch = currentStateHook.queue.dispatch;\n currentStateHook.memoizedState = action;\n return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n inst = currentlyRenderingFiber.updateQueue;\n null === inst &&\n ((inst = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = inst));\n create = inst.lastEffect;\n null === create\n ? (inst.lastEffect = tag.next = tag)\n : ((deps = create.next),\n (create.next = tag),\n (tag.next = deps),\n (inst.lastEffect = tag));\n return tag;\n}\nfunction updateRef() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n currentlyRenderingFiber.flags |= fiberFlags;\n hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n { destroy: void 0 },\n create,\n void 0 === deps ? null : deps\n );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var inst = hook.memoizedState.inst;\n null !== currentHook &&\n null !== deps &&\n areHookInputsEqual(deps, currentHook.memoizedState.deps)\n ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n : ((currentlyRenderingFiber.flags |= fiberFlags),\n (hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n inst,\n create,\n deps\n )));\n}\nfunction mountEffect(create, deps) {\n mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n currentlyRenderingFiber.flags |= 4;\n var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n if (null === componentUpdateQueue)\n (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n (componentUpdateQueue.events = [payload]);\n else {\n var events = componentUpdateQueue.events;\n null === events\n ? (componentUpdateQueue.events = [payload])\n : events.push(payload);\n }\n}\nfunction updateEvent(callback) {\n var ref = updateWorkInProgressHook().memoizedState;\n useEffectEventImpl({ ref: ref, nextImpl: callback });\n return function () {\n if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n}\nfunction updateInsertionEffect(create, deps) {\n return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref) {\n create = create();\n var refCleanup = ref(create);\n return function () {\n \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n };\n }\n if (null !== ref && void 0 !== ref)\n return (\n (create = create()),\n (ref.current = create),\n function () {\n ref.current = null;\n }\n );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n prevState = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [prevState, deps];\n return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n if (\n void 0 === initialValue ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (hook.memoizedState = value);\n hook.memoizedState = initialValue;\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n if (objectIs(value, prevValue)) return value;\n if (null !== currentTreeHiddenStackCursor.current)\n return (\n (hook = mountDeferredValueImpl(hook, value, initialValue)),\n objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n hook\n );\n if (\n 0 === (renderLanes & 42) ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (didReceiveUpdate = !0), (hook.memoizedState = value);\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p =\n 0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n try {\n var returnValue = callback(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n if (\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ) {\n var thenableForFinishedState = chainThenableValue(\n returnValue,\n finishedState\n );\n dispatchSetStateInternal(\n fiber,\n queue,\n thenableForFinishedState,\n requestUpdateLane(fiber)\n );\n } else\n dispatchSetStateInternal(\n fiber,\n queue,\n finishedState,\n requestUpdateLane(fiber)\n );\n } catch (error) {\n dispatchSetStateInternal(\n fiber,\n queue,\n { then: function () {}, status: \"rejected\", reason: error },\n requestUpdateLane()\n );\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n var queue = ensureFormComponentIsStateful(formFiber).queue;\n startTransition(\n formFiber,\n queue,\n pendingState,\n sharedNotPendingObject,\n null === action\n ? noop\n : function () {\n requestFormReset$1(formFiber);\n return action(formData);\n }\n );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n var existingStateHook = formFiber.memoizedState;\n if (null !== existingStateHook) return existingStateHook;\n existingStateHook = {\n memoizedState: sharedNotPendingObject,\n baseState: sharedNotPendingObject,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: sharedNotPendingObject\n },\n next: null\n };\n var initialResetState = {};\n existingStateHook.next = {\n memoizedState: initialResetState,\n baseState: initialResetState,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialResetState\n },\n next: null\n };\n formFiber.memoizedState = existingStateHook;\n formFiber = formFiber.alternate;\n null !== formFiber && (formFiber.memoizedState = existingStateHook);\n return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n var stateHook = ensureFormComponentIsStateful(formFiber);\n null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n dispatchSetStateInternal(\n formFiber,\n stateHook.next.queue,\n {},\n requestUpdateLane()\n );\n}\nfunction useHostTransitionStatus() {\n return readContext(HostTransitionContext);\n}\nfunction updateId() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n for (var provider = fiber.return; null !== provider; ) {\n switch (provider.tag) {\n case 24:\n case 3:\n var lane = requestUpdateLane();\n fiber = createUpdate(lane);\n var root$69 = enqueueUpdate(provider, fiber, lane);\n null !== root$69 &&\n (scheduleUpdateOnFiber(root$69, provider, lane),\n entangleTransitions(root$69, provider, lane));\n provider = { cache: createCache() };\n fiber.payload = provider;\n return;\n }\n provider = provider.return;\n }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n var lane = requestUpdateLane();\n action = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n isRenderPhaseUpdate(fiber)\n ? enqueueRenderPhaseUpdate(queue, action)\n : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n null !== action &&\n (scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n var lane = requestUpdateLane();\n dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n var update = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n else {\n var alternate = fiber.alternate;\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n )\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.hasEagerState = !0;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState))\n return (\n enqueueUpdate$1(fiber, queue, update, 0),\n null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n !1\n );\n } catch (error) {\n } finally {\n }\n action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n if (null !== action)\n return (\n scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane),\n !0\n );\n }\n return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n action = {\n lane: 2,\n revertLane: requestTransitionLane(),\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) {\n if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n } else\n (throwIfDuringRender = enqueueConcurrentHookUpdate(\n fiber,\n queue,\n action,\n 2\n )),\n null !== throwIfDuringRender &&\n scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return (\n fiber === currentlyRenderingFiber ||\n (null !== alternate && alternate === currentlyRenderingFiber)\n );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n !0;\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n if (0 !== (lane & 4194048)) {\n var queueLanes = queue.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n queue.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n use: use,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError,\n useHostTransitionStatus: throwInvalidHookError,\n useFormState: throwInvalidHookError,\n useActionState: throwInvalidHookError,\n useOptimistic: throwInvalidHookError,\n useMemoCache: throwInvalidHookError,\n useCacheRefresh: throwInvalidHookError\n};\nContextOnlyDispatcher.useEffectEvent = throwInvalidHookError;\nvar HooksDispatcherOnMount = {\n readContext: readContext,\n use: use,\n useCallback: function (callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n },\n useContext: readContext,\n useEffect: mountEffect,\n useImperativeHandle: function (ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n mountEffectImpl(\n 4194308,\n 4,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n },\n useLayoutEffect: function (create, deps) {\n return mountEffectImpl(4194308, 4, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n mountEffectImpl(4, 2, create, deps);\n },\n useMemo: function (nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var nextValue = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [nextValue, deps];\n return nextValue;\n },\n useReducer: function (reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n if (void 0 !== init) {\n var initialState = init(initialArg);\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n init(initialArg);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n } else initialState = initialArg;\n hook.memoizedState = hook.baseState = initialState;\n reducer = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = reducer;\n reducer = reducer.dispatch = dispatchReducerAction.bind(\n null,\n currentlyRenderingFiber,\n reducer\n );\n return [hook.memoizedState, reducer];\n },\n useRef: function (initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n },\n useState: function (initialState) {\n initialState = mountStateImpl(initialState);\n var queue = initialState.queue,\n dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n queue.dispatch = dispatch;\n return [initialState.memoizedState, dispatch];\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = mountWorkInProgressHook();\n return mountDeferredValueImpl(hook, value, initialValue);\n },\n useTransition: function () {\n var stateHook = mountStateImpl(!1);\n stateHook = startTransition.bind(\n null,\n currentlyRenderingFiber,\n stateHook.queue,\n !0,\n !1\n );\n mountWorkInProgressHook().memoizedState = stateHook;\n return [!1, stateHook];\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = mountWorkInProgressHook();\n if (isHydrating) {\n if (void 0 === getServerSnapshot)\n throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else {\n getServerSnapshot = getSnapshot();\n if (null === workInProgressRoot)\n throw Error(formatProdErrorMessage(349));\n 0 !== (workInProgressRootRenderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n hook.memoizedState = getServerSnapshot;\n var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n hook.queue = inst;\n mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n subscribe\n ]);\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n inst,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n return getServerSnapshot;\n },\n useId: function () {\n var hook = mountWorkInProgressHook(),\n identifierPrefix = workInProgressRoot.identifierPrefix;\n if (isHydrating) {\n var JSCompiler_inline_result = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n JSCompiler_inline_result =\n (\n idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n ).toString(32) + JSCompiler_inline_result;\n identifierPrefix =\n \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n JSCompiler_inline_result = localIdCounter++;\n 0 < JSCompiler_inline_result &&\n (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n identifierPrefix += \"_\";\n } else\n (JSCompiler_inline_result = globalClientIdCounter++),\n (identifierPrefix =\n \"_\" +\n identifierPrefix +\n \"r_\" +\n JSCompiler_inline_result.toString(32) +\n \"_\");\n return (hook.memoizedState = identifierPrefix);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: mountActionState,\n useActionState: mountActionState,\n useOptimistic: function (passthrough) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = hook.baseState = passthrough;\n var queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n hook.queue = queue;\n hook = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !0,\n queue\n );\n queue.dispatch = hook;\n return [passthrough, hook];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n null,\n currentlyRenderingFiber\n ));\n },\n useEffectEvent: function (callback) {\n var hook = mountWorkInProgressHook(),\n ref = { impl: callback };\n hook.memoizedState = ref;\n return function () {\n if (0 !== (executionContext & 2))\n throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n }\n },\n HooksDispatcherOnUpdate = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: updateReducer,\n useRef: updateRef,\n useState: function () {\n return updateReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: updateActionState,\n useActionState: updateActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh\n };\nHooksDispatcherOnUpdate.useEffectEvent = updateEvent;\nvar HooksDispatcherOnRerender = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: rerenderReducer,\n useRef: updateRef,\n useState: function () {\n return rerenderReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return null === currentHook\n ? mountDeferredValueImpl(hook, value, initialValue)\n : updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: rerenderActionState,\n useActionState: rerenderActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n if (null !== currentHook)\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n hook.baseState = passthrough;\n return [passthrough, hook.queue.dispatch];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh\n};\nHooksDispatcherOnRerender.useEffectEvent = updateEvent;\nfunction applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n) {\n ctor = workInProgress.memoizedState;\n getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n getDerivedStateFromProps =\n null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n ? ctor\n : assign({}, ctor, getDerivedStateFromProps);\n workInProgress.memoizedState = getDerivedStateFromProps;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n enqueueSetState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueReplaceState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 1;\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueForceUpdate: function (inst, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 2;\n void 0 !== callback && null !== callback && (update.callback = callback);\n callback = enqueueUpdate(inst, update, lane);\n null !== callback &&\n (scheduleUpdateOnFiber(callback, inst, lane),\n entangleTransitions(callback, inst, lane));\n }\n};\nfunction checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n) {\n workInProgress = workInProgress.stateNode;\n return \"function\" === typeof workInProgress.shouldComponentUpdate\n ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n : ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n}\nfunction callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n) {\n workInProgress = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== workInProgress &&\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n var newProps = baseProps;\n if (\"ref\" in baseProps) {\n newProps = {};\n for (var propName in baseProps)\n \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n }\n if ((Component = Component.defaultProps)) {\n newProps === baseProps && (newProps = assign({}, newProps));\n for (var propName$73 in Component)\n void 0 === newProps[propName$73] &&\n (newProps[propName$73] = Component[propName$73]);\n }\n return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n try {\n var onUncaughtError = root.onUncaughtError;\n onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n } catch (e$74) {\n setTimeout(function () {\n throw e$74;\n });\n }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n try {\n var onCaughtError = root.onCaughtError;\n onCaughtError(errorInfo.value, {\n componentStack: errorInfo.stack,\n errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n });\n } catch (e$75) {\n setTimeout(function () {\n throw e$75;\n });\n }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n lane.payload = { element: null };\n lane.callback = function () {\n logUncaughtError(root, errorInfo);\n };\n return lane;\n}\nfunction createClassErrorUpdate(lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n update.payload = function () {\n return getDerivedStateFromError(error);\n };\n update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this));\n var stack = errorInfo.stack;\n this.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n });\n}\nfunction throwException(\n root,\n returnFiber,\n sourceFiber,\n value,\n rootRenderLanes\n) {\n sourceFiber.flags |= 32768;\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n returnFiber = sourceFiber.alternate;\n null !== returnFiber &&\n propagateParentContextChanges(\n returnFiber,\n sourceFiber,\n rootRenderLanes,\n !0\n );\n sourceFiber = suspenseHandlerStackCursor.current;\n if (null !== sourceFiber) {\n switch (sourceFiber.tag) {\n case 31:\n case 13:\n return (\n null === shellBoundary\n ? renderDidSuspendDelayIfPossible()\n : null === sourceFiber.alternate &&\n 0 === workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 3),\n (sourceFiber.flags &= -257),\n (sourceFiber.flags |= 65536),\n (sourceFiber.lanes = rootRenderLanes),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? (sourceFiber.updateQueue = new Set([value]))\n : returnFiber.add(value),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n case 22:\n return (\n (sourceFiber.flags |= 65536),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? ((returnFiber = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([value])\n }),\n (sourceFiber.updateQueue = returnFiber))\n : ((sourceFiber = returnFiber.retryQueue),\n null === sourceFiber\n ? (returnFiber.retryQueue = new Set([value]))\n : sourceFiber.add(value)),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n }\n throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n }\n attachPingListener(root, value, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return !1;\n }\n if (isHydrating)\n return (\n (returnFiber = suspenseHandlerStackCursor.current),\n null !== returnFiber\n ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n (returnFiber.flags |= 65536),\n (returnFiber.lanes = rootRenderLanes),\n value !== HydrationMismatchException &&\n ((root = Error(formatProdErrorMessage(422), { cause: value })),\n queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n : (value !== HydrationMismatchException &&\n ((returnFiber = Error(formatProdErrorMessage(423), {\n cause: value\n })),\n queueHydrationError(\n createCapturedValueAtFiber(returnFiber, sourceFiber)\n )),\n (root = root.current.alternate),\n (root.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (root.lanes |= rootRenderLanes),\n (value = createCapturedValueAtFiber(value, sourceFiber)),\n (rootRenderLanes = createRootErrorUpdate(\n root.stateNode,\n value,\n rootRenderLanes\n )),\n enqueueCapturedUpdate(root, rootRenderLanes),\n 4 !== workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 2)),\n !1\n );\n var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n null === workInProgressRootConcurrentErrors\n ? (workInProgressRootConcurrentErrors = [wrapperError])\n : workInProgressRootConcurrentErrors.push(wrapperError);\n 4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n if (null === returnFiber) return !0;\n value = createCapturedValueAtFiber(value, sourceFiber);\n sourceFiber = returnFiber;\n do {\n switch (sourceFiber.tag) {\n case 3:\n return (\n (sourceFiber.flags |= 65536),\n (root = rootRenderLanes & -rootRenderLanes),\n (sourceFiber.lanes |= root),\n (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n enqueueCapturedUpdate(sourceFiber, root),\n !1\n );\n case 1:\n if (\n ((returnFiber = sourceFiber.type),\n (wrapperError = sourceFiber.stateNode),\n 0 === (sourceFiber.flags & 128) &&\n (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n (null !== wrapperError &&\n \"function\" === typeof wrapperError.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n )\n return (\n (sourceFiber.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (sourceFiber.lanes |= rootRenderLanes),\n (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n initializeClassErrorUpdate(\n rootRenderLanes,\n root,\n sourceFiber,\n value\n ),\n enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n !1\n );\n }\n sourceFiber = sourceFiber.return;\n } while (null !== sourceFiber);\n return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n}\nfunction updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n Component = Component.render;\n var ref = workInProgress.ref;\n if (\"ref\" in nextProps) {\n var propsWithoutRef = {};\n for (var key in nextProps)\n \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n } else propsWithoutRef = nextProps;\n prepareToReadContext(workInProgress);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n propsWithoutRef,\n ref,\n renderLanes\n );\n key = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && key && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare\n )\n return (\n (workInProgress.tag = 15),\n (workInProgress.type = type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n type,\n nextProps,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n var prevProps = type.memoizedProps;\n Component = Component.compare;\n Component = null !== Component ? Component : shallowEqual;\n if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null !== current) {\n var prevProps = current.memoizedProps;\n if (\n shallowEqual(prevProps, nextProps) &&\n current.ref === workInProgress.ref\n )\n if (\n ((didReceiveUpdate = !1),\n (workInProgress.pendingProps = nextProps = prevProps),\n checkScheduledUpdateOrContext(current, renderLanes))\n )\n 0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n else\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n}\nfunction updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n nextProps\n) {\n var nextChildren = nextProps.children,\n prevState = null !== current ? current.memoizedState : null;\n null === current &&\n null === workInProgress.stateNode &&\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n if (\"hidden\" === nextProps.mode) {\n if (0 !== (workInProgress.flags & 128)) {\n prevState =\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n if (null !== current) {\n nextProps = workInProgress.child = current.child;\n for (nextChildren = 0; null !== nextProps; )\n (nextChildren =\n nextChildren | nextProps.lanes | nextProps.childLanes),\n (nextProps = nextProps.sibling);\n nextProps = nextChildren & ~prevState;\n } else (nextProps = 0), (workInProgress.child = null);\n return deferHiddenOffscreenComponent(\n current,\n workInProgress,\n prevState,\n renderLanes,\n nextProps\n );\n }\n if (0 !== (renderLanes & 536870912))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n null !== current &&\n pushTransition(\n workInProgress,\n null !== prevState ? prevState.cachePool : null\n ),\n null !== prevState\n ? pushHiddenContext(workInProgress, prevState)\n : reuseHiddenContextOnStack(),\n pushOffscreenSuspenseHandler(workInProgress);\n else\n return (\n (nextProps = workInProgress.lanes = 536870912),\n deferHiddenOffscreenComponent(\n current,\n workInProgress,\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n renderLanes,\n nextProps\n )\n );\n } else\n null !== prevState\n ? (pushTransition(workInProgress, prevState.cachePool),\n pushHiddenContext(workInProgress, prevState),\n reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.memoizedState = null))\n : (null !== current && pushTransition(workInProgress, null),\n reuseHiddenContextOnStack(),\n reuseSuspenseHandlerOnStack(workInProgress));\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n (null !== current && 22 === current.tag) ||\n null !== workInProgress.stateNode ||\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextBaseLanes,\n renderLanes,\n remainingChildLanes\n) {\n var JSCompiler_inline_result = peekCacheFromPool();\n JSCompiler_inline_result =\n null === JSCompiler_inline_result\n ? null\n : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n workInProgress.memoizedState = {\n baseLanes: nextBaseLanes,\n cachePool: JSCompiler_inline_result\n };\n null !== current && pushTransition(workInProgress, null);\n reuseHiddenContextOnStack();\n pushOffscreenSuspenseHandler(workInProgress);\n null !== current &&\n propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n workInProgress.childLanes = remainingChildLanes;\n return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n nextProps = mountWorkInProgressOffscreenFiber(\n { mode: nextProps.mode, children: nextProps.children },\n workInProgress.mode\n );\n nextProps.ref = workInProgress.ref;\n workInProgress.child = nextProps;\n nextProps.return = workInProgress;\n return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n current.flags |= 2;\n popSuspenseHandler(workInProgress);\n workInProgress.memoizedState = null;\n return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n didSuspend = 0 !== (workInProgress.flags & 128);\n workInProgress.flags &= -129;\n if (null === current) {\n if (isHydrating) {\n if (\"hidden\" === nextProps.mode)\n return (\n (current = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.lanes = 536870912),\n bailoutOffscreenComponent(null, current)\n );\n pushDehydratedActivitySuspenseHandler(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" === current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n workInProgress.lanes = 536870912;\n return null;\n }\n return mountActivityChildren(workInProgress, nextProps);\n }\n var prevState = current.memoizedState;\n if (null !== prevState) {\n var dehydrated = prevState.dehydrated;\n pushDehydratedActivitySuspenseHandler(workInProgress);\n if (didSuspend)\n if (workInProgress.flags & 256)\n (workInProgress.flags &= -257),\n (workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ));\n else if (null !== workInProgress.memoizedState)\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null);\n else throw Error(formatProdErrorMessage(558));\n else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (didSuspend = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || didSuspend)\n ) {\n nextProps = workInProgressRoot;\n if (\n null !== nextProps &&\n ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n 0 !== dehydrated && dehydrated !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = dehydrated),\n enqueueConcurrentRenderForLane(current, dehydrated),\n scheduleUpdateOnFiber(nextProps, current, dehydrated),\n SelectiveHydrationException)\n );\n renderDidSuspendDelayIfPossible();\n workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n (current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.flags |= 4096);\n return workInProgress;\n }\n current = createWorkInProgress(current.child, {\n mode: nextProps.mode,\n children: nextProps.children\n });\n current.ref = workInProgress.ref;\n workInProgress.child = current;\n current.return = workInProgress;\n return current;\n}\nfunction markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (null === ref)\n null !== current &&\n null !== current.ref &&\n (workInProgress.flags |= 4194816);\n else {\n if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n throw Error(formatProdErrorMessage(284));\n if (null === current || current.ref !== ref)\n workInProgress.flags |= 4194816;\n }\n}\nfunction updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n void 0,\n renderLanes\n );\n nextProps = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n}\nfunction replayFunctionComponent(\n current,\n workInProgress,\n nextProps,\n Component,\n secondArg,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n workInProgress.updateQueue = null;\n nextProps = renderWithHooksAgain(\n workInProgress,\n Component,\n nextProps,\n secondArg\n );\n finishRenderingHooks(current);\n Component = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && Component && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n if (null === workInProgress.stateNode) {\n var context = emptyContextObject,\n contextType = Component.contextType;\n \"object\" === typeof contextType &&\n null !== contextType &&\n (context = readContext(contextType));\n context = new Component(nextProps, context);\n workInProgress.memoizedState =\n null !== context.state && void 0 !== context.state ? context.state : null;\n context.updater = classComponentUpdater;\n workInProgress.stateNode = context;\n context._reactInternals = workInProgress;\n context = workInProgress.stateNode;\n context.props = nextProps;\n context.state = workInProgress.memoizedState;\n context.refs = {};\n initializeUpdateQueue(workInProgress);\n contextType = Component.contextType;\n context.context =\n \"object\" === typeof contextType && null !== contextType\n ? readContext(contextType)\n : emptyContextObject;\n context.state = workInProgress.memoizedState;\n contextType = Component.getDerivedStateFromProps;\n \"function\" === typeof contextType &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n contextType,\n nextProps\n ),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n ((contextType = context.state),\n \"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount(),\n contextType !== context.state &&\n classComponentUpdater.enqueueReplaceState(context, context.state, null),\n processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction(),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308);\n nextProps = !0;\n } else if (null === current) {\n context = workInProgress.stateNode;\n var unresolvedOldProps = workInProgress.memoizedProps,\n oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n context.props = oldProps;\n var oldContext = context.context,\n contextType$jscomp$0 = Component.contextType;\n contextType = emptyContextObject;\n \"object\" === typeof contextType$jscomp$0 &&\n null !== contextType$jscomp$0 &&\n (contextType = readContext(contextType$jscomp$0));\n var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n contextType$jscomp$0 =\n \"function\" === typeof getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate;\n unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((unresolvedOldProps || oldContext !== contextType) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n contextType\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n oldContext = workInProgress.memoizedState;\n unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n ? (\"function\" === typeof getDerivedStateFromProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n getDerivedStateFromProps,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (oldProps =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n oldProps,\n nextProps,\n oldState,\n oldContext,\n contextType\n ))\n ? (contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n (\"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount()),\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (context.props = nextProps),\n (context.state = oldContext),\n (context.context = contextType),\n (nextProps = oldProps))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (nextProps = !1));\n } else {\n context = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n contextType = workInProgress.memoizedProps;\n contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n context.props = contextType$jscomp$0;\n getDerivedStateFromProps = workInProgress.pendingProps;\n oldState = context.context;\n oldContext = Component.contextType;\n oldProps = emptyContextObject;\n \"object\" === typeof oldContext &&\n null !== oldContext &&\n (oldProps = readContext(oldContext));\n unresolvedOldProps = Component.getDerivedStateFromProps;\n (oldContext =\n \"function\" === typeof unresolvedOldProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n oldProps\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n var newState = workInProgress.memoizedState;\n contextType !== getDerivedStateFromProps ||\n oldState !== newState ||\n hasForceUpdate ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies))\n ? (\"function\" === typeof unresolvedOldProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n unresolvedOldProps,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (contextType$jscomp$0 =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n contextType$jscomp$0,\n nextProps,\n oldState,\n newState,\n oldProps\n ) ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies)))\n ? (oldContext ||\n (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof context.componentWillUpdate) ||\n (\"function\" === typeof context.componentWillUpdate &&\n context.componentWillUpdate(nextProps, newState, oldProps),\n \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n context.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n oldProps\n )),\n \"function\" === typeof context.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof context.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 1024))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (context.props = nextProps),\n (context.state = newState),\n (context.context = oldProps),\n (nextProps = contextType$jscomp$0))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (nextProps = !1));\n }\n context = nextProps;\n markRef(current, workInProgress);\n nextProps = 0 !== (workInProgress.flags & 128);\n context || nextProps\n ? ((context = workInProgress.stateNode),\n (Component =\n nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n ? null\n : context.render()),\n (workInProgress.flags |= 1),\n null !== current && nextProps\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n Component,\n renderLanes\n )))\n : reconcileChildren(current, workInProgress, Component, renderLanes),\n (workInProgress.memoizedState = context.state),\n (current = workInProgress.child))\n : (current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ));\n return current;\n}\nfunction mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n) {\n resetHydrationState();\n workInProgress.flags |= 256;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0,\n hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n current,\n primaryTreeDidDefer,\n renderLanes\n) {\n current = null !== current ? current.childLanes & ~renderLanes : 0;\n primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n showFallback = !1,\n didSuspend = 0 !== (workInProgress.flags & 128),\n JSCompiler_temp;\n (JSCompiler_temp = didSuspend) ||\n (JSCompiler_temp =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseStackCursor.current & 2));\n JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n workInProgress.flags &= -33;\n if (null === current) {\n if (isHydrating) {\n showFallback\n ? pushPrimaryTreeSuspenseHandler(workInProgress)\n : reuseSuspenseHandlerOnStack(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" !== current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n isSuspenseInstanceFallback(current)\n ? (workInProgress.lanes = 32)\n : (workInProgress.lanes = 536870912);\n return null;\n }\n var nextPrimaryChildren = nextProps.children;\n nextProps = nextProps.fallback;\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (showFallback = workInProgress.mode),\n (nextPrimaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"hidden\", children: nextPrimaryChildren },\n showFallback\n )),\n (nextProps = createFiberFromFragment(\n nextProps,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextPrimaryChildren.sibling = nextProps),\n (workInProgress.child = nextPrimaryChildren),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(null, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);\n }\n var prevState = current.memoizedState;\n if (\n null !== prevState &&\n ((nextPrimaryChildren = prevState.dehydrated), null !== nextPrimaryChildren)\n ) {\n if (didSuspend)\n workInProgress.flags & 256\n ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags &= -257),\n (workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n )))\n : null !== workInProgress.memoizedState\n ? (reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null))\n : (reuseSuspenseHandlerOnStack(workInProgress),\n (nextPrimaryChildren = nextProps.fallback),\n (showFallback = workInProgress.mode),\n (nextProps = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: nextProps.children },\n showFallback\n )),\n (nextPrimaryChildren = createFiberFromFragment(\n nextPrimaryChildren,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.flags |= 2),\n (nextProps.return = workInProgress),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.sibling = nextPrimaryChildren),\n (workInProgress.child = nextProps),\n reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n ),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState =\n mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n (workInProgress = bailoutOffscreenComponent(null, nextProps)));\n else if (\n (pushPrimaryTreeSuspenseHandler(workInProgress),\n isSuspenseInstanceFallback(nextPrimaryChildren))\n ) {\n JSCompiler_temp =\n nextPrimaryChildren.nextSibling &&\n nextPrimaryChildren.nextSibling.dataset;\n if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n JSCompiler_temp = digest;\n nextProps = Error(formatProdErrorMessage(419));\n nextProps.stack = \"\";\n nextProps.digest = JSCompiler_temp;\n queueHydrationError({ value: nextProps, source: null, stack: null });\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || JSCompiler_temp)\n ) {\n JSCompiler_temp = workInProgressRoot;\n if (\n null !== JSCompiler_temp &&\n ((nextProps = getBumpedLaneForHydration(JSCompiler_temp, renderLanes)),\n 0 !== nextProps && nextProps !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = nextProps),\n enqueueConcurrentRenderForLane(current, nextProps),\n scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n SelectiveHydrationException)\n );\n isSuspenseInstancePending(nextPrimaryChildren) ||\n renderDidSuspendDelayIfPossible();\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n isSuspenseInstancePending(nextPrimaryChildren)\n ? ((workInProgress.flags |= 192),\n (workInProgress.child = current.child),\n (workInProgress = null))\n : ((current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(\n nextPrimaryChildren.nextSibling\n )),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountSuspensePrimaryChildren(\n workInProgress,\n nextProps.children\n )),\n (workInProgress.flags |= 4096));\n return workInProgress;\n }\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (nextPrimaryChildren = nextProps.fallback),\n (showFallback = workInProgress.mode),\n (prevState = current.child),\n (digest = prevState.sibling),\n (nextProps = createWorkInProgress(prevState, {\n mode: \"hidden\",\n children: nextProps.children\n })),\n (nextProps.subtreeFlags = prevState.subtreeFlags & 65011712),\n null !== digest\n ? (nextPrimaryChildren = createWorkInProgress(\n digest,\n nextPrimaryChildren\n ))\n : ((nextPrimaryChildren = createFiberFromFragment(\n nextPrimaryChildren,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.flags |= 2)),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextProps.sibling = nextPrimaryChildren),\n (workInProgress.child = nextProps),\n bailoutOffscreenComponent(null, nextProps),\n (nextProps = workInProgress.child),\n (nextPrimaryChildren = current.child.memoizedState),\n null === nextPrimaryChildren\n ? (nextPrimaryChildren = mountSuspenseOffscreenState(renderLanes))\n : ((showFallback = nextPrimaryChildren.cachePool),\n null !== showFallback\n ? ((prevState = CacheContext._currentValue),\n (showFallback =\n showFallback.parent !== prevState\n ? { parent: prevState, pool: prevState }\n : showFallback))\n : (showFallback = getSuspendedCache()),\n (nextPrimaryChildren = {\n baseLanes: nextPrimaryChildren.baseLanes | renderLanes,\n cachePool: showFallback\n })),\n (nextProps.memoizedState = nextPrimaryChildren),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(current.child, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n renderLanes = current.child;\n current = renderLanes.sibling;\n renderLanes = createWorkInProgress(renderLanes, {\n mode: \"visible\",\n children: nextProps.children\n });\n renderLanes.return = workInProgress;\n renderLanes.sibling = null;\n null !== current &&\n ((JSCompiler_temp = workInProgress.deletions),\n null === JSCompiler_temp\n ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n : JSCompiler_temp.push(current));\n workInProgress.child = renderLanes;\n workInProgress.memoizedState = null;\n return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n primaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: primaryChildren },\n workInProgress.mode\n );\n primaryChildren.return = workInProgress;\n return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n offscreenProps.lanes = 0;\n return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountSuspensePrimaryChildren(\n workInProgress,\n workInProgress.pendingProps.children\n );\n current.flags |= 2;\n workInProgress.memoizedState = null;\n return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode,\n treeForkCount\n) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode,\n treeForkCount: treeForkCount\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode),\n (renderState.treeForkCount = treeForkCount));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail;\n nextProps = nextProps.children;\n var suspenseContext = suspenseStackCursor.current,\n shouldForceFallback = 0 !== (suspenseContext & 2);\n shouldForceFallback\n ? ((suspenseContext = (suspenseContext & 1) | 2),\n (workInProgress.flags |= 128))\n : (suspenseContext &= 1);\n push(suspenseStackCursor, suspenseContext);\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n nextProps = isHydrating ? treeForkCount : 0;\n if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (19 === current.tag)\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n switch (revealOrder) {\n case \"forwards\":\n renderLanes = workInProgress.child;\n for (revealOrder = null; null !== renderLanes; )\n (current = renderLanes.alternate),\n null !== current &&\n null === findFirstSuspended(current) &&\n (revealOrder = renderLanes),\n (renderLanes = renderLanes.sibling);\n renderLanes = revealOrder;\n null === renderLanes\n ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode,\n nextProps\n );\n break;\n case \"backwards\":\n case \"unstable_legacy-backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode,\n nextProps\n );\n break;\n case \"together\":\n initSuspenseListRenderState(\n workInProgress,\n !1,\n null,\n null,\n void 0,\n nextProps\n );\n break;\n default:\n workInProgress.memoizedState = null;\n }\n return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes))\n if (null !== current) {\n if (\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n 0 === (renderLanes & workInProgress.childLanes))\n )\n return null;\n } else return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(formatProdErrorMessage(153));\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling =\n createWorkInProgress(current, current.pendingProps)),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n if (0 !== (current.lanes & renderLanes)) return !0;\n current = current.dependencies;\n return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n) {\n switch (workInProgress.tag) {\n case 3:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n resetHydrationState();\n break;\n case 27:\n case 5:\n pushHostContext(workInProgress);\n break;\n case 4:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n case 10:\n pushProvider(\n workInProgress,\n workInProgress.type,\n workInProgress.memoizedProps.value\n );\n break;\n case 31:\n if (null !== workInProgress.memoizedState)\n return (\n (workInProgress.flags |= 128),\n pushDehydratedActivitySuspenseHandler(workInProgress),\n null\n );\n break;\n case 13:\n var state$102 = workInProgress.memoizedState;\n if (null !== state$102) {\n if (null !== state$102.dehydrated)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags |= 128),\n null\n );\n if (0 !== (renderLanes & workInProgress.child.childLanes))\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n pushPrimaryTreeSuspenseHandler(workInProgress);\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== current ? current.sibling : null;\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n break;\n case 19:\n var didSuspendBefore = 0 !== (current.flags & 128);\n state$102 = 0 !== (renderLanes & workInProgress.childLanes);\n state$102 ||\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (state$102 = 0 !== (renderLanes & workInProgress.childLanes)));\n if (didSuspendBefore) {\n if (state$102)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n didSuspendBefore = workInProgress.memoizedState;\n null !== didSuspendBefore &&\n ((didSuspendBefore.rendering = null),\n (didSuspendBefore.tail = null),\n (didSuspendBefore.lastEffect = null));\n push(suspenseStackCursor, suspenseStackCursor.current);\n if (state$102) break;\n else return null;\n case 22:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n )\n );\n case 24:\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n }\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n if (null !== current)\n if (current.memoizedProps !== workInProgress.pendingProps)\n didReceiveUpdate = !0;\n else {\n if (\n !checkScheduledUpdateOrContext(current, renderLanes) &&\n 0 === (workInProgress.flags & 128)\n )\n return (\n (didReceiveUpdate = !1),\n attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n )\n );\n didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n }\n else\n (didReceiveUpdate = !1),\n isHydrating &&\n 0 !== (workInProgress.flags & 1048576) &&\n pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 16:\n a: {\n var props = workInProgress.pendingProps;\n current = resolveLazy(workInProgress.elementType);\n workInProgress.type = current;\n if (\"function\" === typeof current)\n shouldConstruct(current)\n ? ((props = resolveClassComponentProps(current, props)),\n (workInProgress.tag = 1),\n (workInProgress = updateClassComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )))\n : ((workInProgress.tag = 0),\n (workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )));\n else {\n if (void 0 !== current && null !== current) {\n var $$typeof = current.$$typeof;\n if ($$typeof === REACT_FORWARD_REF_TYPE) {\n workInProgress.tag = 11;\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n } else if ($$typeof === REACT_MEMO_TYPE) {\n workInProgress.tag = 14;\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n }\n }\n workInProgress = getComponentNameFromType(current) || current;\n throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n }\n }\n return workInProgress;\n case 0:\n return updateFunctionComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 1:\n return (\n (props = workInProgress.type),\n ($$typeof = resolveClassComponentProps(\n props,\n workInProgress.pendingProps\n )),\n updateClassComponent(\n current,\n workInProgress,\n props,\n $$typeof,\n renderLanes\n )\n );\n case 3:\n a: {\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n if (null === current) throw Error(formatProdErrorMessage(387));\n props = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n $$typeof = prevState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, props, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n props = nextState.cache;\n pushProvider(workInProgress, CacheContext, props);\n props !== prevState.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n );\n suspendIfUpdateReadFromEntangledAsyncAction();\n props = nextState.element;\n if (prevState.isDehydrated)\n if (\n ((prevState = {\n element: props,\n isDehydrated: !1,\n cache: nextState.cache\n }),\n (workInProgress.updateQueue.baseState = prevState),\n (workInProgress.memoizedState = prevState),\n workInProgress.flags & 256)\n ) {\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else if (props !== $$typeof) {\n $$typeof = createCapturedValueAtFiber(\n Error(formatProdErrorMessage(424)),\n workInProgress\n );\n queueHydrationError($$typeof);\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else {\n current = workInProgress.stateNode.containerInfo;\n switch (current.nodeType) {\n case 9:\n current = current.body;\n break;\n default:\n current =\n \"HTML\" === current.nodeName\n ? current.ownerDocument.body\n : current;\n }\n nextHydratableInstance = getNextHydratable(current.firstChild);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n rootOrSingletonContext = !0;\n renderLanes = mountChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n );\n for (workInProgress.child = renderLanes; renderLanes; )\n (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n (renderLanes = renderLanes.sibling);\n }\n else {\n resetHydrationState();\n if (props === $$typeof) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n reconcileChildren(current, workInProgress, props, renderLanes);\n }\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 26:\n return (\n markRef(current, workInProgress),\n null === current\n ? (renderLanes = getResource(\n workInProgress.type,\n null,\n workInProgress.pendingProps,\n null\n ))\n ? (workInProgress.memoizedState = renderLanes)\n : isHydrating ||\n ((renderLanes = workInProgress.type),\n (current = workInProgress.pendingProps),\n (props = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n ).createElement(renderLanes)),\n (props[internalInstanceKey] = workInProgress),\n (props[internalPropsKey] = current),\n setInitialProperties(props, renderLanes, current),\n markNodeAsHoistable(props),\n (workInProgress.stateNode = props))\n : (workInProgress.memoizedState = getResource(\n workInProgress.type,\n current.memoizedProps,\n workInProgress.pendingProps,\n current.memoizedState\n )),\n null\n );\n case 27:\n return (\n pushHostContext(workInProgress),\n null === current &&\n isHydrating &&\n ((props = workInProgress.stateNode =\n resolveSingletonInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n rootInstanceStackCursor.current\n )),\n (hydrationParentFiber = workInProgress),\n (rootOrSingletonContext = !0),\n ($$typeof = nextHydratableInstance),\n isSingletonScope(workInProgress.type)\n ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n (nextHydratableInstance = getNextHydratable(props.firstChild)))\n : (nextHydratableInstance = $$typeof)),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n markRef(current, workInProgress),\n null === current && (workInProgress.flags |= 4194304),\n workInProgress.child\n );\n case 5:\n if (null === current && isHydrating) {\n if (($$typeof = props = nextHydratableInstance))\n (props = canHydrateInstance(\n props,\n workInProgress.type,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== props\n ? ((workInProgress.stateNode = props),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = getNextHydratable(props.firstChild)),\n (rootOrSingletonContext = !1),\n ($$typeof = !0))\n : ($$typeof = !1);\n $$typeof || throwOnHydrationMismatch(workInProgress);\n }\n pushHostContext(workInProgress);\n $$typeof = workInProgress.type;\n prevState = workInProgress.pendingProps;\n nextState = null !== current ? current.memoizedProps : null;\n props = prevState.children;\n shouldSetTextContent($$typeof, prevState)\n ? (props = null)\n : null !== nextState &&\n shouldSetTextContent($$typeof, nextState) &&\n (workInProgress.flags |= 32);\n null !== workInProgress.memoizedState &&\n (($$typeof = renderWithHooks(\n current,\n workInProgress,\n TransitionAwareHostComponent,\n null,\n null,\n renderLanes\n )),\n (HostTransitionContext._currentValue = $$typeof));\n markRef(current, workInProgress);\n reconcileChildren(current, workInProgress, props, renderLanes);\n return workInProgress.child;\n case 6:\n if (null === current && isHydrating) {\n if ((current = renderLanes = nextHydratableInstance))\n (renderLanes = canHydrateTextInstance(\n renderLanes,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== renderLanes\n ? ((workInProgress.stateNode = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (current = !0))\n : (current = !1);\n current || throwOnHydrationMismatch(workInProgress);\n }\n return null;\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (props = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n ))\n : reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 11:\n return updateForwardRef(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 7:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps,\n renderLanes\n ),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n return (\n (props = workInProgress.pendingProps),\n pushProvider(workInProgress, workInProgress.type, props.value),\n reconcileChildren(current, workInProgress, props.children, renderLanes),\n workInProgress.child\n );\n case 9:\n return (\n ($$typeof = workInProgress.type._context),\n (props = workInProgress.pendingProps.children),\n prepareToReadContext(workInProgress),\n ($$typeof = readContext($$typeof)),\n (props = props($$typeof)),\n (workInProgress.flags |= 1),\n reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 14:\n return updateMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 19:\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n case 31:\n return updateActivityComponent(current, workInProgress, renderLanes);\n case 22:\n return updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n );\n case 24:\n return (\n prepareToReadContext(workInProgress),\n (props = readContext(CacheContext)),\n null === current\n ? (($$typeof = peekCacheFromPool()),\n null === $$typeof &&\n (($$typeof = workInProgressRoot),\n (prevState = createCache()),\n ($$typeof.pooledCache = prevState),\n prevState.refCount++,\n null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n ($$typeof = prevState)),\n (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n initializeUpdateQueue(workInProgress),\n pushProvider(workInProgress, CacheContext, $$typeof))\n : (0 !== (current.lanes & renderLanes) &&\n (cloneUpdateQueue(current, workInProgress),\n processUpdateQueue(workInProgress, null, null, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction()),\n ($$typeof = current.memoizedState),\n (prevState = workInProgress.memoizedState),\n $$typeof.parent !== props\n ? (($$typeof = { parent: props, cache: props }),\n (workInProgress.memoizedState = $$typeof),\n 0 === workInProgress.lanes &&\n (workInProgress.memoizedState =\n workInProgress.updateQueue.baseState =\n $$typeof),\n pushProvider(workInProgress, CacheContext, props))\n : ((props = prevState.cache),\n pushProvider(workInProgress, CacheContext, props),\n props !== $$typeof.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n ))),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 29:\n throw workInProgress.pendingProps;\n }\n throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n oldProps,\n newProps,\n renderLanes\n) {\n if ((type = 0 !== (workInProgress.mode & 32))) type = !1;\n if (type) {\n if (\n ((workInProgress.flags |= 16777216),\n (renderLanes & 335544128) === renderLanes)\n )\n if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n workInProgress.flags &= -16777217;\n else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n null !== retryQueue && (workInProgress.flags |= 4);\n workInProgress.flags & 16384 &&\n ((retryQueue =\n 22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n (workInProgress.lanes |= retryQueue),\n (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (!isHydrating)\n switch (renderState.tailMode) {\n case \"hidden\":\n hasRenderedATailFallback = renderState.tail;\n for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (lastTailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === lastTailNode\n ? (renderState.tail = null)\n : (lastTailNode.sibling = null);\n break;\n case \"collapsed\":\n lastTailNode = renderState.tail;\n for (var lastTailNode$106 = null; null !== lastTailNode; )\n null !== lastTailNode.alternate && (lastTailNode$106 = lastTailNode),\n (lastTailNode = lastTailNode.sibling);\n null === lastTailNode$106\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (lastTailNode$106.sibling = null);\n }\n}\nfunction bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n for (var child$107 = completedWork.child; null !== child$107; )\n (newChildLanes |= child$107.lanes | child$107.childLanes),\n (subtreeFlags |= child$107.subtreeFlags & 65011712),\n (subtreeFlags |= child$107.flags & 65011712),\n (child$107.return = completedWork),\n (child$107 = child$107.sibling);\n else\n for (child$107 = completedWork.child; null !== child$107; )\n (newChildLanes |= child$107.lanes | child$107.childLanes),\n (subtreeFlags |= child$107.subtreeFlags),\n (subtreeFlags |= child$107.flags),\n (child$107.return = completedWork),\n (child$107 = child$107.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return bubbleProperties(workInProgress), null;\n case 3:\n renderLanes = workInProgress.stateNode;\n newProps = null;\n null !== current && (newProps = current.memoizedState.cache);\n workInProgress.memoizedState.cache !== newProps &&\n (workInProgress.flags |= 2048);\n popProvider(CacheContext);\n popHostContainer();\n renderLanes.pendingContext &&\n ((renderLanes.context = renderLanes.pendingContext),\n (renderLanes.pendingContext = null));\n if (null === current || null === current.child)\n popHydrationState(workInProgress)\n ? markUpdate(workInProgress)\n : null === current ||\n (current.memoizedState.isDehydrated &&\n 0 === (workInProgress.flags & 256)) ||\n ((workInProgress.flags |= 1024),\n upgradeHydrationErrorsToRecoverable());\n bubbleProperties(workInProgress);\n return null;\n case 26:\n var type = workInProgress.type,\n nextResource = workInProgress.memoizedState;\n null === current\n ? (markUpdate(workInProgress),\n null !== nextResource\n ? (bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n null,\n newProps,\n renderLanes\n )))\n : nextResource\n ? nextResource !== current.memoizedState\n ? (markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217))\n : ((current = current.memoizedProps),\n current !== newProps && markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n current,\n newProps,\n renderLanes\n ));\n return null;\n case 27:\n popHostContext(workInProgress);\n renderLanes = rootInstanceStackCursor.current;\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n return null;\n }\n current = contextStackCursor.current;\n popHydrationState(workInProgress)\n ? prepareToHydrateHostInstance(workInProgress, current)\n : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n (workInProgress.stateNode = current),\n markUpdate(workInProgress));\n }\n bubbleProperties(workInProgress);\n return null;\n case 5:\n popHostContext(workInProgress);\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n return null;\n }\n nextResource = contextStackCursor.current;\n if (popHydrationState(workInProgress))\n prepareToHydrateHostInstance(workInProgress, nextResource);\n else {\n var ownerDocument = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n );\n switch (nextResource) {\n case 1:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case 2:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n default:\n switch (type) {\n case \"svg\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case \"math\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n case \"script\":\n nextResource = ownerDocument.createElement(\"div\");\n nextResource.innerHTML = \" - - - - -
- - diff --git a/internal/web/dist/index.html.br b/internal/web/dist/index.html.br deleted file mode 100644 index 5565d42..0000000 Binary files a/internal/web/dist/index.html.br and /dev/null differ diff --git a/internal/web/dist/index.html.gz b/internal/web/dist/index.html.gz deleted file mode 100644 index 34f67fc..0000000 Binary files a/internal/web/dist/index.html.gz and /dev/null differ diff --git a/internal/web/dist/vite.svg b/internal/web/dist/vite.svg deleted file mode 100644 index 3f42576..0000000 --- a/internal/web/dist/vite.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/ui/package.json b/ui/package.json index c6c773e..7f959ca 100644 --- a/ui/package.json +++ b/ui/package.json @@ -56,7 +56,7 @@ "react-router-dom": "^7.9.5", "recharts": "2.15.4", "sonner": "^2.0.7", - "tailwind-merge": "^3.3.1", + "tailwind-merge": "^3.4.0", "tailwindcss": "^4.1.17", "vaul": "^1.1.2", "zod": "^4.1.12" @@ -69,8 +69,6 @@ "@types/react-dom": "^19.2.2", "@vitejs/plugin-react": "5.1.0", "eslint": "9.39.1", - "eslint-config-prettier": "10.1.8", - "eslint-plugin-prettier": "5.5.4", "eslint-plugin-react-hooks": "7.0.1", "eslint-plugin-react-refresh": "0.4.24", "globals": "16.5.0", diff --git a/ui/src/api/archer_admin.ts b/ui/src/api/archer_admin.ts index 6320b08..5162ff7 100644 --- a/ui/src/api/archer_admin.ts +++ b/ui/src/api/archer_admin.ts @@ -18,7 +18,12 @@ export const archerAdminApi = { return await archerAdmin.adminListArcherJobs(params) }) }, - enqueue: (body: { queue: string; type: string; payload?: unknown; run_at?: string }) => { + enqueue: (body: { + queue: string + type: string + payload?: object | undefined + run_at?: string + }) => { return withRefresh(async () => { return await archerAdmin.adminEnqueueArcherJob({ body }) }) diff --git a/ui/src/pages/jobs/jobs-page.tsx b/ui/src/pages/jobs/jobs-page.tsx index 01d89f3..f41b9fc 100644 --- a/ui/src/pages/jobs/jobs-page.tsx +++ b/ui/src/pages/jobs/jobs-page.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState, type FC } from "react" +import { type FC, useEffect, useState } from "react" import { archerAdminApi } from "@/api/archer_admin" import type { AdminListArcherJobsRequest } from "@/sdk" import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query" @@ -19,21 +19,8 @@ import { } from "@/components/ui/dialog" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select" -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from "@/components/ui/table" +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table" import { Textarea } from "@/components/ui/textarea" // Types (align with generated client camelCase) @@ -145,8 +132,12 @@ export const JobsPage: FC = () => { // Mutations const enqueueM = useMutation({ - mutationFn: (body: { queue: string; type: string; payload?: unknown; run_at?: string }) => - archerAdminApi.enqueue(body), + mutationFn: (body: { + queue: string + type: string + payload?: object | undefined + run_at?: string + }) => archerAdminApi.enqueue(body), onSuccess: () => qc.invalidateQueries({ queryKey: ["archer", "jobs"] }), }) const retryM = useMutation({ @@ -462,7 +453,7 @@ function EnqueueDialog({ onSubmit: (body: { queue: string type: string - payload?: unknown + payload?: object | undefined run_at?: string }) => Promise submitting?: boolean diff --git a/ui/src/sdk/.gitignore b/ui/src/sdk/.gitignore deleted file mode 100644 index 149b576..0000000 --- a/ui/src/sdk/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -wwwroot/*.js -node_modules -typings -dist diff --git a/ui/src/sdk/.npmignore b/ui/src/sdk/.npmignore deleted file mode 100644 index 42061c0..0000000 --- a/ui/src/sdk/.npmignore +++ /dev/null @@ -1 +0,0 @@ -README.md \ No newline at end of file diff --git a/ui/src/sdk/.openapi-generator-ignore b/ui/src/sdk/.openapi-generator-ignore deleted file mode 100644 index 7484ee5..0000000 --- a/ui/src/sdk/.openapi-generator-ignore +++ /dev/null @@ -1,23 +0,0 @@ -# OpenAPI Generator Ignore -# Generated by openapi-generator https://github.com/openapitools/openapi-generator - -# Use this file to prevent files from being overwritten by the generator. -# The patterns follow closely to .gitignore or .dockerignore. - -# As an example, the C# client generator defines ApiClient.cs. -# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: -#ApiClient.cs - -# You can match any string of characters against a directory, file or extension with a single asterisk (*): -#foo/*/qux -# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux - -# You can recursively match patterns against a directory, file or extension with a double asterisk (**): -#foo/**/qux -# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux - -# You can also negate patterns with an exclamation (!). -# For example, you can ignore all files in a docs folder with the file extension .md: -#docs/*.md -# Then explicitly reverse the ignore rule for a single file: -#!docs/README.md diff --git a/ui/src/sdk/.openapi-generator/FILES b/ui/src/sdk/.openapi-generator/FILES deleted file mode 100644 index 8ea32ef..0000000 --- a/ui/src/sdk/.openapi-generator/FILES +++ /dev/null @@ -1,151 +0,0 @@ -.gitignore -.npmignore -.openapi-generator-ignore -README.md -docs/AnnotationsApi.md -docs/ArcherAdminApi.md -docs/AuthApi.md -docs/ClustersApi.md -docs/CredentialsApi.md -docs/DtoAnnotationResponse.md -docs/DtoAttachAnnotationsRequest.md -docs/DtoAttachLabelsRequest.md -docs/DtoAttachServersRequest.md -docs/DtoAttachTaintsRequest.md -docs/DtoAuthStartResponse.md -docs/DtoClusterResponse.md -docs/DtoCreateAnnotationRequest.md -docs/DtoCreateClusterRequest.md -docs/DtoCreateCredentialRequest.md -docs/DtoCreateLabelRequest.md -docs/DtoCreateNodePoolRequest.md -docs/DtoCreateSSHRequest.md -docs/DtoCreateServerRequest.md -docs/DtoCreateTaintRequest.md -docs/DtoCredentialOut.md -docs/DtoEnqueueRequest.md -docs/DtoJWK.md -docs/DtoJWKS.md -docs/DtoJob.md -docs/DtoJobStatus.md -docs/DtoLabelResponse.md -docs/DtoLogoutRequest.md -docs/DtoNodePoolResponse.md -docs/DtoPageJob.md -docs/DtoQueueInfo.md -docs/DtoRefreshRequest.md -docs/DtoServerResponse.md -docs/DtoSshResponse.md -docs/DtoSshRevealResponse.md -docs/DtoTaintResponse.md -docs/DtoTokenPair.md -docs/DtoUpdateAnnotationRequest.md -docs/DtoUpdateCredentialRequest.md -docs/DtoUpdateLabelRequest.md -docs/DtoUpdateNodePoolRequest.md -docs/DtoUpdateServerRequest.md -docs/DtoUpdateTaintRequest.md -docs/HandlersCreateUserKeyRequest.md -docs/HandlersHealthStatus.md -docs/HandlersMeResponse.md -docs/HandlersMemberOut.md -docs/HandlersMemberUpsertReq.md -docs/HandlersOrgCreateReq.md -docs/HandlersOrgKeyCreateReq.md -docs/HandlersOrgKeyCreateResp.md -docs/HandlersOrgUpdateReq.md -docs/HandlersUpdateMeRequest.md -docs/HandlersUserAPIKeyOut.md -docs/HandlersVersionResponse.md -docs/HealthApi.md -docs/LabelsApi.md -docs/MeAPIKeysApi.md -docs/MeApi.md -docs/MetaApi.md -docs/ModelsAPIKey.md -docs/ModelsOrganization.md -docs/ModelsUser.md -docs/ModelsUserEmail.md -docs/NodePoolsApi.md -docs/OrgsApi.md -docs/ServersApi.md -docs/SshApi.md -docs/TaintsApi.md -docs/UtilsErrorResponse.md -package.json -src/apis/AnnotationsApi.ts -src/apis/ArcherAdminApi.ts -src/apis/AuthApi.ts -src/apis/ClustersApi.ts -src/apis/CredentialsApi.ts -src/apis/HealthApi.ts -src/apis/LabelsApi.ts -src/apis/MeAPIKeysApi.ts -src/apis/MeApi.ts -src/apis/MetaApi.ts -src/apis/NodePoolsApi.ts -src/apis/OrgsApi.ts -src/apis/ServersApi.ts -src/apis/SshApi.ts -src/apis/TaintsApi.ts -src/apis/index.ts -src/index.ts -src/models/DtoAnnotationResponse.ts -src/models/DtoAttachAnnotationsRequest.ts -src/models/DtoAttachLabelsRequest.ts -src/models/DtoAttachServersRequest.ts -src/models/DtoAttachTaintsRequest.ts -src/models/DtoAuthStartResponse.ts -src/models/DtoClusterResponse.ts -src/models/DtoCreateAnnotationRequest.ts -src/models/DtoCreateClusterRequest.ts -src/models/DtoCreateCredentialRequest.ts -src/models/DtoCreateLabelRequest.ts -src/models/DtoCreateNodePoolRequest.ts -src/models/DtoCreateSSHRequest.ts -src/models/DtoCreateServerRequest.ts -src/models/DtoCreateTaintRequest.ts -src/models/DtoCredentialOut.ts -src/models/DtoEnqueueRequest.ts -src/models/DtoJWK.ts -src/models/DtoJWKS.ts -src/models/DtoJob.ts -src/models/DtoJobStatus.ts -src/models/DtoLabelResponse.ts -src/models/DtoLogoutRequest.ts -src/models/DtoNodePoolResponse.ts -src/models/DtoPageJob.ts -src/models/DtoQueueInfo.ts -src/models/DtoRefreshRequest.ts -src/models/DtoServerResponse.ts -src/models/DtoSshResponse.ts -src/models/DtoSshRevealResponse.ts -src/models/DtoTaintResponse.ts -src/models/DtoTokenPair.ts -src/models/DtoUpdateAnnotationRequest.ts -src/models/DtoUpdateCredentialRequest.ts -src/models/DtoUpdateLabelRequest.ts -src/models/DtoUpdateNodePoolRequest.ts -src/models/DtoUpdateServerRequest.ts -src/models/DtoUpdateTaintRequest.ts -src/models/HandlersCreateUserKeyRequest.ts -src/models/HandlersHealthStatus.ts -src/models/HandlersMeResponse.ts -src/models/HandlersMemberOut.ts -src/models/HandlersMemberUpsertReq.ts -src/models/HandlersOrgCreateReq.ts -src/models/HandlersOrgKeyCreateReq.ts -src/models/HandlersOrgKeyCreateResp.ts -src/models/HandlersOrgUpdateReq.ts -src/models/HandlersUpdateMeRequest.ts -src/models/HandlersUserAPIKeyOut.ts -src/models/HandlersVersionResponse.ts -src/models/ModelsAPIKey.ts -src/models/ModelsOrganization.ts -src/models/ModelsUser.ts -src/models/ModelsUserEmail.ts -src/models/UtilsErrorResponse.ts -src/models/index.ts -src/runtime.ts -tsconfig.esm.json -tsconfig.json diff --git a/ui/src/sdk/.openapi-generator/VERSION b/ui/src/sdk/.openapi-generator/VERSION deleted file mode 100644 index 6328c54..0000000 --- a/ui/src/sdk/.openapi-generator/VERSION +++ /dev/null @@ -1 +0,0 @@ -7.17.0 diff --git a/ui/src/sdk/apis/AnnotationsApi.ts b/ui/src/sdk/apis/AnnotationsApi.ts deleted file mode 100644 index cda1046..0000000 --- a/ui/src/sdk/apis/AnnotationsApi.ts +++ /dev/null @@ -1,352 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { DtoAnnotationResponse, DtoCreateAnnotationRequest, DtoUpdateAnnotationRequest, } from "../models/index" -import { - DtoAnnotationResponseFromJSON, - DtoCreateAnnotationRequestToJSON, - DtoUpdateAnnotationRequestToJSON, -} from "../models/index" - -export interface CreateAnnotationRequest { - body: DtoCreateAnnotationRequest; - xOrgID?: string; -} - -export interface DeleteAnnotationRequest { - id: string; - xOrgID?: string; -} - -export interface GetAnnotationRequest { - id: string; - xOrgID?: string; -} - -export interface ListAnnotationsRequest { - xOrgID?: string; - key?: string; - value?: string; - q?: string; -} - -export interface UpdateAnnotationRequest { - id: string; - body: DtoUpdateAnnotationRequest; - xOrgID?: string; -} - -/** - * - */ -export class AnnotationsApi extends runtime.BaseAPI { - - /** - * Creates an annotation. - * Create annotation (org scoped) - */ - async createAnnotationRaw(requestParameters: CreateAnnotationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling createAnnotation().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/annotations`; - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoCreateAnnotationRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoAnnotationResponseFromJSON(jsonValue)); - } - - /** - * Creates an annotation. - * Create annotation (org scoped) - */ - async createAnnotation(requestParameters: CreateAnnotationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.createAnnotationRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Permanently deletes the annotation. - * Delete annotation (org scoped) - */ - async deleteAnnotationRaw(requestParameters: DeleteAnnotationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling deleteAnnotation().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/annotations/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Permanently deletes the annotation. - * Delete annotation (org scoped) - */ - async deleteAnnotation(requestParameters: DeleteAnnotationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.deleteAnnotationRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns one annotation. Add `include=node_pools` to include node pools. - * Get annotation by ID (org scoped) - */ - async getAnnotationRaw(requestParameters: GetAnnotationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling getAnnotation().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/annotations/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoAnnotationResponseFromJSON(jsonValue)); - } - - /** - * Returns one annotation. Add `include=node_pools` to include node pools. - * Get annotation by ID (org scoped) - */ - async getAnnotation(requestParameters: GetAnnotationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.getAnnotationRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns annotations for the organization in X-Org-ID. Filters: `key`, `value`, and `q` (key contains). Add `include=node_pools` to include linked node pools. - * List annotations (org scoped) - */ - async listAnnotationsRaw(requestParameters: ListAnnotationsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - const queryParameters: any = {}; - - if (requestParameters['key'] != null) { - queryParameters['key'] = requestParameters['key']; - } - - if (requestParameters['value'] != null) { - queryParameters['value'] = requestParameters['value']; - } - - if (requestParameters['q'] != null) { - queryParameters['q'] = requestParameters['q']; - } - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/annotations`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(DtoAnnotationResponseFromJSON)); - } - - /** - * Returns annotations for the organization in X-Org-ID. Filters: `key`, `value`, and `q` (key contains). Add `include=node_pools` to include linked node pools. - * List annotations (org scoped) - */ - async listAnnotations(requestParameters: ListAnnotationsRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listAnnotationsRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Partially update annotation fields. - * Update annotation (org scoped) - */ - async updateAnnotationRaw(requestParameters: UpdateAnnotationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling updateAnnotation().' - ); - } - - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling updateAnnotation().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/annotations/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'PATCH', - headers: headerParameters, - query: queryParameters, - body: DtoUpdateAnnotationRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoAnnotationResponseFromJSON(jsonValue)); - } - - /** - * Partially update annotation fields. - * Update annotation (org scoped) - */ - async updateAnnotation(requestParameters: UpdateAnnotationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.updateAnnotationRaw(requestParameters, initOverrides); - return await response.value(); - } - -} diff --git a/ui/src/sdk/apis/ArcherAdminApi.ts b/ui/src/sdk/apis/ArcherAdminApi.ts deleted file mode 100644 index 8b5f077..0000000 --- a/ui/src/sdk/apis/ArcherAdminApi.ts +++ /dev/null @@ -1,280 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { DtoEnqueueRequest, DtoJob, DtoPageJob, DtoQueueInfo, } from "../models/index" -import { DtoEnqueueRequestToJSON, DtoJobFromJSON, DtoPageJobFromJSON, DtoQueueInfoFromJSON, } from "../models/index" - -export interface AdminCancelArcherJobRequest { - id: string; -} - -export interface AdminEnqueueArcherJobRequest { - body: DtoEnqueueRequest; -} - -export interface AdminListArcherJobsRequest { - status?: AdminListArcherJobsStatusEnum; - queue?: string; - q?: string; - page?: number; - pageSize?: number; -} - -export interface AdminRetryArcherJobRequest { - id: string; -} - -/** - * - */ -export class ArcherAdminApi extends runtime.BaseAPI { - - /** - * Set job status to canceled if cancellable. For running jobs, this only affects future picks; wire to Archer if you need active kill. - * Cancel an Archer job (admin) - */ - async adminCancelArcherJobRaw(requestParameters: AdminCancelArcherJobRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling adminCancelArcherJob().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/admin/archer/jobs/{id}/cancel`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoJobFromJSON(jsonValue)); - } - - /** - * Set job status to canceled if cancellable. For running jobs, this only affects future picks; wire to Archer if you need active kill. - * Cancel an Archer job (admin) - */ - async adminCancelArcherJob(requestParameters: AdminCancelArcherJobRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.adminCancelArcherJobRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Create a job immediately or schedule it for the future via `run_at`. - * Enqueue a new Archer job (admin) - */ - async adminEnqueueArcherJobRaw(requestParameters: AdminEnqueueArcherJobRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling adminEnqueueArcherJob().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/admin/archer/jobs`; - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoEnqueueRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoJobFromJSON(jsonValue)); - } - - /** - * Create a job immediately or schedule it for the future via `run_at`. - * Enqueue a new Archer job (admin) - */ - async adminEnqueueArcherJob(requestParameters: AdminEnqueueArcherJobRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.adminEnqueueArcherJobRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Paginated background jobs with optional filters. Search `q` may match id, type, error, payload (implementation-dependent). - * List Archer jobs (admin) - */ - async adminListArcherJobsRaw(requestParameters: AdminListArcherJobsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const queryParameters: any = {}; - - if (requestParameters['status'] != null) { - queryParameters['status'] = requestParameters['status']; - } - - if (requestParameters['queue'] != null) { - queryParameters['queue'] = requestParameters['queue']; - } - - if (requestParameters['q'] != null) { - queryParameters['q'] = requestParameters['q']; - } - - if (requestParameters['page'] != null) { - queryParameters['page'] = requestParameters['page']; - } - - if (requestParameters['pageSize'] != null) { - queryParameters['page_size'] = requestParameters['pageSize']; - } - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/admin/archer/jobs`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoPageJobFromJSON(jsonValue)); - } - - /** - * Paginated background jobs with optional filters. Search `q` may match id, type, error, payload (implementation-dependent). - * List Archer jobs (admin) - */ - async adminListArcherJobs(requestParameters: AdminListArcherJobsRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.adminListArcherJobsRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Summary metrics per queue (pending, running, failed, scheduled). - * List Archer queues (admin) - */ - async adminListArcherQueuesRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/admin/archer/queues`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(DtoQueueInfoFromJSON)); - } - - /** - * Summary metrics per queue (pending, running, failed, scheduled). - * List Archer queues (admin) - */ - async adminListArcherQueues(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.adminListArcherQueuesRaw(initOverrides); - return await response.value(); - } - - /** - * Marks the job retriable (DB flip). Swap this for an Archer admin call if you expose one. - * Retry a failed/canceled Archer job (admin) - */ - async adminRetryArcherJobRaw(requestParameters: AdminRetryArcherJobRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling adminRetryArcherJob().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/admin/archer/jobs/{id}/retry`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoJobFromJSON(jsonValue)); - } - - /** - * Marks the job retriable (DB flip). Swap this for an Archer admin call if you expose one. - * Retry a failed/canceled Archer job (admin) - */ - async adminRetryArcherJob(requestParameters: AdminRetryArcherJobRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.adminRetryArcherJobRaw(requestParameters, initOverrides); - return await response.value(); - } - -} - -/** - * @export - */ -export const AdminListArcherJobsStatusEnum = { - queued: 'queued', - running: 'running', - succeeded: 'succeeded', - failed: 'failed', - canceled: 'canceled', - retrying: 'retrying', - scheduled: 'scheduled' -} as const; -export type AdminListArcherJobsStatusEnum = typeof AdminListArcherJobsStatusEnum[keyof typeof AdminListArcherJobsStatusEnum]; diff --git a/ui/src/sdk/apis/AuthApi.ts b/ui/src/sdk/apis/AuthApi.ts deleted file mode 100644 index fb35c70..0000000 --- a/ui/src/sdk/apis/AuthApi.ts +++ /dev/null @@ -1,231 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { DtoAuthStartResponse, DtoJWKS, DtoLogoutRequest, DtoRefreshRequest, DtoTokenPair, } from "../models/index" -import { - DtoAuthStartResponseFromJSON, - DtoJWKSFromJSON, - DtoLogoutRequestToJSON, - DtoRefreshRequestToJSON, - DtoTokenPairFromJSON, -} from "../models/index" - -export interface AuthCallbackRequest { - provider: string; -} - -export interface AuthStartRequest { - provider: string; -} - -export interface LogoutRequest { - body: DtoLogoutRequest; -} - -export interface RefreshRequest { - body: DtoRefreshRequest; -} - -/** - * - */ -export class AuthApi extends runtime.BaseAPI { - - /** - * Handle social login callback - */ - async authCallbackRaw(requestParameters: AuthCallbackRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['provider'] == null) { - throw new runtime.RequiredError( - 'provider', - 'Required parameter "provider" was null or undefined when calling authCallback().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - - let urlPath = `/auth/{provider}/callback`; - urlPath = urlPath.replace(`{${"provider"}}`, encodeURIComponent(String(requestParameters['provider']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoTokenPairFromJSON(jsonValue)); - } - - /** - * Handle social login callback - */ - async authCallback(requestParameters: AuthCallbackRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.authCallbackRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns provider authorization URL for the frontend to redirect - * Begin social login - */ - async authStartRaw(requestParameters: AuthStartRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['provider'] == null) { - throw new runtime.RequiredError( - 'provider', - 'Required parameter "provider" was null or undefined when calling authStart().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - - let urlPath = `/auth/{provider}/start`; - urlPath = urlPath.replace(`{${"provider"}}`, encodeURIComponent(String(requestParameters['provider']))); - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoAuthStartResponseFromJSON(jsonValue)); - } - - /** - * Returns provider authorization URL for the frontend to redirect - * Begin social login - */ - async authStart(requestParameters: AuthStartRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.authStartRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns the JSON Web Key Set for token verification - * Get JWKS - */ - async getJWKSRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - - let urlPath = `/.well-known/jwks.json`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoJWKSFromJSON(jsonValue)); - } - - /** - * Returns the JSON Web Key Set for token verification - * Get JWKS - */ - async getJWKS(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.getJWKSRaw(initOverrides); - return await response.value(); - } - - /** - * Revoke refresh token family (logout everywhere) - */ - async logoutRaw(requestParameters: LogoutRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling logout().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - - let urlPath = `/auth/logout`; - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoLogoutRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.VoidApiResponse(response); - } - - /** - * Revoke refresh token family (logout everywhere) - */ - async logout(requestParameters: LogoutRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - await this.logoutRaw(requestParameters, initOverrides); - } - - /** - * Rotate refresh token - */ - async refreshRaw(requestParameters: RefreshRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling refresh().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - - let urlPath = `/auth/refresh`; - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoRefreshRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoTokenPairFromJSON(jsonValue)); - } - - /** - * Rotate refresh token - */ - async refresh(requestParameters: RefreshRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.refreshRaw(requestParameters, initOverrides); - return await response.value(); - } - -} diff --git a/ui/src/sdk/apis/ClustersApi.ts b/ui/src/sdk/apis/ClustersApi.ts deleted file mode 100644 index aafbdec..0000000 --- a/ui/src/sdk/apis/ClustersApi.ts +++ /dev/null @@ -1,143 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { DtoClusterResponse, DtoCreateClusterRequest, } from "../models/index" -import { DtoClusterResponseFromJSON, DtoCreateClusterRequestToJSON, } from "../models/index" - -export interface CreateClusterRequest { - body: DtoCreateClusterRequest; - xOrgID?: string; -} - -export interface ListClustersRequest { - xOrgID?: string; - q?: string; -} - -/** - * - */ -export class ClustersApi extends runtime.BaseAPI { - - /** - * Creates a cluster. If `kubeconfig` is provided, it will be encrypted per-organization and stored securely (never returned). - * Create cluster (org scoped) - */ - async createClusterRaw(requestParameters: CreateClusterRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling createCluster().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/clusters`; - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoCreateClusterRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoClusterResponseFromJSON(jsonValue)); - } - - /** - * Creates a cluster. If `kubeconfig` is provided, it will be encrypted per-organization and stored securely (never returned). - * Create cluster (org scoped) - */ - async createCluster(requestParameters: CreateClusterRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.createClusterRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns clusters for the organization in X-Org-ID. Filter by `q` (name contains). - * List clusters (org scoped) - */ - async listClustersRaw(requestParameters: ListClustersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - const queryParameters: any = {}; - - if (requestParameters['q'] != null) { - queryParameters['q'] = requestParameters['q']; - } - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/clusters`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(DtoClusterResponseFromJSON)); - } - - /** - * Returns clusters for the organization in X-Org-ID. Filter by `q` (name contains). - * List clusters (org scoped) - */ - async listClusters(requestParameters: ListClustersRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listClustersRaw(requestParameters, initOverrides); - return await response.value(); - } - -} diff --git a/ui/src/sdk/apis/CredentialsApi.ts b/ui/src/sdk/apis/CredentialsApi.ts deleted file mode 100644 index 4561697..0000000 --- a/ui/src/sdk/apis/CredentialsApi.ts +++ /dev/null @@ -1,397 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { DtoCreateCredentialRequest, DtoCredentialOut, DtoUpdateCredentialRequest, } from "../models/index" -import { - DtoCreateCredentialRequestToJSON, - DtoCredentialOutFromJSON, - DtoUpdateCredentialRequestToJSON, -} from "../models/index" - -export interface CreateCredentialRequest { - body: DtoCreateCredentialRequest; - xOrgID?: string; -} - -export interface DeleteCredentialRequest { - id: string; - xOrgID?: string; -} - -export interface GetCredentialRequest { - id: string; - xOrgID?: string; -} - -export interface ListCredentialsRequest { - xOrgID?: string; - provider?: string; - kind?: string; - scopeKind?: string; -} - -export interface RevealCredentialRequest { - id: string; - xOrgID?: string; -} - -export interface UpdateCredentialRequest { - id: string; - body: DtoUpdateCredentialRequest; - xOrgID?: string; -} - -/** - * - */ -export class CredentialsApi extends runtime.BaseAPI { - - /** - * Create a credential (encrypts secret) - */ - async createCredentialRaw(requestParameters: CreateCredentialRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling createCredential().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/credentials`; - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoCreateCredentialRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoCredentialOutFromJSON(jsonValue)); - } - - /** - * Create a credential (encrypts secret) - */ - async createCredential(requestParameters: CreateCredentialRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.createCredentialRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Delete credential - */ - async deleteCredentialRaw(requestParameters: DeleteCredentialRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling deleteCredential().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/credentials/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.VoidApiResponse(response); - } - - /** - * Delete credential - */ - async deleteCredential(requestParameters: DeleteCredentialRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - await this.deleteCredentialRaw(requestParameters, initOverrides); - } - - /** - * Get credential by ID (metadata only) - */ - async getCredentialRaw(requestParameters: GetCredentialRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling getCredential().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/credentials/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoCredentialOutFromJSON(jsonValue)); - } - - /** - * Get credential by ID (metadata only) - */ - async getCredential(requestParameters: GetCredentialRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.getCredentialRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns credential metadata for the current org. Secrets are never returned. - * List credentials (metadata only) - */ - async listCredentialsRaw(requestParameters: ListCredentialsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - const queryParameters: any = {}; - - if (requestParameters['provider'] != null) { - queryParameters['provider'] = requestParameters['provider']; - } - - if (requestParameters['kind'] != null) { - queryParameters['kind'] = requestParameters['kind']; - } - - if (requestParameters['scopeKind'] != null) { - queryParameters['scope_kind'] = requestParameters['scopeKind']; - } - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/credentials`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(DtoCredentialOutFromJSON)); - } - - /** - * Returns credential metadata for the current org. Secrets are never returned. - * List credentials (metadata only) - */ - async listCredentials(requestParameters: ListCredentialsRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listCredentialsRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Reveal decrypted secret (one-time read) - */ - async revealCredentialRaw(requestParameters: RevealCredentialRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling revealCredential().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/credentials/{id}/reveal`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response); - } - - /** - * Reveal decrypted secret (one-time read) - */ - async revealCredential(requestParameters: RevealCredentialRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<{ [key: string]: any; }> { - const response = await this.revealCredentialRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Update credential metadata and/or rotate secret - */ - async updateCredentialRaw(requestParameters: UpdateCredentialRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling updateCredential().' - ); - } - - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling updateCredential().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/credentials/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'PATCH', - headers: headerParameters, - query: queryParameters, - body: DtoUpdateCredentialRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoCredentialOutFromJSON(jsonValue)); - } - - /** - * Update credential metadata and/or rotate secret - */ - async updateCredential(requestParameters: UpdateCredentialRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.updateCredentialRaw(requestParameters, initOverrides); - return await response.value(); - } - -} diff --git a/ui/src/sdk/apis/HealthApi.ts b/ui/src/sdk/apis/HealthApi.ts deleted file mode 100644 index f516a64..0000000 --- a/ui/src/sdk/apis/HealthApi.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { HandlersHealthStatus, } from "../models/index" -import { HandlersHealthStatusFromJSON, } from "../models/index" - -/** - * - */ -export class HealthApi extends runtime.BaseAPI { - - /** - * Returns 200 OK when the service is up - * Basic health check - */ - async healthCheckOperationIdRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - - let urlPath = `/healthz`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => HandlersHealthStatusFromJSON(jsonValue)); - } - - /** - * Returns 200 OK when the service is up - * Basic health check - */ - async healthCheckOperationId(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.healthCheckOperationIdRaw(initOverrides); - return await response.value(); - } - -} diff --git a/ui/src/sdk/apis/LabelsApi.ts b/ui/src/sdk/apis/LabelsApi.ts deleted file mode 100644 index efd4d85..0000000 --- a/ui/src/sdk/apis/LabelsApi.ts +++ /dev/null @@ -1,348 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { DtoCreateLabelRequest, DtoLabelResponse, DtoUpdateLabelRequest, } from "../models/index" -import { DtoCreateLabelRequestToJSON, DtoLabelResponseFromJSON, DtoUpdateLabelRequestToJSON, } from "../models/index" - -export interface CreateLabelRequest { - body: DtoCreateLabelRequest; - xOrgID?: string; -} - -export interface DeleteLabelRequest { - id: string; - xOrgID?: string; -} - -export interface GetLabelRequest { - id: string; - xOrgID?: string; -} - -export interface ListLabelsRequest { - xOrgID?: string; - key?: string; - value?: string; - q?: string; -} - -export interface UpdateLabelRequest { - id: string; - body: DtoUpdateLabelRequest; - xOrgID?: string; -} - -/** - * - */ -export class LabelsApi extends runtime.BaseAPI { - - /** - * Creates a label. - * Create label (org scoped) - */ - async createLabelRaw(requestParameters: CreateLabelRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling createLabel().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/labels`; - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoCreateLabelRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoLabelResponseFromJSON(jsonValue)); - } - - /** - * Creates a label. - * Create label (org scoped) - */ - async createLabel(requestParameters: CreateLabelRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.createLabelRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Permanently deletes the label. - * Delete label (org scoped) - */ - async deleteLabelRaw(requestParameters: DeleteLabelRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling deleteLabel().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/labels/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Permanently deletes the label. - * Delete label (org scoped) - */ - async deleteLabel(requestParameters: DeleteLabelRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.deleteLabelRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns one label. - * Get label by ID (org scoped) - */ - async getLabelRaw(requestParameters: GetLabelRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling getLabel().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/labels/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoLabelResponseFromJSON(jsonValue)); - } - - /** - * Returns one label. - * Get label by ID (org scoped) - */ - async getLabel(requestParameters: GetLabelRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.getLabelRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns node labels for the organization in X-Org-ID. Filters: `key`, `value`, and `q` (key contains). Add `include=node_pools` to include linked node groups. - * List node labels (org scoped) - */ - async listLabelsRaw(requestParameters: ListLabelsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - const queryParameters: any = {}; - - if (requestParameters['key'] != null) { - queryParameters['key'] = requestParameters['key']; - } - - if (requestParameters['value'] != null) { - queryParameters['value'] = requestParameters['value']; - } - - if (requestParameters['q'] != null) { - queryParameters['q'] = requestParameters['q']; - } - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/labels`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(DtoLabelResponseFromJSON)); - } - - /** - * Returns node labels for the organization in X-Org-ID. Filters: `key`, `value`, and `q` (key contains). Add `include=node_pools` to include linked node groups. - * List node labels (org scoped) - */ - async listLabels(requestParameters: ListLabelsRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listLabelsRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Partially update label fields. - * Update label (org scoped) - */ - async updateLabelRaw(requestParameters: UpdateLabelRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling updateLabel().' - ); - } - - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling updateLabel().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/labels/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'PATCH', - headers: headerParameters, - query: queryParameters, - body: DtoUpdateLabelRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoLabelResponseFromJSON(jsonValue)); - } - - /** - * Partially update label fields. - * Update label (org scoped) - */ - async updateLabel(requestParameters: UpdateLabelRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.updateLabelRaw(requestParameters, initOverrides); - return await response.value(); - } - -} diff --git a/ui/src/sdk/apis/MeAPIKeysApi.ts b/ui/src/sdk/apis/MeAPIKeysApi.ts deleted file mode 100644 index 6168545..0000000 --- a/ui/src/sdk/apis/MeAPIKeysApi.ts +++ /dev/null @@ -1,159 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { HandlersCreateUserKeyRequest, HandlersUserAPIKeyOut, } from "../models/index" -import { HandlersCreateUserKeyRequestToJSON, HandlersUserAPIKeyOutFromJSON, } from "../models/index" - -export interface CreateUserAPIKeyRequest { - body: HandlersCreateUserKeyRequest; -} - -export interface DeleteUserAPIKeyRequest { - id: string; -} - -/** - * - */ -export class MeAPIKeysApi extends runtime.BaseAPI { - - /** - * Returns the plaintext key once. Store it securely on the client side. - * Create a new user API key - */ - async createUserAPIKeyRaw(requestParameters: CreateUserAPIKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling createUserAPIKey().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-API-KEY"] = await this.configuration.apiKey("X-API-KEY"); // ApiKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/me/api-keys`; - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: HandlersCreateUserKeyRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => HandlersUserAPIKeyOutFromJSON(jsonValue)); - } - - /** - * Returns the plaintext key once. Store it securely on the client side. - * Create a new user API key - */ - async createUserAPIKey(requestParameters: CreateUserAPIKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.createUserAPIKeyRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Delete a user API key - */ - async deleteUserAPIKeyRaw(requestParameters: DeleteUserAPIKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling deleteUserAPIKey().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/me/api-keys/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.VoidApiResponse(response); - } - - /** - * Delete a user API key - */ - async deleteUserAPIKey(requestParameters: DeleteUserAPIKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - await this.deleteUserAPIKeyRaw(requestParameters, initOverrides); - } - - /** - * List my API keys - */ - async listUserAPIKeysRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-API-KEY"] = await this.configuration.apiKey("X-API-KEY"); // ApiKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/me/api-keys`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(HandlersUserAPIKeyOutFromJSON)); - } - - /** - * List my API keys - */ - async listUserAPIKeys(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listUserAPIKeysRaw(initOverrides); - return await response.value(); - } - -} diff --git a/ui/src/sdk/apis/MeApi.ts b/ui/src/sdk/apis/MeApi.ts deleted file mode 100644 index f28f18a..0000000 --- a/ui/src/sdk/apis/MeApi.ts +++ /dev/null @@ -1,113 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { HandlersMeResponse, HandlersUpdateMeRequest, ModelsUser, } from "../models/index" -import { HandlersMeResponseFromJSON, HandlersUpdateMeRequestToJSON, ModelsUserFromJSON, } from "../models/index" - -export interface UpdateMeRequest { - body: HandlersUpdateMeRequest; -} - -/** - * - */ -export class MeApi extends runtime.BaseAPI { - - /** - * Get current user profile - */ - async getMeRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-API-KEY"] = await this.configuration.apiKey("X-API-KEY"); // ApiKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/me`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => HandlersMeResponseFromJSON(jsonValue)); - } - - /** - * Get current user profile - */ - async getMe(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.getMeRaw(initOverrides); - return await response.value(); - } - - /** - * Update current user profile - */ - async updateMeRaw(requestParameters: UpdateMeRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling updateMe().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-API-KEY"] = await this.configuration.apiKey("X-API-KEY"); // ApiKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/me`; - - const response = await this.request({ - path: urlPath, - method: 'PATCH', - headers: headerParameters, - query: queryParameters, - body: HandlersUpdateMeRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => ModelsUserFromJSON(jsonValue)); - } - - /** - * Update current user profile - */ - async updateMe(requestParameters: UpdateMeRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.updateMeRaw(requestParameters, initOverrides); - return await response.value(); - } - -} diff --git a/ui/src/sdk/apis/MetaApi.ts b/ui/src/sdk/apis/MetaApi.ts deleted file mode 100644 index b7a6cea..0000000 --- a/ui/src/sdk/apis/MetaApi.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { HandlersVersionResponse, } from "../models/index" -import { HandlersVersionResponseFromJSON, } from "../models/index" - -/** - * - */ -export class MetaApi extends runtime.BaseAPI { - - /** - * Returns build/runtime metadata for the running service. - * Service version information - */ - async versionOperationIdRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - - let urlPath = `/version`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => HandlersVersionResponseFromJSON(jsonValue)); - } - - /** - * Returns build/runtime metadata for the running service. - * Service version information - */ - async versionOperationId(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.versionOperationIdRaw(initOverrides); - return await response.value(); - } - -} diff --git a/ui/src/sdk/apis/NodePoolsApi.ts b/ui/src/sdk/apis/NodePoolsApi.ts deleted file mode 100644 index 52f4bee..0000000 --- a/ui/src/sdk/apis/NodePoolsApi.ts +++ /dev/null @@ -1,1170 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { - DtoAnnotationResponse, - DtoAttachAnnotationsRequest, - DtoAttachLabelsRequest, - DtoAttachServersRequest, - DtoAttachTaintsRequest, - DtoCreateNodePoolRequest, - DtoLabelResponse, - DtoNodePoolResponse, - DtoServerResponse, - DtoTaintResponse, - DtoUpdateNodePoolRequest, -} from "../models/index" -import { - DtoAnnotationResponseFromJSON, - DtoAttachAnnotationsRequestToJSON, - DtoAttachLabelsRequestToJSON, - DtoAttachServersRequestToJSON, - DtoAttachTaintsRequestToJSON, - DtoCreateNodePoolRequestToJSON, - DtoLabelResponseFromJSON, - DtoNodePoolResponseFromJSON, - DtoServerResponseFromJSON, - DtoTaintResponseFromJSON, - DtoUpdateNodePoolRequestToJSON, -} from "../models/index" - -export interface AttachNodePoolAnnotationsRequest { - id: string; - body: DtoAttachAnnotationsRequest; - xOrgID?: string; -} - -export interface AttachNodePoolLabelsRequest { - id: string; - body: DtoAttachLabelsRequest; - xOrgID?: string; -} - -export interface AttachNodePoolServersRequest { - id: string; - body: DtoAttachServersRequest; - xOrgID?: string; -} - -export interface AttachNodePoolTaintsRequest { - id: string; - body: DtoAttachTaintsRequest; - xOrgID?: string; -} - -export interface CreateNodePoolRequest { - body: DtoCreateNodePoolRequest; - xOrgID?: string; -} - -export interface DeleteNodePoolRequest { - id: string; - xOrgID?: string; -} - -export interface DetachNodePoolAnnotationRequest { - id: string; - annotationId: string; - xOrgID?: string; -} - -export interface DetachNodePoolLabelRequest { - id: string; - labelId: string; - xOrgID?: string; -} - -export interface DetachNodePoolServerRequest { - id: string; - serverId: string; - xOrgID?: string; -} - -export interface DetachNodePoolTaintRequest { - id: string; - taintId: string; - xOrgID?: string; -} - -export interface GetNodePoolRequest { - id: string; - xOrgID?: string; -} - -export interface ListNodePoolAnnotationsRequest { - id: string; - xOrgID?: string; -} - -export interface ListNodePoolLabelsRequest { - id: string; - xOrgID?: string; -} - -export interface ListNodePoolServersRequest { - id: string; - xOrgID?: string; -} - -export interface ListNodePoolTaintsRequest { - id: string; - xOrgID?: string; -} - -export interface ListNodePoolsRequest { - xOrgID?: string; - q?: string; -} - -export interface UpdateNodePoolRequest { - id: string; - body: DtoUpdateNodePoolRequest; - xOrgID?: string; -} - -/** - * - */ -export class NodePoolsApi extends runtime.BaseAPI { - - /** - * Attach annotation to a node pool (org scoped) - */ - async attachNodePoolAnnotationsRaw(requestParameters: AttachNodePoolAnnotationsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling attachNodePoolAnnotations().' - ); - } - - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling attachNodePoolAnnotations().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}/annotations`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoAttachAnnotationsRequestToJSON(requestParameters['body']), - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Attach annotation to a node pool (org scoped) - */ - async attachNodePoolAnnotations(requestParameters: AttachNodePoolAnnotationsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.attachNodePoolAnnotationsRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Attach labels to a node pool (org scoped) - */ - async attachNodePoolLabelsRaw(requestParameters: AttachNodePoolLabelsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling attachNodePoolLabels().' - ); - } - - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling attachNodePoolLabels().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}/labels`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoAttachLabelsRequestToJSON(requestParameters['body']), - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Attach labels to a node pool (org scoped) - */ - async attachNodePoolLabels(requestParameters: AttachNodePoolLabelsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.attachNodePoolLabelsRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Attach servers to a node pool (org scoped) - */ - async attachNodePoolServersRaw(requestParameters: AttachNodePoolServersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling attachNodePoolServers().' - ); - } - - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling attachNodePoolServers().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}/servers`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoAttachServersRequestToJSON(requestParameters['body']), - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Attach servers to a node pool (org scoped) - */ - async attachNodePoolServers(requestParameters: AttachNodePoolServersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.attachNodePoolServersRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Attach taints to a node pool (org scoped) - */ - async attachNodePoolTaintsRaw(requestParameters: AttachNodePoolTaintsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling attachNodePoolTaints().' - ); - } - - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling attachNodePoolTaints().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}/taints`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoAttachTaintsRequestToJSON(requestParameters['body']), - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Attach taints to a node pool (org scoped) - */ - async attachNodePoolTaints(requestParameters: AttachNodePoolTaintsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.attachNodePoolTaintsRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Creates a node pool. Optionally attach initial servers. - * Create node pool (org scoped) - */ - async createNodePoolRaw(requestParameters: CreateNodePoolRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling createNodePool().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools`; - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoCreateNodePoolRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoNodePoolResponseFromJSON(jsonValue)); - } - - /** - * Creates a node pool. Optionally attach initial servers. - * Create node pool (org scoped) - */ - async createNodePool(requestParameters: CreateNodePoolRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.createNodePoolRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Permanently deletes the node pool. - * Delete node pool (org scoped) - */ - async deleteNodePoolRaw(requestParameters: DeleteNodePoolRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling deleteNodePool().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Permanently deletes the node pool. - * Delete node pool (org scoped) - */ - async deleteNodePool(requestParameters: DeleteNodePoolRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.deleteNodePoolRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Detach one annotation from a node pool (org scoped) - */ - async detachNodePoolAnnotationRaw(requestParameters: DetachNodePoolAnnotationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling detachNodePoolAnnotation().' - ); - } - - if (requestParameters['annotationId'] == null) { - throw new runtime.RequiredError( - 'annotationId', - 'Required parameter "annotationId" was null or undefined when calling detachNodePoolAnnotation().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}/annotations/{annotationId}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - urlPath = urlPath.replace(`{${"annotationId"}}`, encodeURIComponent(String(requestParameters['annotationId']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Detach one annotation from a node pool (org scoped) - */ - async detachNodePoolAnnotation(requestParameters: DetachNodePoolAnnotationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.detachNodePoolAnnotationRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Detach one label from a node pool (org scoped) - */ - async detachNodePoolLabelRaw(requestParameters: DetachNodePoolLabelRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling detachNodePoolLabel().' - ); - } - - if (requestParameters['labelId'] == null) { - throw new runtime.RequiredError( - 'labelId', - 'Required parameter "labelId" was null or undefined when calling detachNodePoolLabel().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}/labels/{labelId}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - urlPath = urlPath.replace(`{${"labelId"}}`, encodeURIComponent(String(requestParameters['labelId']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Detach one label from a node pool (org scoped) - */ - async detachNodePoolLabel(requestParameters: DetachNodePoolLabelRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.detachNodePoolLabelRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Detach one server from a node pool (org scoped) - */ - async detachNodePoolServerRaw(requestParameters: DetachNodePoolServerRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling detachNodePoolServer().' - ); - } - - if (requestParameters['serverId'] == null) { - throw new runtime.RequiredError( - 'serverId', - 'Required parameter "serverId" was null or undefined when calling detachNodePoolServer().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}/servers/{serverId}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - urlPath = urlPath.replace(`{${"serverId"}}`, encodeURIComponent(String(requestParameters['serverId']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Detach one server from a node pool (org scoped) - */ - async detachNodePoolServer(requestParameters: DetachNodePoolServerRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.detachNodePoolServerRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Detach one taint from a node pool (org scoped) - */ - async detachNodePoolTaintRaw(requestParameters: DetachNodePoolTaintRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling detachNodePoolTaint().' - ); - } - - if (requestParameters['taintId'] == null) { - throw new runtime.RequiredError( - 'taintId', - 'Required parameter "taintId" was null or undefined when calling detachNodePoolTaint().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}/taints/{taintId}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - urlPath = urlPath.replace(`{${"taintId"}}`, encodeURIComponent(String(requestParameters['taintId']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Detach one taint from a node pool (org scoped) - */ - async detachNodePoolTaint(requestParameters: DetachNodePoolTaintRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.detachNodePoolTaintRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns one node pool. Add `include=servers` to include servers. - * Get node pool by ID (org scoped) - */ - async getNodePoolRaw(requestParameters: GetNodePoolRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling getNodePool().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoNodePoolResponseFromJSON(jsonValue)); - } - - /** - * Returns one node pool. Add `include=servers` to include servers. - * Get node pool by ID (org scoped) - */ - async getNodePool(requestParameters: GetNodePoolRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.getNodePoolRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * List annotations attached to a node pool (org scoped) - */ - async listNodePoolAnnotationsRaw(requestParameters: ListNodePoolAnnotationsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling listNodePoolAnnotations().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}/annotations`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(DtoAnnotationResponseFromJSON)); - } - - /** - * List annotations attached to a node pool (org scoped) - */ - async listNodePoolAnnotations(requestParameters: ListNodePoolAnnotationsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listNodePoolAnnotationsRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * List labels attached to a node pool (org scoped) - */ - async listNodePoolLabelsRaw(requestParameters: ListNodePoolLabelsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling listNodePoolLabels().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}/labels`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(DtoLabelResponseFromJSON)); - } - - /** - * List labels attached to a node pool (org scoped) - */ - async listNodePoolLabels(requestParameters: ListNodePoolLabelsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listNodePoolLabelsRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * List servers attached to a node pool (org scoped) - */ - async listNodePoolServersRaw(requestParameters: ListNodePoolServersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling listNodePoolServers().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}/servers`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(DtoServerResponseFromJSON)); - } - - /** - * List servers attached to a node pool (org scoped) - */ - async listNodePoolServers(requestParameters: ListNodePoolServersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listNodePoolServersRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * List taints attached to a node pool (org scoped) - */ - async listNodePoolTaintsRaw(requestParameters: ListNodePoolTaintsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling listNodePoolTaints().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}/taints`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(DtoTaintResponseFromJSON)); - } - - /** - * List taints attached to a node pool (org scoped) - */ - async listNodePoolTaints(requestParameters: ListNodePoolTaintsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listNodePoolTaintsRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns node pools for the organization in X-Org-ID. - * List node pools (org scoped) - */ - async listNodePoolsRaw(requestParameters: ListNodePoolsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - const queryParameters: any = {}; - - if (requestParameters['q'] != null) { - queryParameters['q'] = requestParameters['q']; - } - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(DtoNodePoolResponseFromJSON)); - } - - /** - * Returns node pools for the organization in X-Org-ID. - * List node pools (org scoped) - */ - async listNodePools(requestParameters: ListNodePoolsRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listNodePoolsRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Partially update node pool fields. - * Update node pool (org scoped) - */ - async updateNodePoolRaw(requestParameters: UpdateNodePoolRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling updateNodePool().' - ); - } - - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling updateNodePool().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/node-pools/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'PATCH', - headers: headerParameters, - query: queryParameters, - body: DtoUpdateNodePoolRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoNodePoolResponseFromJSON(jsonValue)); - } - - /** - * Partially update node pool fields. - * Update node pool (org scoped) - */ - async updateNodePool(requestParameters: UpdateNodePoolRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.updateNodePoolRaw(requestParameters, initOverrides); - return await response.value(); - } - -} diff --git a/ui/src/sdk/apis/OrgsApi.ts b/ui/src/sdk/apis/OrgsApi.ts deleted file mode 100644 index be4a561..0000000 --- a/ui/src/sdk/apis/OrgsApi.ts +++ /dev/null @@ -1,576 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { - HandlersMemberOut, - HandlersMemberUpsertReq, - HandlersOrgCreateReq, - HandlersOrgKeyCreateReq, - HandlersOrgKeyCreateResp, - HandlersOrgUpdateReq, - ModelsAPIKey, - ModelsOrganization, -} from "../models/index" -import { - HandlersMemberOutFromJSON, - HandlersMemberUpsertReqToJSON, - HandlersOrgCreateReqToJSON, - HandlersOrgKeyCreateReqToJSON, - HandlersOrgKeyCreateRespFromJSON, - HandlersOrgUpdateReqToJSON, - ModelsAPIKeyFromJSON, - ModelsOrganizationFromJSON, -} from "../models/index" - -export interface AddOrUpdateMemberRequest { - id: string; - body: HandlersMemberUpsertReq; -} - -export interface CreateOrgRequest { - body: HandlersOrgCreateReq; -} - -export interface CreateOrgKeyRequest { - id: string; - body: HandlersOrgKeyCreateReq; -} - -export interface DeleteOrgRequest { - id: string; -} - -export interface DeleteOrgKeyRequest { - id: string; - keyId: string; -} - -export interface GetOrgRequest { - id: string; -} - -export interface ListMembersRequest { - id: string; -} - -export interface ListOrgKeysRequest { - id: string; -} - -export interface RemoveMemberRequest { - id: string; - userId: string; -} - -export interface UpdateOrgRequest { - id: string; - body: HandlersOrgUpdateReq; -} - -/** - * - */ -export class OrgsApi extends runtime.BaseAPI { - - /** - * Add or update a member (owner/admin) - */ - async addOrUpdateMemberRaw(requestParameters: AddOrUpdateMemberRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling addOrUpdateMember().' - ); - } - - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling addOrUpdateMember().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/orgs/{id}/members`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: HandlersMemberUpsertReqToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => HandlersMemberOutFromJSON(jsonValue)); - } - - /** - * Add or update a member (owner/admin) - */ - async addOrUpdateMember(requestParameters: AddOrUpdateMemberRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.addOrUpdateMemberRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Create organization - */ - async createOrgRaw(requestParameters: CreateOrgRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling createOrg().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/orgs`; - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: HandlersOrgCreateReqToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => ModelsOrganizationFromJSON(jsonValue)); - } - - /** - * Create organization - */ - async createOrg(requestParameters: CreateOrgRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.createOrgRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Create org key/secret pair (owner/admin) - */ - async createOrgKeyRaw(requestParameters: CreateOrgKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling createOrgKey().' - ); - } - - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling createOrgKey().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/orgs/{id}/api-keys`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: HandlersOrgKeyCreateReqToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => HandlersOrgKeyCreateRespFromJSON(jsonValue)); - } - - /** - * Create org key/secret pair (owner/admin) - */ - async createOrgKey(requestParameters: CreateOrgKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.createOrgKeyRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Delete organization (owner) - */ - async deleteOrgRaw(requestParameters: DeleteOrgRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling deleteOrg().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/orgs/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.VoidApiResponse(response); - } - - /** - * Delete organization (owner) - */ - async deleteOrg(requestParameters: DeleteOrgRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - await this.deleteOrgRaw(requestParameters, initOverrides); - } - - /** - * Delete org key (owner/admin) - */ - async deleteOrgKeyRaw(requestParameters: DeleteOrgKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling deleteOrgKey().' - ); - } - - if (requestParameters['keyId'] == null) { - throw new runtime.RequiredError( - 'keyId', - 'Required parameter "keyId" was null or undefined when calling deleteOrgKey().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/orgs/{id}/api-keys/{key_id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - urlPath = urlPath.replace(`{${"key_id"}}`, encodeURIComponent(String(requestParameters['keyId']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.VoidApiResponse(response); - } - - /** - * Delete org key (owner/admin) - */ - async deleteOrgKey(requestParameters: DeleteOrgKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - await this.deleteOrgKeyRaw(requestParameters, initOverrides); - } - - /** - * Get organization - */ - async getOrgRaw(requestParameters: GetOrgRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling getOrg().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/orgs/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => ModelsOrganizationFromJSON(jsonValue)); - } - - /** - * Get organization - */ - async getOrg(requestParameters: GetOrgRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.getOrgRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * List members in org - */ - async listMembersRaw(requestParameters: ListMembersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling listMembers().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/orgs/{id}/members`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(HandlersMemberOutFromJSON)); - } - - /** - * List members in org - */ - async listMembers(requestParameters: ListMembersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listMembersRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * List organizations I belong to - */ - async listMyOrgsRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/orgs`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(ModelsOrganizationFromJSON)); - } - - /** - * List organizations I belong to - */ - async listMyOrgs(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listMyOrgsRaw(initOverrides); - return await response.value(); - } - - /** - * List org-scoped API keys (no secrets) - */ - async listOrgKeysRaw(requestParameters: ListOrgKeysRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling listOrgKeys().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/orgs/{id}/api-keys`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(ModelsAPIKeyFromJSON)); - } - - /** - * List org-scoped API keys (no secrets) - */ - async listOrgKeys(requestParameters: ListOrgKeysRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listOrgKeysRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Remove a member (owner/admin) - */ - async removeMemberRaw(requestParameters: RemoveMemberRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling removeMember().' - ); - } - - if (requestParameters['userId'] == null) { - throw new runtime.RequiredError( - 'userId', - 'Required parameter "userId" was null or undefined when calling removeMember().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/orgs/{id}/members/{user_id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - urlPath = urlPath.replace(`{${"user_id"}}`, encodeURIComponent(String(requestParameters['userId']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.VoidApiResponse(response); - } - - /** - * Remove a member (owner/admin) - */ - async removeMember(requestParameters: RemoveMemberRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - await this.removeMemberRaw(requestParameters, initOverrides); - } - - /** - * Update organization (owner/admin) - */ - async updateOrgRaw(requestParameters: UpdateOrgRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling updateOrg().' - ); - } - - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling updateOrg().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/orgs/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'PATCH', - headers: headerParameters, - query: queryParameters, - body: HandlersOrgUpdateReqToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => ModelsOrganizationFromJSON(jsonValue)); - } - - /** - * Update organization (owner/admin) - */ - async updateOrg(requestParameters: UpdateOrgRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.updateOrgRaw(requestParameters, initOverrides); - return await response.value(); - } - -} diff --git a/ui/src/sdk/apis/ServersApi.ts b/ui/src/sdk/apis/ServersApi.ts deleted file mode 100644 index 9d9ad50..0000000 --- a/ui/src/sdk/apis/ServersApi.ts +++ /dev/null @@ -1,343 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { DtoCreateServerRequest, DtoServerResponse, DtoUpdateServerRequest, } from "../models/index" -import { DtoCreateServerRequestToJSON, DtoServerResponseFromJSON, DtoUpdateServerRequestToJSON, } from "../models/index" - -export interface CreateServerRequest { - body: DtoCreateServerRequest; - xOrgID?: string; -} - -export interface DeleteServerRequest { - id: string; - xOrgID?: string; -} - -export interface GetServerRequest { - id: string; - xOrgID?: string; -} - -export interface ListServersRequest { - xOrgID?: string; - status?: string; - role?: string; -} - -export interface UpdateServerRequest { - id: string; - body: DtoUpdateServerRequest; - xOrgID?: string; -} - -/** - * - */ -export class ServersApi extends runtime.BaseAPI { - - /** - * Creates a server bound to the org in X-Org-ID. Validates that ssh_key_id belongs to the org. - * Create server (org scoped) - */ - async createServerRaw(requestParameters: CreateServerRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling createServer().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/servers`; - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoCreateServerRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoServerResponseFromJSON(jsonValue)); - } - - /** - * Creates a server bound to the org in X-Org-ID. Validates that ssh_key_id belongs to the org. - * Create server (org scoped) - */ - async createServer(requestParameters: CreateServerRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.createServerRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Permanently deletes the server. - * Delete server (org scoped) - */ - async deleteServerRaw(requestParameters: DeleteServerRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling deleteServer().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/servers/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Permanently deletes the server. - * Delete server (org scoped) - */ - async deleteServer(requestParameters: DeleteServerRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.deleteServerRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns one server in the given organization. - * Get server by ID (org scoped) - */ - async getServerRaw(requestParameters: GetServerRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling getServer().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/servers/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoServerResponseFromJSON(jsonValue)); - } - - /** - * Returns one server in the given organization. - * Get server by ID (org scoped) - */ - async getServer(requestParameters: GetServerRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.getServerRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns servers for the organization in X-Org-ID. Optional filters: status, role. - * List servers (org scoped) - */ - async listServersRaw(requestParameters: ListServersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - const queryParameters: any = {}; - - if (requestParameters['status'] != null) { - queryParameters['status'] = requestParameters['status']; - } - - if (requestParameters['role'] != null) { - queryParameters['role'] = requestParameters['role']; - } - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/servers`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(DtoServerResponseFromJSON)); - } - - /** - * Returns servers for the organization in X-Org-ID. Optional filters: status, role. - * List servers (org scoped) - */ - async listServers(requestParameters: ListServersRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listServersRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Partially update fields; changing ssh_key_id validates ownership. - * Update server (org scoped) - */ - async updateServerRaw(requestParameters: UpdateServerRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling updateServer().' - ); - } - - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling updateServer().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/servers/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'PATCH', - headers: headerParameters, - query: queryParameters, - body: DtoUpdateServerRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoServerResponseFromJSON(jsonValue)); - } - - /** - * Partially update fields; changing ssh_key_id validates ownership. - * Update server (org scoped) - */ - async updateServer(requestParameters: UpdateServerRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.updateServerRaw(requestParameters, initOverrides); - return await response.value(); - } - -} diff --git a/ui/src/sdk/apis/SshApi.ts b/ui/src/sdk/apis/SshApi.ts deleted file mode 100644 index 04ecbff..0000000 --- a/ui/src/sdk/apis/SshApi.ts +++ /dev/null @@ -1,360 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { DtoCreateSSHRequest, DtoSshResponse, DtoSshRevealResponse, } from "../models/index" -import { DtoCreateSSHRequestToJSON, DtoSshResponseFromJSON, DtoSshRevealResponseFromJSON, } from "../models/index" - -export interface CreateSSHKeyRequest { - body: DtoCreateSSHRequest; - xOrgID?: string; -} - -export interface DeleteSSHKeyRequest { - id: string; - xOrgID?: string; -} - -export interface DownloadSSHKeyRequest { - xOrgID: string; - id: string; - part: DownloadSSHKeyPartEnum; -} - -export interface GetSSHKeyRequest { - id: string; - xOrgID?: string; - reveal?: boolean; -} - -export interface ListPublicSshKeysRequest { - xOrgID?: string; -} - -/** - * - */ -export class SshApi extends runtime.BaseAPI { - - /** - * Generates an RSA or ED25519 keypair, saves it, and returns metadata. For RSA you may set bits (2048/3072/4096). Default is 4096. ED25519 ignores bits. - * Create ssh keypair (org scoped) - */ - async createSSHKeyRaw(requestParameters: CreateSSHKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling createSSHKey().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/ssh`; - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoCreateSSHRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoSshResponseFromJSON(jsonValue)); - } - - /** - * Generates an RSA or ED25519 keypair, saves it, and returns metadata. For RSA you may set bits (2048/3072/4096). Default is 4096. ED25519 ignores bits. - * Create ssh keypair (org scoped) - */ - async createSSHKey(requestParameters: CreateSSHKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.createSSHKeyRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Permanently deletes a keypair. - * Delete ssh keypair (org scoped) - */ - async deleteSSHKeyRaw(requestParameters: DeleteSSHKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling deleteSSHKey().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/ssh/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Permanently deletes a keypair. - * Delete ssh keypair (org scoped) - */ - async deleteSSHKey(requestParameters: DeleteSSHKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.deleteSSHKeyRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Download `part=public|private|both` of the keypair. `both` returns a zip file. - * Download ssh key files by ID (org scoped) - */ - async downloadSSHKeyRaw(requestParameters: DownloadSSHKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['xOrgID'] == null) { - throw new runtime.RequiredError( - 'xOrgID', - 'Required parameter "xOrgID" was null or undefined when calling downloadSSHKey().' - ); - } - - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling downloadSSHKey().' - ); - } - - if (requestParameters['part'] == null) { - throw new runtime.RequiredError( - 'part', - 'Required parameter "part" was null or undefined when calling downloadSSHKey().' - ); - } - - const queryParameters: any = {}; - - if (requestParameters['part'] != null) { - queryParameters['part'] = requestParameters['part']; - } - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/ssh/{id}/download`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Download `part=public|private|both` of the keypair. `both` returns a zip file. - * Download ssh key files by ID (org scoped) - */ - async downloadSSHKey(requestParameters: DownloadSSHKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.downloadSSHKeyRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns public key fields. Append `?reveal=true` to include the private key PEM. - * Get ssh key by ID (org scoped) - */ - async getSSHKeyRaw(requestParameters: GetSSHKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling getSSHKey().' - ); - } - - const queryParameters: any = {}; - - if (requestParameters['reveal'] != null) { - queryParameters['reveal'] = requestParameters['reveal']; - } - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/ssh/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoSshRevealResponseFromJSON(jsonValue)); - } - - /** - * Returns public key fields. Append `?reveal=true` to include the private key PEM. - * Get ssh key by ID (org scoped) - */ - async getSSHKey(requestParameters: GetSSHKeyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.getSSHKeyRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns ssh keys for the organization in X-Org-ID. - * List ssh keys (org scoped) - */ - async listPublicSshKeysRaw(requestParameters: ListPublicSshKeysRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/ssh`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(DtoSshResponseFromJSON)); - } - - /** - * Returns ssh keys for the organization in X-Org-ID. - * List ssh keys (org scoped) - */ - async listPublicSshKeys(requestParameters: ListPublicSshKeysRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listPublicSshKeysRaw(requestParameters, initOverrides); - return await response.value(); - } - -} - -/** - * @export - */ -export const DownloadSSHKeyPartEnum = { - public: 'public', - private: 'private', - both: 'both' -} as const; -export type DownloadSSHKeyPartEnum = typeof DownloadSSHKeyPartEnum[keyof typeof DownloadSSHKeyPartEnum]; diff --git a/ui/src/sdk/apis/TaintsApi.ts b/ui/src/sdk/apis/TaintsApi.ts deleted file mode 100644 index ffd3793..0000000 --- a/ui/src/sdk/apis/TaintsApi.ts +++ /dev/null @@ -1,346 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from "../runtime" -import type { DtoCreateTaintRequest, DtoTaintResponse, DtoUpdateTaintRequest, } from "../models/index" -import { DtoCreateTaintRequestToJSON, DtoTaintResponseFromJSON, DtoUpdateTaintRequestToJSON, } from "../models/index" - -export interface CreateTaintRequest { - body: DtoCreateTaintRequest; - xOrgID?: string; -} - -export interface DeleteTaintRequest { - id: string; - xOrgID?: string; -} - -export interface GetTaintRequest { - id: string; - xOrgID?: string; -} - -export interface ListTaintsRequest { - xOrgID?: string; - key?: string; - value?: string; - q?: string; -} - -export interface UpdateTaintRequest { - id: string; - body: DtoUpdateTaintRequest; - xOrgID?: string; -} - -/** - * - */ -export class TaintsApi extends runtime.BaseAPI { - - /** - * Creates a taint. - * Create node taint (org scoped) - */ - async createTaintRaw(requestParameters: CreateTaintRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling createTaint().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/taints`; - - const response = await this.request({ - path: urlPath, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: DtoCreateTaintRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoTaintResponseFromJSON(jsonValue)); - } - - /** - * Creates a taint. - * Create node taint (org scoped) - */ - async createTaint(requestParameters: CreateTaintRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.createTaintRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Permanently deletes the taint. - * Delete taint (org scoped) - */ - async deleteTaintRaw(requestParameters: DeleteTaintRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling deleteTaint().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/taints/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - if (this.isJsonMime(response.headers.get('content-type'))) { - return new runtime.JSONApiResponse(response); - } else { - return new runtime.TextApiResponse(response) as any; - } - } - - /** - * Permanently deletes the taint. - * Delete taint (org scoped) - */ - async deleteTaint(requestParameters: DeleteTaintRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.deleteTaintRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Get node taint by ID (org scoped) - */ - async getTaintRaw(requestParameters: GetTaintRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling getTaint().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/taints/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoTaintResponseFromJSON(jsonValue)); - } - - /** - * Get node taint by ID (org scoped) - */ - async getTaint(requestParameters: GetTaintRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.getTaintRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Returns node taints for the organization in X-Org-ID. Filters: `key`, `value`, and `q` (key contains). Add `include=node_pools` to include linked node pools. - * List node pool taints (org scoped) - */ - async listTaintsRaw(requestParameters: ListTaintsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - const queryParameters: any = {}; - - if (requestParameters['key'] != null) { - queryParameters['key'] = requestParameters['key']; - } - - if (requestParameters['value'] != null) { - queryParameters['value'] = requestParameters['value']; - } - - if (requestParameters['q'] != null) { - queryParameters['q'] = requestParameters['q']; - } - - const headerParameters: runtime.HTTPHeaders = {}; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/taints`; - - const response = await this.request({ - path: urlPath, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(DtoTaintResponseFromJSON)); - } - - /** - * Returns node taints for the organization in X-Org-ID. Filters: `key`, `value`, and `q` (key contains). Add `include=node_pools` to include linked node pools. - * List node pool taints (org scoped) - */ - async listTaints(requestParameters: ListTaintsRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listTaintsRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - * Partially update taint fields. - * Update node taint (org scoped) - */ - async updateTaintRaw(requestParameters: UpdateTaintRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters['id'] == null) { - throw new runtime.RequiredError( - 'id', - 'Required parameter "id" was null or undefined when calling updateTaint().' - ); - } - - if (requestParameters['body'] == null) { - throw new runtime.RequiredError( - 'body', - 'Required parameter "body" was null or undefined when calling updateTaint().' - ); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (requestParameters['xOrgID'] != null) { - headerParameters['X-Org-ID'] = String(requestParameters['xOrgID']); - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-KEY"] = await this.configuration.apiKey("X-ORG-KEY"); // OrgKeyAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["X-ORG-SECRET"] = await this.configuration.apiKey("X-ORG-SECRET"); // OrgSecretAuth authentication - } - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // BearerAuth authentication - } - - - let urlPath = `/taints/{id}`; - urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))); - - const response = await this.request({ - path: urlPath, - method: 'PATCH', - headers: headerParameters, - query: queryParameters, - body: DtoUpdateTaintRequestToJSON(requestParameters['body']), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => DtoTaintResponseFromJSON(jsonValue)); - } - - /** - * Partially update taint fields. - * Update node taint (org scoped) - */ - async updateTaint(requestParameters: UpdateTaintRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.updateTaintRaw(requestParameters, initOverrides); - return await response.value(); - } - -} diff --git a/ui/src/sdk/apis/index.ts b/ui/src/sdk/apis/index.ts deleted file mode 100644 index ca72220..0000000 --- a/ui/src/sdk/apis/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -export * from './AnnotationsApi'; -export * from './ArcherAdminApi'; -export * from './AuthApi'; -export * from './ClustersApi'; -export * from './CredentialsApi'; -export * from './HealthApi'; -export * from './LabelsApi'; -export * from './MeApi'; -export * from './MeAPIKeysApi'; -export * from './MetaApi'; -export * from './NodePoolsApi'; -export * from './OrgsApi'; -export * from './ServersApi'; -export * from './SshApi'; -export * from './TaintsApi'; diff --git a/ui/src/sdk/docs/AnnotationsApi.md b/ui/src/sdk/docs/AnnotationsApi.md deleted file mode 100644 index 6690874..0000000 --- a/ui/src/sdk/docs/AnnotationsApi.md +++ /dev/null @@ -1,433 +0,0 @@ -# AnnotationsApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**createAnnotation**](AnnotationsApi.md#createannotation) | **POST** /annotations | Create annotation (org scoped) | -| [**deleteAnnotation**](AnnotationsApi.md#deleteannotation) | **DELETE** /annotations/{id} | Delete annotation (org scoped) | -| [**getAnnotation**](AnnotationsApi.md#getannotation) | **GET** /annotations/{id} | Get annotation by ID (org scoped) | -| [**listAnnotations**](AnnotationsApi.md#listannotations) | **GET** /annotations | List annotations (org scoped) | -| [**updateAnnotation**](AnnotationsApi.md#updateannotation) | **PATCH** /annotations/{id} | Update annotation (org scoped) | - - - -## createAnnotation - -> DtoAnnotationResponse createAnnotation(body, xOrgID) - -Create annotation (org scoped) - -Creates an annotation. - -### Example - -```ts -import { - Configuration, - AnnotationsApi, -} from '@glueops/autoglue-sdk-go'; -import type { CreateAnnotationRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new AnnotationsApi(config); - - const body = { - // DtoCreateAnnotationRequest | Annotation payload - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies CreateAnnotationRequest; - - try { - const data = await api.createAnnotation(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **body** | [DtoCreateAnnotationRequest](DtoCreateAnnotationRequest.md) | Annotation payload | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoAnnotationResponse**](DtoAnnotationResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **201** | Created | - | -| **400** | invalid json / missing fields | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | create failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## deleteAnnotation - -> string deleteAnnotation(id, xOrgID) - -Delete annotation (org scoped) - -Permanently deletes the annotation. - -### Example - -```ts -import { - Configuration, - AnnotationsApi, -} from '@glueops/autoglue-sdk-go'; -import type { DeleteAnnotationRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new AnnotationsApi(config); - - const body = { - // string | Annotation ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies DeleteAnnotationRequest; - - try { - const data = await api.deleteAnnotation(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Annotation ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | delete failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## getAnnotation - -> DtoAnnotationResponse getAnnotation(id, xOrgID) - -Get annotation by ID (org scoped) - -Returns one annotation. Add `include=node_pools` to include node pools. - -### Example - -```ts -import { - Configuration, - AnnotationsApi, -} from '@glueops/autoglue-sdk-go'; -import type { GetAnnotationRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new AnnotationsApi(config); - - const body = { - // string | Annotation ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies GetAnnotationRequest; - - try { - const data = await api.getAnnotation(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Annotation ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoAnnotationResponse**](DtoAnnotationResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | fetch failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listAnnotations - -> Array<DtoAnnotationResponse> listAnnotations(xOrgID, key, value, q) - -List annotations (org scoped) - -Returns annotations for the organization in X-Org-ID. Filters: `key`, `value`, and `q` (key contains). Add `include=node_pools` to include linked node pools. - -### Example - -```ts -import { - Configuration, - AnnotationsApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListAnnotationsRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new AnnotationsApi(config); - - const body = { - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - // string | Exact key (optional) - key: key_example, - // string | Exact value (optional) - value: value_example, - // string | key contains (case-insensitive) (optional) - q: q_example, - } satisfies ListAnnotationsRequest; - - try { - const data = await api.listAnnotations(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | -| **key** | `string` | Exact key | [Optional] [Defaults to `undefined`] | -| **value** | `string` | Exact value | [Optional] [Defaults to `undefined`] | -| **q** | `string` | key contains (case-insensitive) | [Optional] [Defaults to `undefined`] | - -### Return type - -[**Array<DtoAnnotationResponse>**](DtoAnnotationResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | failed to list annotations | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## updateAnnotation - -> DtoAnnotationResponse updateAnnotation(id, body, xOrgID) - -Update annotation (org scoped) - -Partially update annotation fields. - -### Example - -```ts -import { - Configuration, - AnnotationsApi, -} from '@glueops/autoglue-sdk-go'; -import type { UpdateAnnotationRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new AnnotationsApi(config); - - const body = { - // string | Annotation ID (UUID) - id: id_example, - // DtoUpdateAnnotationRequest | Fields to update - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies UpdateAnnotationRequest; - - try { - const data = await api.updateAnnotation(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Annotation ID (UUID) | [Defaults to `undefined`] | -| **body** | [DtoUpdateAnnotationRequest](DtoUpdateAnnotationRequest.md) | Fields to update | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoAnnotationResponse**](DtoAnnotationResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid id / invalid json | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | update failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/ArcherAdminApi.md b/ui/src/sdk/docs/ArcherAdminApi.md deleted file mode 100644 index 22ebdca..0000000 --- a/ui/src/sdk/docs/ArcherAdminApi.md +++ /dev/null @@ -1,390 +0,0 @@ -# ArcherAdminApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**adminCancelArcherJob**](ArcherAdminApi.md#admincancelarcherjob) | **POST** /admin/archer/jobs/{id}/cancel | Cancel an Archer job (admin) | -| [**adminEnqueueArcherJob**](ArcherAdminApi.md#adminenqueuearcherjob) | **POST** /admin/archer/jobs | Enqueue a new Archer job (admin) | -| [**adminListArcherJobs**](ArcherAdminApi.md#adminlistarcherjobs) | **GET** /admin/archer/jobs | List Archer jobs (admin) | -| [**adminListArcherQueues**](ArcherAdminApi.md#adminlistarcherqueues) | **GET** /admin/archer/queues | List Archer queues (admin) | -| [**adminRetryArcherJob**](ArcherAdminApi.md#adminretryarcherjob) | **POST** /admin/archer/jobs/{id}/retry | Retry a failed/canceled Archer job (admin) | - - - -## adminCancelArcherJob - -> DtoJob adminCancelArcherJob(id) - -Cancel an Archer job (admin) - -Set job status to canceled if cancellable. For running jobs, this only affects future picks; wire to Archer if you need active kill. - -### Example - -```ts -import { - Configuration, - ArcherAdminApi, -} from '@glueops/autoglue-sdk-go'; -import type { AdminCancelArcherJobRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new ArcherAdminApi(config); - - const body = { - // string | Job ID - id: id_example, - } satisfies AdminCancelArcherJobRequest; - - try { - const data = await api.adminCancelArcherJob(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Job ID | [Defaults to `undefined`] | - -### Return type - -[**DtoJob**](DtoJob.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid job or not cancellable | - | -| **401** | Unauthorized | - | -| **403** | forbidden | - | -| **404** | not found | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## adminEnqueueArcherJob - -> DtoJob adminEnqueueArcherJob(body) - -Enqueue a new Archer job (admin) - -Create a job immediately or schedule it for the future via `run_at`. - -### Example - -```ts -import { - Configuration, - ArcherAdminApi, -} from '@glueops/autoglue-sdk-go'; -import type { AdminEnqueueArcherJobRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new ArcherAdminApi(config); - - const body = { - // DtoEnqueueRequest | Job parameters - body: ..., - } satisfies AdminEnqueueArcherJobRequest; - - try { - const data = await api.adminEnqueueArcherJob(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **body** | [DtoEnqueueRequest](DtoEnqueueRequest.md) | Job parameters | | - -### Return type - -[**DtoJob**](DtoJob.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid json or missing fields | - | -| **401** | Unauthorized | - | -| **403** | forbidden | - | -| **500** | internal error | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## adminListArcherJobs - -> DtoPageJob adminListArcherJobs(status, queue, q, page, pageSize) - -List Archer jobs (admin) - -Paginated background jobs with optional filters. Search `q` may match id, type, error, payload (implementation-dependent). - -### Example - -```ts -import { - Configuration, - ArcherAdminApi, -} from '@glueops/autoglue-sdk-go'; -import type { AdminListArcherJobsRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new ArcherAdminApi(config); - - const body = { - // 'queued' | 'running' | 'succeeded' | 'failed' | 'canceled' | 'retrying' | 'scheduled' | Filter by status (optional) - status: status_example, - // string | Filter by queue name / worker name (optional) - queue: queue_example, - // string | Free-text search (optional) - q: q_example, - // number | Page number (optional) - page: 56, - // number | Items per page (optional) - pageSize: 56, - } satisfies AdminListArcherJobsRequest; - - try { - const data = await api.adminListArcherJobs(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **status** | `queued`, `running`, `succeeded`, `failed`, `canceled`, `retrying`, `scheduled` | Filter by status | [Optional] [Defaults to `undefined`] [Enum: queued, running, succeeded, failed, canceled, retrying, scheduled] | -| **queue** | `string` | Filter by queue name / worker name | [Optional] [Defaults to `undefined`] | -| **q** | `string` | Free-text search | [Optional] [Defaults to `undefined`] | -| **page** | `number` | Page number | [Optional] [Defaults to `1`] | -| **pageSize** | `number` | Items per page | [Optional] [Defaults to `25`] | - -### Return type - -[**DtoPageJob**](DtoPageJob.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | -| **403** | forbidden | - | -| **500** | internal error | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## adminListArcherQueues - -> Array<DtoQueueInfo> adminListArcherQueues() - -List Archer queues (admin) - -Summary metrics per queue (pending, running, failed, scheduled). - -### Example - -```ts -import { - Configuration, - ArcherAdminApi, -} from '@glueops/autoglue-sdk-go'; -import type { AdminListArcherQueuesRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new ArcherAdminApi(config); - - try { - const data = await api.adminListArcherQueues(); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**Array<DtoQueueInfo>**](DtoQueueInfo.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | -| **403** | forbidden | - | -| **500** | internal error | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## adminRetryArcherJob - -> DtoJob adminRetryArcherJob(id) - -Retry a failed/canceled Archer job (admin) - -Marks the job retriable (DB flip). Swap this for an Archer admin call if you expose one. - -### Example - -```ts -import { - Configuration, - ArcherAdminApi, -} from '@glueops/autoglue-sdk-go'; -import type { AdminRetryArcherJobRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new ArcherAdminApi(config); - - const body = { - // string | Job ID - id: id_example, - } satisfies AdminRetryArcherJobRequest; - - try { - const data = await api.adminRetryArcherJob(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Job ID | [Defaults to `undefined`] | - -### Return type - -[**DtoJob**](DtoJob.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid job or not eligible | - | -| **401** | Unauthorized | - | -| **403** | forbidden | - | -| **404** | not found | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/AuthApi.md b/ui/src/sdk/docs/AuthApi.md deleted file mode 100644 index f5b3a9c..0000000 --- a/ui/src/sdk/docs/AuthApi.md +++ /dev/null @@ -1,334 +0,0 @@ -# AuthApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**authCallback**](AuthApi.md#authcallback) | **GET** /auth/{provider}/callback | Handle social login callback | -| [**authStart**](AuthApi.md#authstart) | **POST** /auth/{provider}/start | Begin social login | -| [**getJWKS**](AuthApi.md#getjwks) | **GET** /.well-known/jwks.json | Get JWKS | -| [**logout**](AuthApi.md#logout) | **POST** /auth/logout | Revoke refresh token family (logout everywhere) | -| [**refresh**](AuthApi.md#refresh) | **POST** /auth/refresh | Rotate refresh token | - - - -## authCallback - -> DtoTokenPair authCallback(provider) - -Handle social login callback - -### Example - -```ts -import { - Configuration, - AuthApi, -} from '@glueops/autoglue-sdk-go'; -import type { AuthCallbackRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const api = new AuthApi(); - - const body = { - // string | google|github - provider: provider_example, - } satisfies AuthCallbackRequest; - - try { - const data = await api.authCallback(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **provider** | `string` | google|github | [Defaults to `undefined`] | - -### Return type - -[**DtoTokenPair**](DtoTokenPair.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## authStart - -> DtoAuthStartResponse authStart(provider) - -Begin social login - -Returns provider authorization URL for the frontend to redirect - -### Example - -```ts -import { - Configuration, - AuthApi, -} from '@glueops/autoglue-sdk-go'; -import type { AuthStartRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const api = new AuthApi(); - - const body = { - // string | google|github - provider: provider_example, - } satisfies AuthStartRequest; - - try { - const data = await api.authStart(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **provider** | `string` | google|github | [Defaults to `undefined`] | - -### Return type - -[**DtoAuthStartResponse**](DtoAuthStartResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## getJWKS - -> DtoJWKS getJWKS() - -Get JWKS - -Returns the JSON Web Key Set for token verification - -### Example - -```ts -import { - Configuration, - AuthApi, -} from '@glueops/autoglue-sdk-go'; -import type { GetJWKSRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const api = new AuthApi(); - - try { - const data = await api.getJWKS(); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**DtoJWKS**](DtoJWKS.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## logout - -> logout(body) - -Revoke refresh token family (logout everywhere) - -### Example - -```ts -import { - Configuration, - AuthApi, -} from '@glueops/autoglue-sdk-go'; -import type { LogoutRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const api = new AuthApi(); - - const body = { - // DtoLogoutRequest | Refresh token - body: ..., - } satisfies LogoutRequest; - - try { - const data = await api.logout(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **body** | [DtoLogoutRequest](DtoLogoutRequest.md) | Refresh token | | - -### Return type - -`void` (Empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: Not defined - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## refresh - -> DtoTokenPair refresh(body) - -Rotate refresh token - -### Example - -```ts -import { - Configuration, - AuthApi, -} from '@glueops/autoglue-sdk-go'; -import type { RefreshRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const api = new AuthApi(); - - const body = { - // DtoRefreshRequest | Refresh token - body: ..., - } satisfies RefreshRequest; - - try { - const data = await api.refresh(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **body** | [DtoRefreshRequest](DtoRefreshRequest.md) | Refresh token | | - -### Return type - -[**DtoTokenPair**](DtoTokenPair.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/ClustersApi.md b/ui/src/sdk/docs/ClustersApi.md deleted file mode 100644 index a9ec006..0000000 --- a/ui/src/sdk/docs/ClustersApi.md +++ /dev/null @@ -1,173 +0,0 @@ -# ClustersApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**createCluster**](ClustersApi.md#createcluster) | **POST** /clusters | Create cluster (org scoped) | -| [**listClusters**](ClustersApi.md#listclusters) | **GET** /clusters | List clusters (org scoped) | - - - -## createCluster - -> DtoClusterResponse createCluster(body, xOrgID) - -Create cluster (org scoped) - -Creates a cluster. If `kubeconfig` is provided, it will be encrypted per-organization and stored securely (never returned). - -### Example - -```ts -import { - Configuration, - ClustersApi, -} from '@glueops/autoglue-sdk-go'; -import type { CreateClusterRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new ClustersApi(config); - - const body = { - // DtoCreateClusterRequest | payload - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies CreateClusterRequest; - - try { - const data = await api.createCluster(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **body** | [DtoCreateClusterRequest](DtoCreateClusterRequest.md) | payload | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoClusterResponse**](DtoClusterResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **201** | Created | - | -| **400** | invalid json | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | create failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listClusters - -> Array<DtoClusterResponse> listClusters(xOrgID, q) - -List clusters (org scoped) - -Returns clusters for the organization in X-Org-ID. Filter by `q` (name contains). - -### Example - -```ts -import { - Configuration, - ClustersApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListClustersRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new ClustersApi(config); - - const body = { - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - // string | Name contains (case-insensitive) (optional) - q: q_example, - } satisfies ListClustersRequest; - - try { - const data = await api.listClusters(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | -| **q** | `string` | Name contains (case-insensitive) | [Optional] [Defaults to `undefined`] | - -### Return type - -[**Array<DtoClusterResponse>**](DtoClusterResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | failed to list clusters | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/CredentialsApi.md b/ui/src/sdk/docs/CredentialsApi.md deleted file mode 100644 index ae48438..0000000 --- a/ui/src/sdk/docs/CredentialsApi.md +++ /dev/null @@ -1,495 +0,0 @@ -# CredentialsApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**createCredential**](CredentialsApi.md#createcredential) | **POST** /credentials | Create a credential (encrypts secret) | -| [**deleteCredential**](CredentialsApi.md#deletecredential) | **DELETE** /credentials/{id} | Delete credential | -| [**getCredential**](CredentialsApi.md#getcredential) | **GET** /credentials/{id} | Get credential by ID (metadata only) | -| [**listCredentials**](CredentialsApi.md#listcredentials) | **GET** /credentials | List credentials (metadata only) | -| [**revealCredential**](CredentialsApi.md#revealcredential) | **POST** /credentials/{id}/reveal | Reveal decrypted secret (one-time read) | -| [**updateCredential**](CredentialsApi.md#updatecredential) | **PATCH** /credentials/{id} | Update credential metadata and/or rotate secret | - - - -## createCredential - -> DtoCredentialOut createCredential(body, xOrgID) - -Create a credential (encrypts secret) - -### Example - -```ts -import { - Configuration, - CredentialsApi, -} from '@glueops/autoglue-sdk-go'; -import type { CreateCredentialRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new CredentialsApi(config); - - const body = { - // DtoCreateCredentialRequest | Credential payload - body: ..., - // string | Organization ID (UUID) (optional) - xOrgID: xOrgID_example, - } satisfies CreateCredentialRequest; - - try { - const data = await api.createCredential(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **body** | [DtoCreateCredentialRequest](DtoCreateCredentialRequest.md) | Credential payload | | -| **xOrgID** | `string` | Organization ID (UUID) | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoCredentialOut**](DtoCredentialOut.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **201** | Created | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | internal server error | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## deleteCredential - -> deleteCredential(id, xOrgID) - -Delete credential - -### Example - -```ts -import { - Configuration, - CredentialsApi, -} from '@glueops/autoglue-sdk-go'; -import type { DeleteCredentialRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new CredentialsApi(config); - - const body = { - // string | Credential ID (UUID) - id: id_example, - // string | Organization ID (UUID) (optional) - xOrgID: xOrgID_example, - } satisfies DeleteCredentialRequest; - - try { - const data = await api.deleteCredential(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Credential ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization ID (UUID) | [Optional] [Defaults to `undefined`] | - -### Return type - -`void` (Empty response body) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **404** | not found | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## getCredential - -> DtoCredentialOut getCredential(id, xOrgID) - -Get credential by ID (metadata only) - -### Example - -```ts -import { - Configuration, - CredentialsApi, -} from '@glueops/autoglue-sdk-go'; -import type { GetCredentialRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new CredentialsApi(config); - - const body = { - // string | Credential ID (UUID) - id: id_example, - // string | Organization ID (UUID) (optional) - xOrgID: xOrgID_example, - } satisfies GetCredentialRequest; - - try { - const data = await api.getCredential(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Credential ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization ID (UUID) | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoCredentialOut**](DtoCredentialOut.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | internal server error | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listCredentials - -> Array<DtoCredentialOut> listCredentials(xOrgID, provider, kind, scopeKind) - -List credentials (metadata only) - -Returns credential metadata for the current org. Secrets are never returned. - -### Example - -```ts -import { - Configuration, - CredentialsApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListCredentialsRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new CredentialsApi(config); - - const body = { - // string | Organization ID (UUID) (optional) - xOrgID: xOrgID_example, - // string | Filter by provider (e.g., aws) (optional) - provider: provider_example, - // string | Filter by kind (e.g., aws_access_key) (optional) - kind: kind_example, - // string | Filter by scope kind (provider/service/resource) (optional) - scopeKind: scopeKind_example, - } satisfies ListCredentialsRequest; - - try { - const data = await api.listCredentials(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **xOrgID** | `string` | Organization ID (UUID) | [Optional] [Defaults to `undefined`] | -| **provider** | `string` | Filter by provider (e.g., aws) | [Optional] [Defaults to `undefined`] | -| **kind** | `string` | Filter by kind (e.g., aws_access_key) | [Optional] [Defaults to `undefined`] | -| **scopeKind** | `string` | Filter by scope kind (provider/service/resource) | [Optional] [Defaults to `undefined`] | - -### Return type - -[**Array<DtoCredentialOut>**](DtoCredentialOut.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | internal server error | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## revealCredential - -> { [key: string]: any; } revealCredential(id, xOrgID) - -Reveal decrypted secret (one-time read) - -### Example - -```ts -import { - Configuration, - CredentialsApi, -} from '@glueops/autoglue-sdk-go'; -import type { RevealCredentialRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new CredentialsApi(config); - - const body = { - // string | Credential ID (UUID) - id: id_example, - // string | Organization ID (UUID) (optional) - xOrgID: xOrgID_example, - } satisfies RevealCredentialRequest; - - try { - const data = await api.revealCredential(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Credential ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization ID (UUID) | [Optional] [Defaults to `undefined`] | - -### Return type - -**{ [key: string]: any; }** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **403** | organization required | - | -| **404** | not found | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## updateCredential - -> DtoCredentialOut updateCredential(id, body, xOrgID) - -Update credential metadata and/or rotate secret - -### Example - -```ts -import { - Configuration, - CredentialsApi, -} from '@glueops/autoglue-sdk-go'; -import type { UpdateCredentialRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new CredentialsApi(config); - - const body = { - // string | Credential ID (UUID) - id: id_example, - // DtoUpdateCredentialRequest | Fields to update - body: ..., - // string | Organization ID (UUID) (optional) - xOrgID: xOrgID_example, - } satisfies UpdateCredentialRequest; - - try { - const data = await api.updateCredential(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Credential ID (UUID) | [Defaults to `undefined`] | -| **body** | [DtoUpdateCredentialRequest](DtoUpdateCredentialRequest.md) | Fields to update | | -| **xOrgID** | `string` | Organization ID (UUID) | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoCredentialOut**](DtoCredentialOut.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **403** | X-Org-ID required | - | -| **404** | not found | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/DtoAnnotationResponse.md b/ui/src/sdk/docs/DtoAnnotationResponse.md deleted file mode 100644 index ea2d020..0000000 --- a/ui/src/sdk/docs/DtoAnnotationResponse.md +++ /dev/null @@ -1,44 +0,0 @@ - -# DtoAnnotationResponse - - -## Properties - -Name | Type ------------- | ------------- -`created_at` | string -`id` | string -`key` | string -`organization_id` | string -`updated_at` | string -`value` | string - -## Example - -```typescript -import type { DtoAnnotationResponse } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "created_at": null, - "id": null, - "key": null, - "organization_id": null, - "updated_at": null, - "value": null, -} satisfies DtoAnnotationResponse - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoAnnotationResponse -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoAttachAnnotationsRequest.md b/ui/src/sdk/docs/DtoAttachAnnotationsRequest.md deleted file mode 100644 index eb56c1e..0000000 --- a/ui/src/sdk/docs/DtoAttachAnnotationsRequest.md +++ /dev/null @@ -1,34 +0,0 @@ - -# DtoAttachAnnotationsRequest - - -## Properties - -Name | Type ------------- | ------------- -`annotation_ids` | Array<string> - -## Example - -```typescript -import type { DtoAttachAnnotationsRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "annotation_ids": null, -} satisfies DtoAttachAnnotationsRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoAttachAnnotationsRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoAttachLabelsRequest.md b/ui/src/sdk/docs/DtoAttachLabelsRequest.md deleted file mode 100644 index 7949f3a..0000000 --- a/ui/src/sdk/docs/DtoAttachLabelsRequest.md +++ /dev/null @@ -1,34 +0,0 @@ - -# DtoAttachLabelsRequest - - -## Properties - -Name | Type ------------- | ------------- -`label_ids` | Array<string> - -## Example - -```typescript -import type { DtoAttachLabelsRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "label_ids": null, -} satisfies DtoAttachLabelsRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoAttachLabelsRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoAttachServersRequest.md b/ui/src/sdk/docs/DtoAttachServersRequest.md deleted file mode 100644 index f68dd1c..0000000 --- a/ui/src/sdk/docs/DtoAttachServersRequest.md +++ /dev/null @@ -1,34 +0,0 @@ - -# DtoAttachServersRequest - - -## Properties - -Name | Type ------------- | ------------- -`server_ids` | Array<string> - -## Example - -```typescript -import type { DtoAttachServersRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "server_ids": null, -} satisfies DtoAttachServersRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoAttachServersRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoAttachTaintsRequest.md b/ui/src/sdk/docs/DtoAttachTaintsRequest.md deleted file mode 100644 index bc4d768..0000000 --- a/ui/src/sdk/docs/DtoAttachTaintsRequest.md +++ /dev/null @@ -1,34 +0,0 @@ - -# DtoAttachTaintsRequest - - -## Properties - -Name | Type ------------- | ------------- -`taint_ids` | Array<string> - -## Example - -```typescript -import type { DtoAttachTaintsRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "taint_ids": null, -} satisfies DtoAttachTaintsRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoAttachTaintsRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoAuthStartResponse.md b/ui/src/sdk/docs/DtoAuthStartResponse.md deleted file mode 100644 index 77d141f..0000000 --- a/ui/src/sdk/docs/DtoAuthStartResponse.md +++ /dev/null @@ -1,34 +0,0 @@ - -# DtoAuthStartResponse - - -## Properties - -Name | Type ------------- | ------------- -`auth_url` | string - -## Example - -```typescript -import type { DtoAuthStartResponse } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "auth_url": https://accounts.google.com/o/oauth2/v2/auth?client_id=..., -} satisfies DtoAuthStartResponse - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoAuthStartResponse -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoClusterResponse.md b/ui/src/sdk/docs/DtoClusterResponse.md deleted file mode 100644 index 3075213..0000000 --- a/ui/src/sdk/docs/DtoClusterResponse.md +++ /dev/null @@ -1,60 +0,0 @@ - -# DtoClusterResponse - - -## Properties - -Name | Type ------------- | ------------- -`bastion_server` | [DtoServerResponse](DtoServerResponse.md) -`captain_domain` | string -`certificate_key` | string -`cluster_load_balancer` | string -`control_load_balancer` | string -`created_at` | string -`id` | string -`name` | string -`node_pools` | [Array<DtoNodePoolResponse>](DtoNodePoolResponse.md) -`provider` | string -`random_token` | string -`region` | string -`status` | string -`updated_at` | string - -## Example - -```typescript -import type { DtoClusterResponse } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "bastion_server": null, - "captain_domain": null, - "certificate_key": null, - "cluster_load_balancer": null, - "control_load_balancer": null, - "created_at": null, - "id": null, - "name": null, - "node_pools": null, - "provider": null, - "random_token": null, - "region": null, - "status": null, - "updated_at": null, -} satisfies DtoClusterResponse - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoClusterResponse -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoCreateAnnotationRequest.md b/ui/src/sdk/docs/DtoCreateAnnotationRequest.md deleted file mode 100644 index 96bf722..0000000 --- a/ui/src/sdk/docs/DtoCreateAnnotationRequest.md +++ /dev/null @@ -1,36 +0,0 @@ - -# DtoCreateAnnotationRequest - - -## Properties - -Name | Type ------------- | ------------- -`key` | string -`value` | string - -## Example - -```typescript -import type { DtoCreateAnnotationRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "key": null, - "value": null, -} satisfies DtoCreateAnnotationRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoCreateAnnotationRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoCreateClusterRequest.md b/ui/src/sdk/docs/DtoCreateClusterRequest.md deleted file mode 100644 index 0ddb16a..0000000 --- a/ui/src/sdk/docs/DtoCreateClusterRequest.md +++ /dev/null @@ -1,46 +0,0 @@ - -# DtoCreateClusterRequest - - -## Properties - -Name | Type ------------- | ------------- -`captain_domain` | string -`cluster_load_balancer` | string -`control_load_balancer` | string -`name` | string -`provider` | string -`region` | string -`status` | string - -## Example - -```typescript -import type { DtoCreateClusterRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "captain_domain": null, - "cluster_load_balancer": null, - "control_load_balancer": null, - "name": null, - "provider": null, - "region": null, - "status": null, -} satisfies DtoCreateClusterRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoCreateClusterRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoCreateCredentialRequest.md b/ui/src/sdk/docs/DtoCreateCredentialRequest.md deleted file mode 100644 index 83d2a7e..0000000 --- a/ui/src/sdk/docs/DtoCreateCredentialRequest.md +++ /dev/null @@ -1,52 +0,0 @@ - -# DtoCreateCredentialRequest - - -## Properties - -Name | Type ------------- | ------------- -`account_id` | string -`kind` | string -`name` | string -`provider` | string -`region` | string -`schema_version` | number -`scope` | object -`scope_kind` | string -`scope_version` | number -`secret` | object - -## Example - -```typescript -import type { DtoCreateCredentialRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "account_id": null, - "kind": null, - "name": null, - "provider": null, - "region": null, - "schema_version": null, - "scope": null, - "scope_kind": null, - "scope_version": null, - "secret": null, -} satisfies DtoCreateCredentialRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoCreateCredentialRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoCreateLabelRequest.md b/ui/src/sdk/docs/DtoCreateLabelRequest.md deleted file mode 100644 index 44702e5..0000000 --- a/ui/src/sdk/docs/DtoCreateLabelRequest.md +++ /dev/null @@ -1,36 +0,0 @@ - -# DtoCreateLabelRequest - - -## Properties - -Name | Type ------------- | ------------- -`key` | string -`value` | string - -## Example - -```typescript -import type { DtoCreateLabelRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "key": null, - "value": null, -} satisfies DtoCreateLabelRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoCreateLabelRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoCreateNodePoolRequest.md b/ui/src/sdk/docs/DtoCreateNodePoolRequest.md deleted file mode 100644 index 97a833c..0000000 --- a/ui/src/sdk/docs/DtoCreateNodePoolRequest.md +++ /dev/null @@ -1,36 +0,0 @@ - -# DtoCreateNodePoolRequest - - -## Properties - -Name | Type ------------- | ------------- -`name` | string -`role` | string - -## Example - -```typescript -import type { DtoCreateNodePoolRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "name": null, - "role": null, -} satisfies DtoCreateNodePoolRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoCreateNodePoolRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoCreateSSHRequest.md b/ui/src/sdk/docs/DtoCreateSSHRequest.md deleted file mode 100644 index 9702a3b..0000000 --- a/ui/src/sdk/docs/DtoCreateSSHRequest.md +++ /dev/null @@ -1,40 +0,0 @@ - -# DtoCreateSSHRequest - - -## Properties - -Name | Type ------------- | ------------- -`bits` | number -`comment` | string -`name` | string -`type` | string - -## Example - -```typescript -import type { DtoCreateSSHRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "bits": null, - "comment": deploy@autoglue, - "name": null, - "type": null, -} satisfies DtoCreateSSHRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoCreateSSHRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoCreateServerRequest.md b/ui/src/sdk/docs/DtoCreateServerRequest.md deleted file mode 100644 index c9f1b58..0000000 --- a/ui/src/sdk/docs/DtoCreateServerRequest.md +++ /dev/null @@ -1,46 +0,0 @@ - -# DtoCreateServerRequest - - -## Properties - -Name | Type ------------- | ------------- -`hostname` | string -`private_ip_address` | string -`public_ip_address` | string -`role` | string -`ssh_key_id` | string -`ssh_user` | string -`status` | string - -## Example - -```typescript -import type { DtoCreateServerRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "hostname": null, - "private_ip_address": null, - "public_ip_address": null, - "role": master|worker|bastion, - "ssh_key_id": null, - "ssh_user": null, - "status": pending|provisioning|ready|failed, -} satisfies DtoCreateServerRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoCreateServerRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoCreateTaintRequest.md b/ui/src/sdk/docs/DtoCreateTaintRequest.md deleted file mode 100644 index 4cde05a..0000000 --- a/ui/src/sdk/docs/DtoCreateTaintRequest.md +++ /dev/null @@ -1,38 +0,0 @@ - -# DtoCreateTaintRequest - - -## Properties - -Name | Type ------------- | ------------- -`effect` | string -`key` | string -`value` | string - -## Example - -```typescript -import type { DtoCreateTaintRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "effect": null, - "key": null, - "value": null, -} satisfies DtoCreateTaintRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoCreateTaintRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoCredentialOut.md b/ui/src/sdk/docs/DtoCredentialOut.md deleted file mode 100644 index 1c14a5a..0000000 --- a/ui/src/sdk/docs/DtoCredentialOut.md +++ /dev/null @@ -1,56 +0,0 @@ - -# DtoCredentialOut - - -## Properties - -Name | Type ------------- | ------------- -`account_id` | string -`created_at` | string -`id` | string -`kind` | string -`name` | string -`provider` | string -`region` | string -`schema_version` | number -`scope` | object -`scope_kind` | string -`scope_version` | number -`updated_at` | string - -## Example - -```typescript -import type { DtoCredentialOut } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "account_id": null, - "created_at": null, - "id": null, - "kind": null, - "name": null, - "provider": null, - "region": null, - "schema_version": null, - "scope": null, - "scope_kind": null, - "scope_version": null, - "updated_at": null, -} satisfies DtoCredentialOut - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoCredentialOut -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoEnqueueRequest.md b/ui/src/sdk/docs/DtoEnqueueRequest.md deleted file mode 100644 index c6d6f47..0000000 --- a/ui/src/sdk/docs/DtoEnqueueRequest.md +++ /dev/null @@ -1,40 +0,0 @@ - -# DtoEnqueueRequest - - -## Properties - -Name | Type ------------- | ------------- -`payload` | object -`queue` | string -`run_at` | string -`type` | string - -## Example - -```typescript -import type { DtoEnqueueRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "payload": null, - "queue": default, - "run_at": 2025-11-05T08:00:00Z, - "type": email.send, -} satisfies DtoEnqueueRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoEnqueueRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoJWK.md b/ui/src/sdk/docs/DtoJWK.md deleted file mode 100644 index 3d1faf7..0000000 --- a/ui/src/sdk/docs/DtoJWK.md +++ /dev/null @@ -1,46 +0,0 @@ - -# DtoJWK - - -## Properties - -Name | Type ------------- | ------------- -`alg` | string -`e` | string -`kid` | string -`kty` | string -`n` | string -`use` | string -`x` | string - -## Example - -```typescript -import type { DtoJWK } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "alg": RS256, - "e": AQAB, - "kid": 7c6f1d0a-7a98-4e6a-9dbf-6b1af4b9f345, - "kty": RSA, - "n": null, - "use": sig, - "x": null, -} satisfies DtoJWK - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoJWK -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoJWKS.md b/ui/src/sdk/docs/DtoJWKS.md deleted file mode 100644 index 6117f38..0000000 --- a/ui/src/sdk/docs/DtoJWKS.md +++ /dev/null @@ -1,34 +0,0 @@ - -# DtoJWKS - - -## Properties - -Name | Type ------------- | ------------- -`keys` | [Array<DtoJWK>](DtoJWK.md) - -## Example - -```typescript -import type { DtoJWKS } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "keys": null, -} satisfies DtoJWKS - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoJWKS -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoJob.md b/ui/src/sdk/docs/DtoJob.md deleted file mode 100644 index 1f8e60c..0000000 --- a/ui/src/sdk/docs/DtoJob.md +++ /dev/null @@ -1,54 +0,0 @@ - -# DtoJob - - -## Properties - -Name | Type ------------- | ------------- -`attempts` | number -`created_at` | string -`id` | string -`last_error` | string -`max_attempts` | number -`payload` | object -`queue` | string -`run_at` | string -`status` | [DtoJobStatus](DtoJobStatus.md) -`type` | string -`updated_at` | string - -## Example - -```typescript -import type { DtoJob } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "attempts": 0, - "created_at": 2025-11-04T09:30:00Z, - "id": 01HF7SZK8Z8WG1M3J7S2Z8M2N6, - "last_error": error message, - "max_attempts": 3, - "payload": null, - "queue": default, - "run_at": 2025-11-04T09:30:00Z, - "status": null, - "type": email.send, - "updated_at": 2025-11-04T09:30:00Z, -} satisfies DtoJob - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoJob -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoJobStatus.md b/ui/src/sdk/docs/DtoJobStatus.md deleted file mode 100644 index 3cb3e56..0000000 --- a/ui/src/sdk/docs/DtoJobStatus.md +++ /dev/null @@ -1,32 +0,0 @@ - -# DtoJobStatus - - -## Properties - -Name | Type ------------- | ------------- - -## Example - -```typescript -import type { DtoJobStatus } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { -} satisfies DtoJobStatus - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoJobStatus -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoLabelResponse.md b/ui/src/sdk/docs/DtoLabelResponse.md deleted file mode 100644 index 3d54003..0000000 --- a/ui/src/sdk/docs/DtoLabelResponse.md +++ /dev/null @@ -1,44 +0,0 @@ - -# DtoLabelResponse - - -## Properties - -Name | Type ------------- | ------------- -`created_at` | string -`id` | string -`key` | string -`organization_id` | string -`updated_at` | string -`value` | string - -## Example - -```typescript -import type { DtoLabelResponse } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "created_at": null, - "id": null, - "key": null, - "organization_id": null, - "updated_at": null, - "value": null, -} satisfies DtoLabelResponse - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoLabelResponse -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoLogoutRequest.md b/ui/src/sdk/docs/DtoLogoutRequest.md deleted file mode 100644 index 6f7afdf..0000000 --- a/ui/src/sdk/docs/DtoLogoutRequest.md +++ /dev/null @@ -1,34 +0,0 @@ - -# DtoLogoutRequest - - -## Properties - -Name | Type ------------- | ------------- -`refresh_token` | string - -## Example - -```typescript -import type { DtoLogoutRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "refresh_token": m0l9o8rT3t0V8d3eFf..., -} satisfies DtoLogoutRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoLogoutRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoNodePoolResponse.md b/ui/src/sdk/docs/DtoNodePoolResponse.md deleted file mode 100644 index 1fa77a6..0000000 --- a/ui/src/sdk/docs/DtoNodePoolResponse.md +++ /dev/null @@ -1,52 +0,0 @@ - -# DtoNodePoolResponse - - -## Properties - -Name | Type ------------- | ------------- -`annotations` | [Array<DtoAnnotationResponse>](DtoAnnotationResponse.md) -`created_at` | string -`id` | string -`labels` | [Array<DtoLabelResponse>](DtoLabelResponse.md) -`name` | string -`organization_id` | string -`role` | string -`servers` | [Array<DtoServerResponse>](DtoServerResponse.md) -`taints` | [Array<DtoTaintResponse>](DtoTaintResponse.md) -`updated_at` | string - -## Example - -```typescript -import type { DtoNodePoolResponse } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "annotations": null, - "created_at": null, - "id": null, - "labels": null, - "name": null, - "organization_id": null, - "role": null, - "servers": null, - "taints": null, - "updated_at": null, -} satisfies DtoNodePoolResponse - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoNodePoolResponse -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoPageJob.md b/ui/src/sdk/docs/DtoPageJob.md deleted file mode 100644 index 2d91e9d..0000000 --- a/ui/src/sdk/docs/DtoPageJob.md +++ /dev/null @@ -1,40 +0,0 @@ - -# DtoPageJob - - -## Properties - -Name | Type ------------- | ------------- -`items` | [Array<DtoJob>](DtoJob.md) -`page` | number -`page_size` | number -`total` | number - -## Example - -```typescript -import type { DtoPageJob } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "items": null, - "page": 1, - "page_size": 25, - "total": 120, -} satisfies DtoPageJob - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoPageJob -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoQueueInfo.md b/ui/src/sdk/docs/DtoQueueInfo.md deleted file mode 100644 index 568608f..0000000 --- a/ui/src/sdk/docs/DtoQueueInfo.md +++ /dev/null @@ -1,42 +0,0 @@ - -# DtoQueueInfo - - -## Properties - -Name | Type ------------- | ------------- -`failed` | number -`name` | string -`pending` | number -`running` | number -`scheduled` | number - -## Example - -```typescript -import type { DtoQueueInfo } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "failed": 5, - "name": default, - "pending": 42, - "running": 3, - "scheduled": 7, -} satisfies DtoQueueInfo - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoQueueInfo -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoRefreshRequest.md b/ui/src/sdk/docs/DtoRefreshRequest.md deleted file mode 100644 index da769f2..0000000 --- a/ui/src/sdk/docs/DtoRefreshRequest.md +++ /dev/null @@ -1,34 +0,0 @@ - -# DtoRefreshRequest - - -## Properties - -Name | Type ------------- | ------------- -`refresh_token` | string - -## Example - -```typescript -import type { DtoRefreshRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "refresh_token": m0l9o8rT3t0V8d3eFf..., -} satisfies DtoRefreshRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoRefreshRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoServerResponse.md b/ui/src/sdk/docs/DtoServerResponse.md deleted file mode 100644 index bfb7aaf..0000000 --- a/ui/src/sdk/docs/DtoServerResponse.md +++ /dev/null @@ -1,54 +0,0 @@ - -# DtoServerResponse - - -## Properties - -Name | Type ------------- | ------------- -`created_at` | string -`hostname` | string -`id` | string -`organization_id` | string -`private_ip_address` | string -`public_ip_address` | string -`role` | string -`ssh_key_id` | string -`ssh_user` | string -`status` | string -`updated_at` | string - -## Example - -```typescript -import type { DtoServerResponse } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "created_at": null, - "hostname": null, - "id": null, - "organization_id": null, - "private_ip_address": null, - "public_ip_address": null, - "role": master|worker|bastion, - "ssh_key_id": null, - "ssh_user": null, - "status": pending|provisioning|ready|failed, - "updated_at": null, -} satisfies DtoServerResponse - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoServerResponse -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoSshResponse.md b/ui/src/sdk/docs/DtoSshResponse.md deleted file mode 100644 index f4e30ff..0000000 --- a/ui/src/sdk/docs/DtoSshResponse.md +++ /dev/null @@ -1,46 +0,0 @@ - -# DtoSshResponse - - -## Properties - -Name | Type ------------- | ------------- -`created_at` | string -`fingerprint` | string -`id` | string -`name` | string -`organization_id` | string -`public_key` | string -`updated_at` | string - -## Example - -```typescript -import type { DtoSshResponse } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "created_at": null, - "fingerprint": null, - "id": null, - "name": null, - "organization_id": null, - "public_key": null, - "updated_at": null, -} satisfies DtoSshResponse - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoSshResponse -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoSshRevealResponse.md b/ui/src/sdk/docs/DtoSshRevealResponse.md deleted file mode 100644 index 3c79c3f..0000000 --- a/ui/src/sdk/docs/DtoSshRevealResponse.md +++ /dev/null @@ -1,48 +0,0 @@ - -# DtoSshRevealResponse - - -## Properties - -Name | Type ------------- | ------------- -`created_at` | string -`fingerprint` | string -`id` | string -`name` | string -`organization_id` | string -`private_key` | string -`public_key` | string -`updated_at` | string - -## Example - -```typescript -import type { DtoSshRevealResponse } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "created_at": null, - "fingerprint": null, - "id": null, - "name": null, - "organization_id": null, - "private_key": null, - "public_key": null, - "updated_at": null, -} satisfies DtoSshRevealResponse - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoSshRevealResponse -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoTaintResponse.md b/ui/src/sdk/docs/DtoTaintResponse.md deleted file mode 100644 index 6a0df23..0000000 --- a/ui/src/sdk/docs/DtoTaintResponse.md +++ /dev/null @@ -1,46 +0,0 @@ - -# DtoTaintResponse - - -## Properties - -Name | Type ------------- | ------------- -`created_at` | string -`effect` | string -`id` | string -`key` | string -`organization_id` | string -`updated_at` | string -`value` | string - -## Example - -```typescript -import type { DtoTaintResponse } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "created_at": null, - "effect": null, - "id": null, - "key": null, - "organization_id": null, - "updated_at": null, - "value": null, -} satisfies DtoTaintResponse - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoTaintResponse -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoTokenPair.md b/ui/src/sdk/docs/DtoTokenPair.md deleted file mode 100644 index ee8e207..0000000 --- a/ui/src/sdk/docs/DtoTokenPair.md +++ /dev/null @@ -1,40 +0,0 @@ - -# DtoTokenPair - - -## Properties - -Name | Type ------------- | ------------- -`access_token` | string -`expires_in` | number -`refresh_token` | string -`token_type` | string - -## Example - -```typescript -import type { DtoTokenPair } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "access_token": eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ij..., - "expires_in": 3600, - "refresh_token": m0l9o8rT3t0V8d3eFf...., - "token_type": Bearer, -} satisfies DtoTokenPair - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoTokenPair -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoUpdateAnnotationRequest.md b/ui/src/sdk/docs/DtoUpdateAnnotationRequest.md deleted file mode 100644 index 15554f5..0000000 --- a/ui/src/sdk/docs/DtoUpdateAnnotationRequest.md +++ /dev/null @@ -1,36 +0,0 @@ - -# DtoUpdateAnnotationRequest - - -## Properties - -Name | Type ------------- | ------------- -`key` | string -`value` | string - -## Example - -```typescript -import type { DtoUpdateAnnotationRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "key": null, - "value": null, -} satisfies DtoUpdateAnnotationRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoUpdateAnnotationRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoUpdateCredentialRequest.md b/ui/src/sdk/docs/DtoUpdateCredentialRequest.md deleted file mode 100644 index 0c486b8..0000000 --- a/ui/src/sdk/docs/DtoUpdateCredentialRequest.md +++ /dev/null @@ -1,46 +0,0 @@ - -# DtoUpdateCredentialRequest - - -## Properties - -Name | Type ------------- | ------------- -`account_id` | string -`name` | string -`region` | string -`scope` | object -`scope_kind` | string -`scope_version` | number -`secret` | object - -## Example - -```typescript -import type { DtoUpdateCredentialRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "account_id": null, - "name": null, - "region": null, - "scope": null, - "scope_kind": null, - "scope_version": null, - "secret": null, -} satisfies DtoUpdateCredentialRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoUpdateCredentialRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoUpdateLabelRequest.md b/ui/src/sdk/docs/DtoUpdateLabelRequest.md deleted file mode 100644 index ca89096..0000000 --- a/ui/src/sdk/docs/DtoUpdateLabelRequest.md +++ /dev/null @@ -1,36 +0,0 @@ - -# DtoUpdateLabelRequest - - -## Properties - -Name | Type ------------- | ------------- -`key` | string -`value` | string - -## Example - -```typescript -import type { DtoUpdateLabelRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "key": null, - "value": null, -} satisfies DtoUpdateLabelRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoUpdateLabelRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoUpdateNodePoolRequest.md b/ui/src/sdk/docs/DtoUpdateNodePoolRequest.md deleted file mode 100644 index 48ea60a..0000000 --- a/ui/src/sdk/docs/DtoUpdateNodePoolRequest.md +++ /dev/null @@ -1,36 +0,0 @@ - -# DtoUpdateNodePoolRequest - - -## Properties - -Name | Type ------------- | ------------- -`name` | string -`role` | string - -## Example - -```typescript -import type { DtoUpdateNodePoolRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "name": null, - "role": null, -} satisfies DtoUpdateNodePoolRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoUpdateNodePoolRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoUpdateServerRequest.md b/ui/src/sdk/docs/DtoUpdateServerRequest.md deleted file mode 100644 index b0d4890..0000000 --- a/ui/src/sdk/docs/DtoUpdateServerRequest.md +++ /dev/null @@ -1,46 +0,0 @@ - -# DtoUpdateServerRequest - - -## Properties - -Name | Type ------------- | ------------- -`hostname` | string -`private_ip_address` | string -`public_ip_address` | string -`role` | string -`ssh_key_id` | string -`ssh_user` | string -`status` | string - -## Example - -```typescript -import type { DtoUpdateServerRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "hostname": null, - "private_ip_address": null, - "public_ip_address": null, - "role": master|worker|bastion, - "ssh_key_id": null, - "ssh_user": null, - "status": pending|provisioning|ready|failed, -} satisfies DtoUpdateServerRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoUpdateServerRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/DtoUpdateTaintRequest.md b/ui/src/sdk/docs/DtoUpdateTaintRequest.md deleted file mode 100644 index 6ad893b..0000000 --- a/ui/src/sdk/docs/DtoUpdateTaintRequest.md +++ /dev/null @@ -1,38 +0,0 @@ - -# DtoUpdateTaintRequest - - -## Properties - -Name | Type ------------- | ------------- -`effect` | string -`key` | string -`value` | string - -## Example - -```typescript -import type { DtoUpdateTaintRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "effect": null, - "key": null, - "value": null, -} satisfies DtoUpdateTaintRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as DtoUpdateTaintRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/HandlersCreateUserKeyRequest.md b/ui/src/sdk/docs/HandlersCreateUserKeyRequest.md deleted file mode 100644 index d972b91..0000000 --- a/ui/src/sdk/docs/HandlersCreateUserKeyRequest.md +++ /dev/null @@ -1,36 +0,0 @@ - -# HandlersCreateUserKeyRequest - - -## Properties - -Name | Type ------------- | ------------- -`expires_in_hours` | number -`name` | string - -## Example - -```typescript -import type { HandlersCreateUserKeyRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "expires_in_hours": null, - "name": null, -} satisfies HandlersCreateUserKeyRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as HandlersCreateUserKeyRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/HandlersHealthStatus.md b/ui/src/sdk/docs/HandlersHealthStatus.md deleted file mode 100644 index d34fdf6..0000000 --- a/ui/src/sdk/docs/HandlersHealthStatus.md +++ /dev/null @@ -1,34 +0,0 @@ - -# HandlersHealthStatus - - -## Properties - -Name | Type ------------- | ------------- -`status` | string - -## Example - -```typescript -import type { HandlersHealthStatus } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "status": ok, -} satisfies HandlersHealthStatus - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as HandlersHealthStatus -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/HandlersMeResponse.md b/ui/src/sdk/docs/HandlersMeResponse.md deleted file mode 100644 index dd83b3c..0000000 --- a/ui/src/sdk/docs/HandlersMeResponse.md +++ /dev/null @@ -1,52 +0,0 @@ - -# HandlersMeResponse - - -## Properties - -Name | Type ------------- | ------------- -`avatar_url` | string -`created_at` | Date -`display_name` | string -`emails` | [Array<ModelsUserEmail>](ModelsUserEmail.md) -`id` | string -`is_admin` | boolean -`is_disabled` | boolean -`organizations` | [Array<ModelsOrganization>](ModelsOrganization.md) -`primary_email` | string -`updated_at` | Date - -## Example - -```typescript -import type { HandlersMeResponse } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "avatar_url": null, - "created_at": null, - "display_name": null, - "emails": null, - "id": null, - "is_admin": null, - "is_disabled": null, - "organizations": null, - "primary_email": null, - "updated_at": null, -} satisfies HandlersMeResponse - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as HandlersMeResponse -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/HandlersMemberOut.md b/ui/src/sdk/docs/HandlersMemberOut.md deleted file mode 100644 index cf85212..0000000 --- a/ui/src/sdk/docs/HandlersMemberOut.md +++ /dev/null @@ -1,38 +0,0 @@ - -# HandlersMemberOut - - -## Properties - -Name | Type ------------- | ------------- -`email` | string -`role` | string -`user_id` | string - -## Example - -```typescript -import type { HandlersMemberOut } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "email": null, - "role": null, - "user_id": null, -} satisfies HandlersMemberOut - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as HandlersMemberOut -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/HandlersMemberUpsertReq.md b/ui/src/sdk/docs/HandlersMemberUpsertReq.md deleted file mode 100644 index b93d8a3..0000000 --- a/ui/src/sdk/docs/HandlersMemberUpsertReq.md +++ /dev/null @@ -1,36 +0,0 @@ - -# HandlersMemberUpsertReq - - -## Properties - -Name | Type ------------- | ------------- -`role` | string -`user_id` | string - -## Example - -```typescript -import type { HandlersMemberUpsertReq } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "role": member, - "user_id": null, -} satisfies HandlersMemberUpsertReq - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as HandlersMemberUpsertReq -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/HandlersOrgCreateReq.md b/ui/src/sdk/docs/HandlersOrgCreateReq.md deleted file mode 100644 index c82c80f..0000000 --- a/ui/src/sdk/docs/HandlersOrgCreateReq.md +++ /dev/null @@ -1,36 +0,0 @@ - -# HandlersOrgCreateReq - - -## Properties - -Name | Type ------------- | ------------- -`domain` | string -`name` | string - -## Example - -```typescript -import type { HandlersOrgCreateReq } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "domain": acme.com, - "name": Acme Corp, -} satisfies HandlersOrgCreateReq - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as HandlersOrgCreateReq -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/HandlersOrgKeyCreateReq.md b/ui/src/sdk/docs/HandlersOrgKeyCreateReq.md deleted file mode 100644 index 4def697..0000000 --- a/ui/src/sdk/docs/HandlersOrgKeyCreateReq.md +++ /dev/null @@ -1,36 +0,0 @@ - -# HandlersOrgKeyCreateReq - - -## Properties - -Name | Type ------------- | ------------- -`expires_in_hours` | number -`name` | string - -## Example - -```typescript -import type { HandlersOrgKeyCreateReq } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "expires_in_hours": 720, - "name": automation-bot, -} satisfies HandlersOrgKeyCreateReq - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as HandlersOrgKeyCreateReq -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/HandlersOrgKeyCreateResp.md b/ui/src/sdk/docs/HandlersOrgKeyCreateResp.md deleted file mode 100644 index 987ff09..0000000 --- a/ui/src/sdk/docs/HandlersOrgKeyCreateResp.md +++ /dev/null @@ -1,46 +0,0 @@ - -# HandlersOrgKeyCreateResp - - -## Properties - -Name | Type ------------- | ------------- -`created_at` | string -`expires_at` | string -`id` | string -`name` | string -`org_key` | string -`org_secret` | string -`scope` | string - -## Example - -```typescript -import type { HandlersOrgKeyCreateResp } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "created_at": null, - "expires_at": null, - "id": null, - "name": null, - "org_key": null, - "org_secret": null, - "scope": null, -} satisfies HandlersOrgKeyCreateResp - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as HandlersOrgKeyCreateResp -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/HandlersOrgUpdateReq.md b/ui/src/sdk/docs/HandlersOrgUpdateReq.md deleted file mode 100644 index 1d11e01..0000000 --- a/ui/src/sdk/docs/HandlersOrgUpdateReq.md +++ /dev/null @@ -1,36 +0,0 @@ - -# HandlersOrgUpdateReq - - -## Properties - -Name | Type ------------- | ------------- -`domain` | string -`name` | string - -## Example - -```typescript -import type { HandlersOrgUpdateReq } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "domain": null, - "name": null, -} satisfies HandlersOrgUpdateReq - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as HandlersOrgUpdateReq -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/HandlersUpdateMeRequest.md b/ui/src/sdk/docs/HandlersUpdateMeRequest.md deleted file mode 100644 index b9744b5..0000000 --- a/ui/src/sdk/docs/HandlersUpdateMeRequest.md +++ /dev/null @@ -1,34 +0,0 @@ - -# HandlersUpdateMeRequest - - -## Properties - -Name | Type ------------- | ------------- -`display_name` | string - -## Example - -```typescript -import type { HandlersUpdateMeRequest } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "display_name": null, -} satisfies HandlersUpdateMeRequest - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as HandlersUpdateMeRequest -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/HandlersUserAPIKeyOut.md b/ui/src/sdk/docs/HandlersUserAPIKeyOut.md deleted file mode 100644 index 7dce7d3..0000000 --- a/ui/src/sdk/docs/HandlersUserAPIKeyOut.md +++ /dev/null @@ -1,46 +0,0 @@ - -# HandlersUserAPIKeyOut - - -## Properties - -Name | Type ------------- | ------------- -`created_at` | string -`expires_at` | string -`id` | string -`last_used_at` | string -`name` | string -`plain` | string -`scope` | string - -## Example - -```typescript -import type { HandlersUserAPIKeyOut } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "created_at": null, - "expires_at": null, - "id": null, - "last_used_at": null, - "name": null, - "plain": null, - "scope": null, -} satisfies HandlersUserAPIKeyOut - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as HandlersUserAPIKeyOut -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/HandlersVersionResponse.md b/ui/src/sdk/docs/HandlersVersionResponse.md deleted file mode 100644 index 1c0665d..0000000 --- a/ui/src/sdk/docs/HandlersVersionResponse.md +++ /dev/null @@ -1,54 +0,0 @@ - -# HandlersVersionResponse - - -## Properties - -Name | Type ------------- | ------------- -`built` | string -`builtBy` | string -`commit` | string -`commitTime` | string -`go` | string -`goArch` | string -`goOS` | string -`modified` | boolean -`revision` | string -`vcs` | string -`version` | string - -## Example - -```typescript -import type { HandlersVersionResponse } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "built": 2025-11-08T12:34:56Z, - "builtBy": ci, - "commit": a1b2c3d, - "commitTime": 2025-11-08T12:31:00Z, - "go": go1.23.3, - "goArch": amd64, - "goOS": linux, - "modified": false, - "revision": a1b2c3d4e5f6abcdef, - "vcs": git, - "version": 1.4.2, -} satisfies HandlersVersionResponse - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as HandlersVersionResponse -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/HealthApi.md b/ui/src/sdk/docs/HealthApi.md deleted file mode 100644 index af32193..0000000 --- a/ui/src/sdk/docs/HealthApi.md +++ /dev/null @@ -1,68 +0,0 @@ -# HealthApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**healthCheckOperationId**](HealthApi.md#healthcheckoperationid) | **GET** /healthz | Basic health check | - - - -## healthCheckOperationId - -> HandlersHealthStatus healthCheckOperationId() - -Basic health check - -Returns 200 OK when the service is up - -### Example - -```ts -import { - Configuration, - HealthApi, -} from '@glueops/autoglue-sdk-go'; -import type { HealthCheckOperationIdRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const api = new HealthApi(); - - try { - const data = await api.healthCheckOperationId(); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**HandlersHealthStatus**](HandlersHealthStatus.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/LabelsApi.md b/ui/src/sdk/docs/LabelsApi.md deleted file mode 100644 index 4e71362..0000000 --- a/ui/src/sdk/docs/LabelsApi.md +++ /dev/null @@ -1,433 +0,0 @@ -# LabelsApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**createLabel**](LabelsApi.md#createlabel) | **POST** /labels | Create label (org scoped) | -| [**deleteLabel**](LabelsApi.md#deletelabel) | **DELETE** /labels/{id} | Delete label (org scoped) | -| [**getLabel**](LabelsApi.md#getlabel) | **GET** /labels/{id} | Get label by ID (org scoped) | -| [**listLabels**](LabelsApi.md#listlabels) | **GET** /labels | List node labels (org scoped) | -| [**updateLabel**](LabelsApi.md#updatelabel) | **PATCH** /labels/{id} | Update label (org scoped) | - - - -## createLabel - -> DtoLabelResponse createLabel(body, xOrgID) - -Create label (org scoped) - -Creates a label. - -### Example - -```ts -import { - Configuration, - LabelsApi, -} from '@glueops/autoglue-sdk-go'; -import type { CreateLabelRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new LabelsApi(config); - - const body = { - // DtoCreateLabelRequest | Label payload - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies CreateLabelRequest; - - try { - const data = await api.createLabel(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **body** | [DtoCreateLabelRequest](DtoCreateLabelRequest.md) | Label payload | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoLabelResponse**](DtoLabelResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **201** | Created | - | -| **400** | invalid json / missing fields / invalid node_pool_ids | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | create failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## deleteLabel - -> string deleteLabel(id, xOrgID) - -Delete label (org scoped) - -Permanently deletes the label. - -### Example - -```ts -import { - Configuration, - LabelsApi, -} from '@glueops/autoglue-sdk-go'; -import type { DeleteLabelRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new LabelsApi(config); - - const body = { - // string | Label ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies DeleteLabelRequest; - - try { - const data = await api.deleteLabel(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Label ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | delete failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## getLabel - -> DtoLabelResponse getLabel(id, xOrgID) - -Get label by ID (org scoped) - -Returns one label. - -### Example - -```ts -import { - Configuration, - LabelsApi, -} from '@glueops/autoglue-sdk-go'; -import type { GetLabelRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new LabelsApi(config); - - const body = { - // string | Label ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies GetLabelRequest; - - try { - const data = await api.getLabel(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Label ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoLabelResponse**](DtoLabelResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | fetch failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listLabels - -> Array<DtoLabelResponse> listLabels(xOrgID, key, value, q) - -List node labels (org scoped) - -Returns node labels for the organization in X-Org-ID. Filters: `key`, `value`, and `q` (key contains). Add `include=node_pools` to include linked node groups. - -### Example - -```ts -import { - Configuration, - LabelsApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListLabelsRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new LabelsApi(config); - - const body = { - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - // string | Exact key (optional) - key: key_example, - // string | Exact value (optional) - value: value_example, - // string | Key contains (case-insensitive) (optional) - q: q_example, - } satisfies ListLabelsRequest; - - try { - const data = await api.listLabels(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | -| **key** | `string` | Exact key | [Optional] [Defaults to `undefined`] | -| **value** | `string` | Exact value | [Optional] [Defaults to `undefined`] | -| **q** | `string` | Key contains (case-insensitive) | [Optional] [Defaults to `undefined`] | - -### Return type - -[**Array<DtoLabelResponse>**](DtoLabelResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | failed to list node taints | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## updateLabel - -> DtoLabelResponse updateLabel(id, body, xOrgID) - -Update label (org scoped) - -Partially update label fields. - -### Example - -```ts -import { - Configuration, - LabelsApi, -} from '@glueops/autoglue-sdk-go'; -import type { UpdateLabelRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new LabelsApi(config); - - const body = { - // string | Label ID (UUID) - id: id_example, - // DtoUpdateLabelRequest | Fields to update - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies UpdateLabelRequest; - - try { - const data = await api.updateLabel(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Label ID (UUID) | [Defaults to `undefined`] | -| **body** | [DtoUpdateLabelRequest](DtoUpdateLabelRequest.md) | Fields to update | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoLabelResponse**](DtoLabelResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid id / invalid json | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | update failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/MeAPIKeysApi.md b/ui/src/sdk/docs/MeAPIKeysApi.md deleted file mode 100644 index 42e26c7..0000000 --- a/ui/src/sdk/docs/MeAPIKeysApi.md +++ /dev/null @@ -1,216 +0,0 @@ -# MeAPIKeysApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**createUserAPIKey**](MeAPIKeysApi.md#createuserapikey) | **POST** /me/api-keys | Create a new user API key | -| [**deleteUserAPIKey**](MeAPIKeysApi.md#deleteuserapikey) | **DELETE** /me/api-keys/{id} | Delete a user API key | -| [**listUserAPIKeys**](MeAPIKeysApi.md#listuserapikeys) | **GET** /me/api-keys | List my API keys | - - - -## createUserAPIKey - -> HandlersUserAPIKeyOut createUserAPIKey(body) - -Create a new user API key - -Returns the plaintext key once. Store it securely on the client side. - -### Example - -```ts -import { - Configuration, - MeAPIKeysApi, -} from '@glueops/autoglue-sdk-go'; -import type { CreateUserAPIKeyRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: ApiKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new MeAPIKeysApi(config); - - const body = { - // HandlersCreateUserKeyRequest | Key options - body: ..., - } satisfies CreateUserAPIKeyRequest; - - try { - const data = await api.createUserAPIKey(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **body** | [HandlersCreateUserKeyRequest](HandlersCreateUserKeyRequest.md) | Key options | | - -### Return type - -[**HandlersUserAPIKeyOut**](HandlersUserAPIKeyOut.md) - -### Authorization - -[ApiKeyAuth](../README.md#ApiKeyAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **201** | Created | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## deleteUserAPIKey - -> deleteUserAPIKey(id) - -Delete a user API key - -### Example - -```ts -import { - Configuration, - MeAPIKeysApi, -} from '@glueops/autoglue-sdk-go'; -import type { DeleteUserAPIKeyRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new MeAPIKeysApi(config); - - const body = { - // string | Key ID (UUID) - id: id_example, - } satisfies DeleteUserAPIKeyRequest; - - try { - const data = await api.deleteUserAPIKey(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Key ID (UUID) | [Defaults to `undefined`] | - -### Return type - -`void` (Empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: Not defined - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listUserAPIKeys - -> Array<HandlersUserAPIKeyOut> listUserAPIKeys() - -List my API keys - -### Example - -```ts -import { - Configuration, - MeAPIKeysApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListUserAPIKeysRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: ApiKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new MeAPIKeysApi(config); - - try { - const data = await api.listUserAPIKeys(); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**Array<HandlersUserAPIKeyOut>**](HandlersUserAPIKeyOut.md) - -### Authorization - -[ApiKeyAuth](../README.md#ApiKeyAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/MeApi.md b/ui/src/sdk/docs/MeApi.md deleted file mode 100644 index e21cfaf..0000000 --- a/ui/src/sdk/docs/MeApi.md +++ /dev/null @@ -1,144 +0,0 @@ -# MeApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**getMe**](MeApi.md#getme) | **GET** /me | Get current user profile | -| [**updateMe**](MeApi.md#updateme) | **PATCH** /me | Update current user profile | - - - -## getMe - -> HandlersMeResponse getMe() - -Get current user profile - -### Example - -```ts -import { - Configuration, - MeApi, -} from '@glueops/autoglue-sdk-go'; -import type { GetMeRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: ApiKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new MeApi(config); - - try { - const data = await api.getMe(); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**HandlersMeResponse**](HandlersMeResponse.md) - -### Authorization - -[ApiKeyAuth](../README.md#ApiKeyAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## updateMe - -> ModelsUser updateMe(body) - -Update current user profile - -### Example - -```ts -import { - Configuration, - MeApi, -} from '@glueops/autoglue-sdk-go'; -import type { UpdateMeRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: ApiKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new MeApi(config); - - const body = { - // HandlersUpdateMeRequest | Patch profile - body: ..., - } satisfies UpdateMeRequest; - - try { - const data = await api.updateMe(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **body** | [HandlersUpdateMeRequest](HandlersUpdateMeRequest.md) | Patch profile | | - -### Return type - -[**ModelsUser**](ModelsUser.md) - -### Authorization - -[ApiKeyAuth](../README.md#ApiKeyAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/MetaApi.md b/ui/src/sdk/docs/MetaApi.md deleted file mode 100644 index d858859..0000000 --- a/ui/src/sdk/docs/MetaApi.md +++ /dev/null @@ -1,68 +0,0 @@ -# MetaApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**versionOperationId**](MetaApi.md#versionoperationid) | **GET** /version | Service version information | - - - -## versionOperationId - -> HandlersVersionResponse versionOperationId() - -Service version information - -Returns build/runtime metadata for the running service. - -### Example - -```ts -import { - Configuration, - MetaApi, -} from '@glueops/autoglue-sdk-go'; -import type { VersionOperationIdRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const api = new MetaApi(); - - try { - const data = await api.versionOperationId(); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**HandlersVersionResponse**](HandlersVersionResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/ModelsAPIKey.md b/ui/src/sdk/docs/ModelsAPIKey.md deleted file mode 100644 index f30ea12..0000000 --- a/ui/src/sdk/docs/ModelsAPIKey.md +++ /dev/null @@ -1,54 +0,0 @@ - -# ModelsAPIKey - - -## Properties - -Name | Type ------------- | ------------- -`created_at` | Date -`expires_at` | Date -`id` | string -`last_used_at` | Date -`name` | string -`org_id` | string -`prefix` | string -`revoked` | boolean -`scope` | string -`updated_at` | Date -`user_id` | string - -## Example - -```typescript -import type { ModelsAPIKey } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "created_at": null, - "expires_at": null, - "id": null, - "last_used_at": null, - "name": null, - "org_id": null, - "prefix": null, - "revoked": null, - "scope": null, - "updated_at": null, - "user_id": null, -} satisfies ModelsAPIKey - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as ModelsAPIKey -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/ModelsOrganization.md b/ui/src/sdk/docs/ModelsOrganization.md deleted file mode 100644 index 7b41ce0..0000000 --- a/ui/src/sdk/docs/ModelsOrganization.md +++ /dev/null @@ -1,42 +0,0 @@ - -# ModelsOrganization - - -## Properties - -Name | Type ------------- | ------------- -`created_at` | Date -`domain` | string -`id` | string -`name` | string -`updated_at` | Date - -## Example - -```typescript -import type { ModelsOrganization } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "created_at": null, - "domain": null, - "id": null, - "name": null, - "updated_at": null, -} satisfies ModelsOrganization - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as ModelsOrganization -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/ModelsUser.md b/ui/src/sdk/docs/ModelsUser.md deleted file mode 100644 index 6aa5236..0000000 --- a/ui/src/sdk/docs/ModelsUser.md +++ /dev/null @@ -1,48 +0,0 @@ - -# ModelsUser - - -## Properties - -Name | Type ------------- | ------------- -`avatar_url` | string -`created_at` | Date -`display_name` | string -`id` | string -`is_admin` | boolean -`is_disabled` | boolean -`primary_email` | string -`updated_at` | Date - -## Example - -```typescript -import type { ModelsUser } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "avatar_url": null, - "created_at": null, - "display_name": null, - "id": null, - "is_admin": null, - "is_disabled": null, - "primary_email": null, - "updated_at": null, -} satisfies ModelsUser - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as ModelsUser -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/ModelsUserEmail.md b/ui/src/sdk/docs/ModelsUserEmail.md deleted file mode 100644 index a010d9d..0000000 --- a/ui/src/sdk/docs/ModelsUserEmail.md +++ /dev/null @@ -1,48 +0,0 @@ - -# ModelsUserEmail - - -## Properties - -Name | Type ------------- | ------------- -`created_at` | Date -`email` | string -`id` | string -`is_primary` | boolean -`is_verified` | boolean -`updated_at` | Date -`user` | [ModelsUser](ModelsUser.md) -`user_id` | string - -## Example - -```typescript -import type { ModelsUserEmail } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "created_at": null, - "email": null, - "id": null, - "is_primary": null, - "is_verified": null, - "updated_at": null, - "user": null, - "user_id": null, -} satisfies ModelsUserEmail - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as ModelsUserEmail -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/docs/NodePoolsApi.md b/ui/src/sdk/docs/NodePoolsApi.md deleted file mode 100644 index fa21f3a..0000000 --- a/ui/src/sdk/docs/NodePoolsApi.md +++ /dev/null @@ -1,1435 +0,0 @@ -# NodePoolsApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**attachNodePoolAnnotations**](NodePoolsApi.md#attachnodepoolannotations) | **POST** /node-pools/{id}/annotations | Attach annotation to a node pool (org scoped) | -| [**attachNodePoolLabels**](NodePoolsApi.md#attachnodepoollabels) | **POST** /node-pools/{id}/labels | Attach labels to a node pool (org scoped) | -| [**attachNodePoolServers**](NodePoolsApi.md#attachnodepoolservers) | **POST** /node-pools/{id}/servers | Attach servers to a node pool (org scoped) | -| [**attachNodePoolTaints**](NodePoolsApi.md#attachnodepooltaints) | **POST** /node-pools/{id}/taints | Attach taints to a node pool (org scoped) | -| [**createNodePool**](NodePoolsApi.md#createnodepool) | **POST** /node-pools | Create node pool (org scoped) | -| [**deleteNodePool**](NodePoolsApi.md#deletenodepool) | **DELETE** /node-pools/{id} | Delete node pool (org scoped) | -| [**detachNodePoolAnnotation**](NodePoolsApi.md#detachnodepoolannotation) | **DELETE** /node-pools/{id}/annotations/{annotationId} | Detach one annotation from a node pool (org scoped) | -| [**detachNodePoolLabel**](NodePoolsApi.md#detachnodepoollabel) | **DELETE** /node-pools/{id}/labels/{labelId} | Detach one label from a node pool (org scoped) | -| [**detachNodePoolServer**](NodePoolsApi.md#detachnodepoolserver) | **DELETE** /node-pools/{id}/servers/{serverId} | Detach one server from a node pool (org scoped) | -| [**detachNodePoolTaint**](NodePoolsApi.md#detachnodepooltaint) | **DELETE** /node-pools/{id}/taints/{taintId} | Detach one taint from a node pool (org scoped) | -| [**getNodePool**](NodePoolsApi.md#getnodepool) | **GET** /node-pools/{id} | Get node pool by ID (org scoped) | -| [**listNodePoolAnnotations**](NodePoolsApi.md#listnodepoolannotations) | **GET** /node-pools/{id}/annotations | List annotations attached to a node pool (org scoped) | -| [**listNodePoolLabels**](NodePoolsApi.md#listnodepoollabels) | **GET** /node-pools/{id}/labels | List labels attached to a node pool (org scoped) | -| [**listNodePoolServers**](NodePoolsApi.md#listnodepoolservers) | **GET** /node-pools/{id}/servers | List servers attached to a node pool (org scoped) | -| [**listNodePoolTaints**](NodePoolsApi.md#listnodepooltaints) | **GET** /node-pools/{id}/taints | List taints attached to a node pool (org scoped) | -| [**listNodePools**](NodePoolsApi.md#listnodepools) | **GET** /node-pools | List node pools (org scoped) | -| [**updateNodePool**](NodePoolsApi.md#updatenodepool) | **PATCH** /node-pools/{id} | Update node pool (org scoped) | - - - -## attachNodePoolAnnotations - -> string attachNodePoolAnnotations(id, body, xOrgID) - -Attach annotation to a node pool (org scoped) - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { AttachNodePoolAnnotationsRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Node Group ID (UUID) - id: id_example, - // DtoAttachAnnotationsRequest | Annotation IDs to attach - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies AttachNodePoolAnnotationsRequest; - - try { - const data = await api.attachNodePoolAnnotations(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Group ID (UUID) | [Defaults to `undefined`] | -| **body** | [DtoAttachAnnotationsRequest](DtoAttachAnnotationsRequest.md) | Annotation IDs to attach | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **400** | invalid id / invalid server_ids | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | attach failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## attachNodePoolLabels - -> string attachNodePoolLabels(id, body, xOrgID) - -Attach labels to a node pool (org scoped) - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { AttachNodePoolLabelsRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Node Pool ID (UUID) - id: id_example, - // DtoAttachLabelsRequest | Label IDs to attach - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies AttachNodePoolLabelsRequest; - - try { - const data = await api.attachNodePoolLabels(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Pool ID (UUID) | [Defaults to `undefined`] | -| **body** | [DtoAttachLabelsRequest](DtoAttachLabelsRequest.md) | Label IDs to attach | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **400** | invalid id / invalid server_ids | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | attach failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## attachNodePoolServers - -> string attachNodePoolServers(id, body, xOrgID) - -Attach servers to a node pool (org scoped) - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { AttachNodePoolServersRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Node Pool ID (UUID) - id: id_example, - // DtoAttachServersRequest | Server IDs to attach - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies AttachNodePoolServersRequest; - - try { - const data = await api.attachNodePoolServers(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Pool ID (UUID) | [Defaults to `undefined`] | -| **body** | [DtoAttachServersRequest](DtoAttachServersRequest.md) | Server IDs to attach | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **400** | invalid id / invalid server_ids | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | attach failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## attachNodePoolTaints - -> string attachNodePoolTaints(id, body, xOrgID) - -Attach taints to a node pool (org scoped) - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { AttachNodePoolTaintsRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Node Pool ID (UUID) - id: id_example, - // DtoAttachTaintsRequest | Taint IDs to attach - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies AttachNodePoolTaintsRequest; - - try { - const data = await api.attachNodePoolTaints(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Pool ID (UUID) | [Defaults to `undefined`] | -| **body** | [DtoAttachTaintsRequest](DtoAttachTaintsRequest.md) | Taint IDs to attach | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **400** | invalid id / invalid taint_ids | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | attach failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## createNodePool - -> DtoNodePoolResponse createNodePool(body, xOrgID) - -Create node pool (org scoped) - -Creates a node pool. Optionally attach initial servers. - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { CreateNodePoolRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // DtoCreateNodePoolRequest | NodePool payload - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies CreateNodePoolRequest; - - try { - const data = await api.createNodePool(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **body** | [DtoCreateNodePoolRequest](DtoCreateNodePoolRequest.md) | NodePool payload | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoNodePoolResponse**](DtoNodePoolResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **201** | Created | - | -| **400** | invalid json / missing fields / invalid server_ids | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | create failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## deleteNodePool - -> string deleteNodePool(id, xOrgID) - -Delete node pool (org scoped) - -Permanently deletes the node pool. - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { DeleteNodePoolRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Node Pool ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies DeleteNodePoolRequest; - - try { - const data = await api.deleteNodePool(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Pool ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | delete failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## detachNodePoolAnnotation - -> string detachNodePoolAnnotation(id, annotationId, xOrgID) - -Detach one annotation from a node pool (org scoped) - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { DetachNodePoolAnnotationRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Node Pool ID (UUID) - id: id_example, - // string | Annotation ID (UUID) - annotationId: annotationId_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies DetachNodePoolAnnotationRequest; - - try { - const data = await api.detachNodePoolAnnotation(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Pool ID (UUID) | [Defaults to `undefined`] | -| **annotationId** | `string` | Annotation ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | detach failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## detachNodePoolLabel - -> string detachNodePoolLabel(id, labelId, xOrgID) - -Detach one label from a node pool (org scoped) - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { DetachNodePoolLabelRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Node Pool ID (UUID) - id: id_example, - // string | Label ID (UUID) - labelId: labelId_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies DetachNodePoolLabelRequest; - - try { - const data = await api.detachNodePoolLabel(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Pool ID (UUID) | [Defaults to `undefined`] | -| **labelId** | `string` | Label ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | detach failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## detachNodePoolServer - -> string detachNodePoolServer(id, serverId, xOrgID) - -Detach one server from a node pool (org scoped) - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { DetachNodePoolServerRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Node Pool ID (UUID) - id: id_example, - // string | Server ID (UUID) - serverId: serverId_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies DetachNodePoolServerRequest; - - try { - const data = await api.detachNodePoolServer(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Pool ID (UUID) | [Defaults to `undefined`] | -| **serverId** | `string` | Server ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | detach failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## detachNodePoolTaint - -> string detachNodePoolTaint(id, taintId, xOrgID) - -Detach one taint from a node pool (org scoped) - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { DetachNodePoolTaintRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Node Pool ID (UUID) - id: id_example, - // string | Taint ID (UUID) - taintId: taintId_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies DetachNodePoolTaintRequest; - - try { - const data = await api.detachNodePoolTaint(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Pool ID (UUID) | [Defaults to `undefined`] | -| **taintId** | `string` | Taint ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | detach failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## getNodePool - -> DtoNodePoolResponse getNodePool(id, xOrgID) - -Get node pool by ID (org scoped) - -Returns one node pool. Add `include=servers` to include servers. - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { GetNodePoolRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Node Pool ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies GetNodePoolRequest; - - try { - const data = await api.getNodePool(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Pool ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoNodePoolResponse**](DtoNodePoolResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | fetch failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listNodePoolAnnotations - -> Array<DtoAnnotationResponse> listNodePoolAnnotations(id, xOrgID) - -List annotations attached to a node pool (org scoped) - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListNodePoolAnnotationsRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Node Pool ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies ListNodePoolAnnotationsRequest; - - try { - const data = await api.listNodePoolAnnotations(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Pool ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**Array<DtoAnnotationResponse>**](DtoAnnotationResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | fetch failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listNodePoolLabels - -> Array<DtoLabelResponse> listNodePoolLabels(id, xOrgID) - -List labels attached to a node pool (org scoped) - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListNodePoolLabelsRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Label Pool ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies ListNodePoolLabelsRequest; - - try { - const data = await api.listNodePoolLabels(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Label Pool ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**Array<DtoLabelResponse>**](DtoLabelResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | fetch failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listNodePoolServers - -> Array<DtoServerResponse> listNodePoolServers(id, xOrgID) - -List servers attached to a node pool (org scoped) - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListNodePoolServersRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Node Pool ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies ListNodePoolServersRequest; - - try { - const data = await api.listNodePoolServers(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Pool ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**Array<DtoServerResponse>**](DtoServerResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | fetch failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listNodePoolTaints - -> Array<DtoTaintResponse> listNodePoolTaints(id, xOrgID) - -List taints attached to a node pool (org scoped) - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListNodePoolTaintsRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Node Pool ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies ListNodePoolTaintsRequest; - - try { - const data = await api.listNodePoolTaints(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Pool ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**Array<DtoTaintResponse>**](DtoTaintResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | fetch failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listNodePools - -> Array<DtoNodePoolResponse> listNodePools(xOrgID, q) - -List node pools (org scoped) - -Returns node pools for the organization in X-Org-ID. - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListNodePoolsRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - // string | Name contains (case-insensitive) (optional) - q: q_example, - } satisfies ListNodePoolsRequest; - - try { - const data = await api.listNodePools(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | -| **q** | `string` | Name contains (case-insensitive) | [Optional] [Defaults to `undefined`] | - -### Return type - -[**Array<DtoNodePoolResponse>**](DtoNodePoolResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | failed to list node pools | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## updateNodePool - -> DtoNodePoolResponse updateNodePool(id, body, xOrgID) - -Update node pool (org scoped) - -Partially update node pool fields. - -### Example - -```ts -import { - Configuration, - NodePoolsApi, -} from '@glueops/autoglue-sdk-go'; -import type { UpdateNodePoolRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new NodePoolsApi(config); - - const body = { - // string | Node Pool ID (UUID) - id: id_example, - // DtoUpdateNodePoolRequest | Fields to update - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies UpdateNodePoolRequest; - - try { - const data = await api.updateNodePool(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Pool ID (UUID) | [Defaults to `undefined`] | -| **body** | [DtoUpdateNodePoolRequest](DtoUpdateNodePoolRequest.md) | Fields to update | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoNodePoolResponse**](DtoNodePoolResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid id / invalid json | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | update failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/OrgsApi.md b/ui/src/sdk/docs/OrgsApi.md deleted file mode 100644 index 5ae52d3..0000000 --- a/ui/src/sdk/docs/OrgsApi.md +++ /dev/null @@ -1,801 +0,0 @@ -# OrgsApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**addOrUpdateMember**](OrgsApi.md#addorupdatemember) | **POST** /orgs/{id}/members | Add or update a member (owner/admin) | -| [**createOrg**](OrgsApi.md#createorg) | **POST** /orgs | Create organization | -| [**createOrgKey**](OrgsApi.md#createorgkey) | **POST** /orgs/{id}/api-keys | Create org key/secret pair (owner/admin) | -| [**deleteOrg**](OrgsApi.md#deleteorg) | **DELETE** /orgs/{id} | Delete organization (owner) | -| [**deleteOrgKey**](OrgsApi.md#deleteorgkey) | **DELETE** /orgs/{id}/api-keys/{key_id} | Delete org key (owner/admin) | -| [**getOrg**](OrgsApi.md#getorg) | **GET** /orgs/{id} | Get organization | -| [**listMembers**](OrgsApi.md#listmembers) | **GET** /orgs/{id}/members | List members in org | -| [**listMyOrgs**](OrgsApi.md#listmyorgs) | **GET** /orgs | List organizations I belong to | -| [**listOrgKeys**](OrgsApi.md#listorgkeys) | **GET** /orgs/{id}/api-keys | List org-scoped API keys (no secrets) | -| [**removeMember**](OrgsApi.md#removemember) | **DELETE** /orgs/{id}/members/{user_id} | Remove a member (owner/admin) | -| [**updateOrg**](OrgsApi.md#updateorg) | **PATCH** /orgs/{id} | Update organization (owner/admin) | - - - -## addOrUpdateMember - -> HandlersMemberOut addOrUpdateMember(id, body) - -Add or update a member (owner/admin) - -### Example - -```ts -import { - Configuration, - OrgsApi, -} from '@glueops/autoglue-sdk-go'; -import type { AddOrUpdateMemberRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new OrgsApi(config); - - const body = { - // string | Org ID (UUID) - id: id_example, - // HandlersMemberUpsertReq | User & role - body: ..., - } satisfies AddOrUpdateMemberRequest; - - try { - const data = await api.addOrUpdateMember(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Org ID (UUID) | [Defaults to `undefined`] | -| **body** | [HandlersMemberUpsertReq](HandlersMemberUpsertReq.md) | User & role | | - -### Return type - -[**HandlersMemberOut**](HandlersMemberOut.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## createOrg - -> ModelsOrganization createOrg(body) - -Create organization - -### Example - -```ts -import { - Configuration, - OrgsApi, -} from '@glueops/autoglue-sdk-go'; -import type { CreateOrgRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new OrgsApi(config); - - const body = { - // HandlersOrgCreateReq | Org payload - body: ..., - } satisfies CreateOrgRequest; - - try { - const data = await api.createOrg(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **body** | [HandlersOrgCreateReq](HandlersOrgCreateReq.md) | Org payload | | - -### Return type - -[**ModelsOrganization**](ModelsOrganization.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **201** | Created | - | -| **400** | Bad Request | - | -| **401** | Unauthorized | - | -| **409** | Conflict | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## createOrgKey - -> HandlersOrgKeyCreateResp createOrgKey(id, body) - -Create org key/secret pair (owner/admin) - -### Example - -```ts -import { - Configuration, - OrgsApi, -} from '@glueops/autoglue-sdk-go'; -import type { CreateOrgKeyRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new OrgsApi(config); - - const body = { - // string | Org ID (UUID) - id: id_example, - // HandlersOrgKeyCreateReq | Key name + optional expiry - body: ..., - } satisfies CreateOrgKeyRequest; - - try { - const data = await api.createOrgKey(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Org ID (UUID) | [Defaults to `undefined`] | -| **body** | [HandlersOrgKeyCreateReq](HandlersOrgKeyCreateReq.md) | Key name + optional expiry | | - -### Return type - -[**HandlersOrgKeyCreateResp**](HandlersOrgKeyCreateResp.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **201** | Created | - | -| **401** | Unauthorized | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## deleteOrg - -> deleteOrg(id) - -Delete organization (owner) - -### Example - -```ts -import { - Configuration, - OrgsApi, -} from '@glueops/autoglue-sdk-go'; -import type { DeleteOrgRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new OrgsApi(config); - - const body = { - // string | Org ID (UUID) - id: id_example, - } satisfies DeleteOrgRequest; - - try { - const data = await api.deleteOrg(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Org ID (UUID) | [Defaults to `undefined`] | - -### Return type - -`void` (Empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | Deleted | - | -| **401** | Unauthorized | - | -| **404** | Not Found | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## deleteOrgKey - -> deleteOrgKey(id, keyId) - -Delete org key (owner/admin) - -### Example - -```ts -import { - Configuration, - OrgsApi, -} from '@glueops/autoglue-sdk-go'; -import type { DeleteOrgKeyRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new OrgsApi(config); - - const body = { - // string | Org ID (UUID) - id: id_example, - // string | Key ID (UUID) - keyId: keyId_example, - } satisfies DeleteOrgKeyRequest; - - try { - const data = await api.deleteOrgKey(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Org ID (UUID) | [Defaults to `undefined`] | -| **keyId** | `string` | Key ID (UUID) | [Defaults to `undefined`] | - -### Return type - -`void` (Empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | Deleted | - | -| **401** | Unauthorized | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## getOrg - -> ModelsOrganization getOrg(id) - -Get organization - -### Example - -```ts -import { - Configuration, - OrgsApi, -} from '@glueops/autoglue-sdk-go'; -import type { GetOrgRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new OrgsApi(config); - - const body = { - // string | Org ID (UUID) - id: id_example, - } satisfies GetOrgRequest; - - try { - const data = await api.getOrg(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Org ID (UUID) | [Defaults to `undefined`] | - -### Return type - -[**ModelsOrganization**](ModelsOrganization.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | -| **404** | Not Found | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listMembers - -> Array<HandlersMemberOut> listMembers(id) - -List members in org - -### Example - -```ts -import { - Configuration, - OrgsApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListMembersRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new OrgsApi(config); - - const body = { - // string | Org ID (UUID) - id: id_example, - } satisfies ListMembersRequest; - - try { - const data = await api.listMembers(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Org ID (UUID) | [Defaults to `undefined`] | - -### Return type - -[**Array<HandlersMemberOut>**](HandlersMemberOut.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listMyOrgs - -> Array<ModelsOrganization> listMyOrgs() - -List organizations I belong to - -### Example - -```ts -import { - Configuration, - OrgsApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListMyOrgsRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new OrgsApi(config); - - try { - const data = await api.listMyOrgs(); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**Array<ModelsOrganization>**](ModelsOrganization.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listOrgKeys - -> Array<ModelsAPIKey> listOrgKeys(id) - -List org-scoped API keys (no secrets) - -### Example - -```ts -import { - Configuration, - OrgsApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListOrgKeysRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new OrgsApi(config); - - const body = { - // string | Org ID (UUID) - id: id_example, - } satisfies ListOrgKeysRequest; - - try { - const data = await api.listOrgKeys(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Org ID (UUID) | [Defaults to `undefined`] | - -### Return type - -[**Array<ModelsAPIKey>**](ModelsAPIKey.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## removeMember - -> removeMember(id, userId) - -Remove a member (owner/admin) - -### Example - -```ts -import { - Configuration, - OrgsApi, -} from '@glueops/autoglue-sdk-go'; -import type { RemoveMemberRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new OrgsApi(config); - - const body = { - // string | Org ID (UUID) - id: id_example, - // string | User ID (UUID) - userId: userId_example, - } satisfies RemoveMemberRequest; - - try { - const data = await api.removeMember(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Org ID (UUID) | [Defaults to `undefined`] | -| **userId** | `string` | User ID (UUID) | [Defaults to `undefined`] | - -### Return type - -`void` (Empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | Removed | - | -| **401** | Unauthorized | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## updateOrg - -> ModelsOrganization updateOrg(id, body) - -Update organization (owner/admin) - -### Example - -```ts -import { - Configuration, - OrgsApi, -} from '@glueops/autoglue-sdk-go'; -import type { UpdateOrgRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new OrgsApi(config); - - const body = { - // string | Org ID (UUID) - id: id_example, - // HandlersOrgUpdateReq | Update payload - body: ..., - } satisfies UpdateOrgRequest; - - try { - const data = await api.updateOrg(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Org ID (UUID) | [Defaults to `undefined`] | -| **body** | [HandlersOrgUpdateReq](HandlersOrgUpdateReq.md) | Update payload | | - -### Return type - -[**ModelsOrganization**](ModelsOrganization.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | -| **404** | Not Found | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/ServersApi.md b/ui/src/sdk/docs/ServersApi.md deleted file mode 100644 index 7708e9f..0000000 --- a/ui/src/sdk/docs/ServersApi.md +++ /dev/null @@ -1,430 +0,0 @@ -# ServersApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**createServer**](ServersApi.md#createserver) | **POST** /servers | Create server (org scoped) | -| [**deleteServer**](ServersApi.md#deleteserver) | **DELETE** /servers/{id} | Delete server (org scoped) | -| [**getServer**](ServersApi.md#getserver) | **GET** /servers/{id} | Get server by ID (org scoped) | -| [**listServers**](ServersApi.md#listservers) | **GET** /servers | List servers (org scoped) | -| [**updateServer**](ServersApi.md#updateserver) | **PATCH** /servers/{id} | Update server (org scoped) | - - - -## createServer - -> DtoServerResponse createServer(body, xOrgID) - -Create server (org scoped) - -Creates a server bound to the org in X-Org-ID. Validates that ssh_key_id belongs to the org. - -### Example - -```ts -import { - Configuration, - ServersApi, -} from '@glueops/autoglue-sdk-go'; -import type { CreateServerRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new ServersApi(config); - - const body = { - // DtoCreateServerRequest | Server payload - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies CreateServerRequest; - - try { - const data = await api.createServer(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **body** | [DtoCreateServerRequest](DtoCreateServerRequest.md) | Server payload | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoServerResponse**](DtoServerResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **201** | Created | - | -| **400** | invalid json / missing fields / invalid status / invalid ssh_key_id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | create failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## deleteServer - -> string deleteServer(id, xOrgID) - -Delete server (org scoped) - -Permanently deletes the server. - -### Example - -```ts -import { - Configuration, - ServersApi, -} from '@glueops/autoglue-sdk-go'; -import type { DeleteServerRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new ServersApi(config); - - const body = { - // string | Server ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies DeleteServerRequest; - - try { - const data = await api.deleteServer(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Server ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | delete failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## getServer - -> DtoServerResponse getServer(id, xOrgID) - -Get server by ID (org scoped) - -Returns one server in the given organization. - -### Example - -```ts -import { - Configuration, - ServersApi, -} from '@glueops/autoglue-sdk-go'; -import type { GetServerRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new ServersApi(config); - - const body = { - // string | Server ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies GetServerRequest; - - try { - const data = await api.getServer(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Server ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoServerResponse**](DtoServerResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | fetch failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listServers - -> Array<DtoServerResponse> listServers(xOrgID, status, role) - -List servers (org scoped) - -Returns servers for the organization in X-Org-ID. Optional filters: status, role. - -### Example - -```ts -import { - Configuration, - ServersApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListServersRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new ServersApi(config); - - const body = { - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - // string | Filter by status (pending|provisioning|ready|failed) (optional) - status: status_example, - // string | Filter by role (optional) - role: role_example, - } satisfies ListServersRequest; - - try { - const data = await api.listServers(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | -| **status** | `string` | Filter by status (pending|provisioning|ready|failed) | [Optional] [Defaults to `undefined`] | -| **role** | `string` | Filter by role | [Optional] [Defaults to `undefined`] | - -### Return type - -[**Array<DtoServerResponse>**](DtoServerResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | failed to list servers | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## updateServer - -> DtoServerResponse updateServer(id, body, xOrgID) - -Update server (org scoped) - -Partially update fields; changing ssh_key_id validates ownership. - -### Example - -```ts -import { - Configuration, - ServersApi, -} from '@glueops/autoglue-sdk-go'; -import type { UpdateServerRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new ServersApi(config); - - const body = { - // string | Server ID (UUID) - id: id_example, - // DtoUpdateServerRequest | Fields to update - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies UpdateServerRequest; - - try { - const data = await api.updateServer(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Server ID (UUID) | [Defaults to `undefined`] | -| **body** | [DtoUpdateServerRequest](DtoUpdateServerRequest.md) | Fields to update | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoServerResponse**](DtoServerResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid id / invalid json / invalid status / invalid ssh_key_id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | update failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/SshApi.md b/ui/src/sdk/docs/SshApi.md deleted file mode 100644 index d4ba898..0000000 --- a/ui/src/sdk/docs/SshApi.md +++ /dev/null @@ -1,427 +0,0 @@ -# SshApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**createSSHKey**](SshApi.md#createsshkey) | **POST** /ssh | Create ssh keypair (org scoped) | -| [**deleteSSHKey**](SshApi.md#deletesshkey) | **DELETE** /ssh/{id} | Delete ssh keypair (org scoped) | -| [**downloadSSHKey**](SshApi.md#downloadsshkey) | **GET** /ssh/{id}/download | Download ssh key files by ID (org scoped) | -| [**getSSHKey**](SshApi.md#getsshkey) | **GET** /ssh/{id} | Get ssh key by ID (org scoped) | -| [**listPublicSshKeys**](SshApi.md#listpublicsshkeys) | **GET** /ssh | List ssh keys (org scoped) | - - - -## createSSHKey - -> DtoSshResponse createSSHKey(body, xOrgID) - -Create ssh keypair (org scoped) - -Generates an RSA or ED25519 keypair, saves it, and returns metadata. For RSA you may set bits (2048/3072/4096). Default is 4096. ED25519 ignores bits. - -### Example - -```ts -import { - Configuration, - SshApi, -} from '@glueops/autoglue-sdk-go'; -import type { CreateSSHKeyRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new SshApi(config); - - const body = { - // DtoCreateSSHRequest | Key generation options - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies CreateSSHKeyRequest; - - try { - const data = await api.createSSHKey(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **body** | [DtoCreateSSHRequest](DtoCreateSSHRequest.md) | Key generation options | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoSshResponse**](DtoSshResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **201** | Created | - | -| **400** | invalid json / invalid bits | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | generation/create failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## deleteSSHKey - -> string deleteSSHKey(id, xOrgID) - -Delete ssh keypair (org scoped) - -Permanently deletes a keypair. - -### Example - -```ts -import { - Configuration, - SshApi, -} from '@glueops/autoglue-sdk-go'; -import type { DeleteSSHKeyRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new SshApi(config); - - const body = { - // string | SSH Key ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies DeleteSSHKeyRequest; - - try { - const data = await api.deleteSSHKey(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | SSH Key ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | delete failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## downloadSSHKey - -> string downloadSSHKey(xOrgID, id, part) - -Download ssh key files by ID (org scoped) - -Download `part=public|private|both` of the keypair. `both` returns a zip file. - -### Example - -```ts -import { - Configuration, - SshApi, -} from '@glueops/autoglue-sdk-go'; -import type { DownloadSSHKeyRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new SshApi(config); - - const body = { - // string | Organization UUID - xOrgID: xOrgID_example, - // string | SSH Key ID (UUID) - id: id_example, - // 'public' | 'private' | 'both' | Which part to download - part: part_example, - } satisfies DownloadSSHKeyRequest; - - try { - const data = await api.downloadSSHKey(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **xOrgID** | `string` | Organization UUID | [Defaults to `undefined`] | -| **id** | `string` | SSH Key ID (UUID) | [Defaults to `undefined`] | -| **part** | `public`, `private`, `both` | Which part to download | [Defaults to `undefined`] [Enum: public, private, both] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | file content | - | -| **400** | invalid id / invalid part | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | download failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## getSSHKey - -> DtoSshRevealResponse getSSHKey(id, xOrgID, reveal) - -Get ssh key by ID (org scoped) - -Returns public key fields. Append `?reveal=true` to include the private key PEM. - -### Example - -```ts -import { - Configuration, - SshApi, -} from '@glueops/autoglue-sdk-go'; -import type { GetSSHKeyRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new SshApi(config); - - const body = { - // string | SSH Key ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - // boolean | Reveal private key PEM (optional) - reveal: true, - } satisfies GetSSHKeyRequest; - - try { - const data = await api.getSSHKey(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | SSH Key ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | -| **reveal** | `boolean` | Reveal private key PEM | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoSshRevealResponse**](DtoSshRevealResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | When reveal=true | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | fetch failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listPublicSshKeys - -> Array<DtoSshResponse> listPublicSshKeys(xOrgID) - -List ssh keys (org scoped) - -Returns ssh keys for the organization in X-Org-ID. - -### Example - -```ts -import { - Configuration, - SshApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListPublicSshKeysRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new SshApi(config); - - const body = { - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies ListPublicSshKeysRequest; - - try { - const data = await api.listPublicSshKeys(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**Array<DtoSshResponse>**](DtoSshResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | failed to list keys | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/TaintsApi.md b/ui/src/sdk/docs/TaintsApi.md deleted file mode 100644 index d33a883..0000000 --- a/ui/src/sdk/docs/TaintsApi.md +++ /dev/null @@ -1,431 +0,0 @@ -# TaintsApi - -All URIs are relative to */api/v1* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**createTaint**](TaintsApi.md#createtaint) | **POST** /taints | Create node taint (org scoped) | -| [**deleteTaint**](TaintsApi.md#deletetaint) | **DELETE** /taints/{id} | Delete taint (org scoped) | -| [**getTaint**](TaintsApi.md#gettaint) | **GET** /taints/{id} | Get node taint by ID (org scoped) | -| [**listTaints**](TaintsApi.md#listtaints) | **GET** /taints | List node pool taints (org scoped) | -| [**updateTaint**](TaintsApi.md#updatetaint) | **PATCH** /taints/{id} | Update node taint (org scoped) | - - - -## createTaint - -> DtoTaintResponse createTaint(body, xOrgID) - -Create node taint (org scoped) - -Creates a taint. - -### Example - -```ts -import { - Configuration, - TaintsApi, -} from '@glueops/autoglue-sdk-go'; -import type { CreateTaintRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new TaintsApi(config); - - const body = { - // DtoCreateTaintRequest | Taint payload - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies CreateTaintRequest; - - try { - const data = await api.createTaint(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **body** | [DtoCreateTaintRequest](DtoCreateTaintRequest.md) | Taint payload | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoTaintResponse**](DtoTaintResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **201** | Created | - | -| **400** | invalid json / missing fields / invalid node_pool_ids | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | create failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## deleteTaint - -> string deleteTaint(id, xOrgID) - -Delete taint (org scoped) - -Permanently deletes the taint. - -### Example - -```ts -import { - Configuration, - TaintsApi, -} from '@glueops/autoglue-sdk-go'; -import type { DeleteTaintRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new TaintsApi(config); - - const body = { - // string | Node Taint ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies DeleteTaintRequest; - - try { - const data = await api.deleteTaint(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Taint ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -**string** - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **204** | No Content | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | delete failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## getTaint - -> DtoTaintResponse getTaint(id, xOrgID) - -Get node taint by ID (org scoped) - -### Example - -```ts -import { - Configuration, - TaintsApi, -} from '@glueops/autoglue-sdk-go'; -import type { GetTaintRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new TaintsApi(config); - - const body = { - // string | Node Taint ID (UUID) - id: id_example, - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies GetTaintRequest; - - try { - const data = await api.getTaint(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Taint ID (UUID) | [Defaults to `undefined`] | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoTaintResponse**](DtoTaintResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid id | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | fetch failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## listTaints - -> Array<DtoTaintResponse> listTaints(xOrgID, key, value, q) - -List node pool taints (org scoped) - -Returns node taints for the organization in X-Org-ID. Filters: `key`, `value`, and `q` (key contains). Add `include=node_pools` to include linked node pools. - -### Example - -```ts -import { - Configuration, - TaintsApi, -} from '@glueops/autoglue-sdk-go'; -import type { ListTaintsRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new TaintsApi(config); - - const body = { - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - // string | Exact key (optional) - key: key_example, - // string | Exact value (optional) - value: value_example, - // string | key contains (case-insensitive) (optional) - q: q_example, - } satisfies ListTaintsRequest; - - try { - const data = await api.listTaints(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | -| **key** | `string` | Exact key | [Optional] [Defaults to `undefined`] | -| **value** | `string` | Exact value | [Optional] [Defaults to `undefined`] | -| **q** | `string` | key contains (case-insensitive) | [Optional] [Defaults to `undefined`] | - -### Return type - -[**Array<DtoTaintResponse>**](DtoTaintResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **500** | failed to list node taints | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - -## updateTaint - -> DtoTaintResponse updateTaint(id, body, xOrgID) - -Update node taint (org scoped) - -Partially update taint fields. - -### Example - -```ts -import { - Configuration, - TaintsApi, -} from '@glueops/autoglue-sdk-go'; -import type { UpdateTaintRequest } from '@glueops/autoglue-sdk-go'; - -async function example() { - console.log("🚀 Testing @glueops/autoglue-sdk-go SDK..."); - const config = new Configuration({ - // To configure API key authorization: OrgKeyAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: OrgSecretAuth - apiKey: "YOUR API KEY", - // To configure API key authorization: BearerAuth - apiKey: "YOUR API KEY", - }); - const api = new TaintsApi(config); - - const body = { - // string | Node Taint ID (UUID) - id: id_example, - // DtoUpdateTaintRequest | Fields to update - body: ..., - // string | Organization UUID (optional) - xOrgID: xOrgID_example, - } satisfies UpdateTaintRequest; - - try { - const data = await api.updateTaint(body); - console.log(data); - } catch (error) { - console.error(error); - } -} - -// Run the test -example().catch(console.error); -``` - -### Parameters - - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **id** | `string` | Node Taint ID (UUID) | [Defaults to `undefined`] | -| **body** | [DtoUpdateTaintRequest](DtoUpdateTaintRequest.md) | Fields to update | | -| **xOrgID** | `string` | Organization UUID | [Optional] [Defaults to `undefined`] | - -### Return type - -[**DtoTaintResponse**](DtoTaintResponse.md) - -### Authorization - -[OrgKeyAuth](../README.md#OrgKeyAuth), [OrgSecretAuth](../README.md#OrgSecretAuth), [BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: `application/json` -- **Accept**: `application/json` - - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -| **200** | OK | - | -| **400** | invalid id / invalid json | - | -| **401** | Unauthorized | - | -| **403** | organization required | - | -| **404** | not found | - | -| **500** | update failed | - | - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - diff --git a/ui/src/sdk/docs/UtilsErrorResponse.md b/ui/src/sdk/docs/UtilsErrorResponse.md deleted file mode 100644 index 2cf081b..0000000 --- a/ui/src/sdk/docs/UtilsErrorResponse.md +++ /dev/null @@ -1,36 +0,0 @@ - -# UtilsErrorResponse - - -## Properties - -Name | Type ------------- | ------------- -`code` | string -`message` | string - -## Example - -```typescript -import type { UtilsErrorResponse } from '@glueops/autoglue-sdk-go' - -// TODO: Update the object below with actual values -const example = { - "code": null, - "message": null, -} satisfies UtilsErrorResponse - -console.log(example) - -// Convert the instance to a JSON string -const exampleJSON: string = JSON.stringify(example) -console.log(exampleJSON) - -// Parse the JSON string back to an object -const exampleParsed = JSON.parse(exampleJSON) as UtilsErrorResponse -console.log(exampleParsed) -``` - -[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) - - diff --git a/ui/src/sdk/index.ts b/ui/src/sdk/index.ts deleted file mode 100644 index bebe8bb..0000000 --- a/ui/src/sdk/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -export * from './runtime'; -export * from './apis/index'; -export * from './models/index'; diff --git a/ui/src/sdk/models/DtoAnnotationResponse.ts b/ui/src/sdk/models/DtoAnnotationResponse.ts deleted file mode 100644 index 8eca6aa..0000000 --- a/ui/src/sdk/models/DtoAnnotationResponse.ts +++ /dev/null @@ -1,104 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoAnnotationResponse - */ -export interface DtoAnnotationResponse { - /** - * - * @type {string} - * @memberof DtoAnnotationResponse - */ - created_at?: string; - /** - * - * @type {string} - * @memberof DtoAnnotationResponse - */ - id?: string; - /** - * - * @type {string} - * @memberof DtoAnnotationResponse - */ - key?: string; - /** - * - * @type {string} - * @memberof DtoAnnotationResponse - */ - organization_id?: string; - /** - * - * @type {string} - * @memberof DtoAnnotationResponse - */ - updated_at?: string; - /** - * - * @type {string} - * @memberof DtoAnnotationResponse - */ - value?: string; -} - -/** - * Check if a given object implements the DtoAnnotationResponse interface. - */ -export function instanceOfDtoAnnotationResponse(value: object): value is DtoAnnotationResponse { - return true; -} - -export function DtoAnnotationResponseFromJSON(json: any): DtoAnnotationResponse { - return DtoAnnotationResponseFromJSONTyped(json, false); -} - -export function DtoAnnotationResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoAnnotationResponse { - if (json == null) { - return json; - } - return { - - 'created_at': json['created_at'] == null ? undefined : json['created_at'], - 'id': json['id'] == null ? undefined : json['id'], - 'key': json['key'] == null ? undefined : json['key'], - 'organization_id': json['organization_id'] == null ? undefined : json['organization_id'], - 'updated_at': json['updated_at'] == null ? undefined : json['updated_at'], - 'value': json['value'] == null ? undefined : json['value'], - }; -} - -export function DtoAnnotationResponseToJSON(json: any): DtoAnnotationResponse { - return DtoAnnotationResponseToJSONTyped(json, false); -} - -export function DtoAnnotationResponseToJSONTyped(value?: DtoAnnotationResponse | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'created_at': value['created_at'], - 'id': value['id'], - 'key': value['key'], - 'organization_id': value['organization_id'], - 'updated_at': value['updated_at'], - 'value': value['value'], - }; -} - diff --git a/ui/src/sdk/models/DtoAttachAnnotationsRequest.ts b/ui/src/sdk/models/DtoAttachAnnotationsRequest.ts deleted file mode 100644 index d8595cf..0000000 --- a/ui/src/sdk/models/DtoAttachAnnotationsRequest.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoAttachAnnotationsRequest - */ -export interface DtoAttachAnnotationsRequest { - /** - * - * @type {Array} - * @memberof DtoAttachAnnotationsRequest - */ - annotation_ids?: Array; -} - -/** - * Check if a given object implements the DtoAttachAnnotationsRequest interface. - */ -export function instanceOfDtoAttachAnnotationsRequest(value: object): value is DtoAttachAnnotationsRequest { - return true; -} - -export function DtoAttachAnnotationsRequestFromJSON(json: any): DtoAttachAnnotationsRequest { - return DtoAttachAnnotationsRequestFromJSONTyped(json, false); -} - -export function DtoAttachAnnotationsRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoAttachAnnotationsRequest { - if (json == null) { - return json; - } - return { - - 'annotation_ids': json['annotation_ids'] == null ? undefined : json['annotation_ids'], - }; -} - -export function DtoAttachAnnotationsRequestToJSON(json: any): DtoAttachAnnotationsRequest { - return DtoAttachAnnotationsRequestToJSONTyped(json, false); -} - -export function DtoAttachAnnotationsRequestToJSONTyped(value?: DtoAttachAnnotationsRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'annotation_ids': value['annotation_ids'], - }; -} - diff --git a/ui/src/sdk/models/DtoAttachLabelsRequest.ts b/ui/src/sdk/models/DtoAttachLabelsRequest.ts deleted file mode 100644 index 7dfcf90..0000000 --- a/ui/src/sdk/models/DtoAttachLabelsRequest.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoAttachLabelsRequest - */ -export interface DtoAttachLabelsRequest { - /** - * - * @type {Array} - * @memberof DtoAttachLabelsRequest - */ - label_ids?: Array; -} - -/** - * Check if a given object implements the DtoAttachLabelsRequest interface. - */ -export function instanceOfDtoAttachLabelsRequest(value: object): value is DtoAttachLabelsRequest { - return true; -} - -export function DtoAttachLabelsRequestFromJSON(json: any): DtoAttachLabelsRequest { - return DtoAttachLabelsRequestFromJSONTyped(json, false); -} - -export function DtoAttachLabelsRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoAttachLabelsRequest { - if (json == null) { - return json; - } - return { - - 'label_ids': json['label_ids'] == null ? undefined : json['label_ids'], - }; -} - -export function DtoAttachLabelsRequestToJSON(json: any): DtoAttachLabelsRequest { - return DtoAttachLabelsRequestToJSONTyped(json, false); -} - -export function DtoAttachLabelsRequestToJSONTyped(value?: DtoAttachLabelsRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'label_ids': value['label_ids'], - }; -} - diff --git a/ui/src/sdk/models/DtoAttachServersRequest.ts b/ui/src/sdk/models/DtoAttachServersRequest.ts deleted file mode 100644 index 2a58ab4..0000000 --- a/ui/src/sdk/models/DtoAttachServersRequest.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoAttachServersRequest - */ -export interface DtoAttachServersRequest { - /** - * - * @type {Array} - * @memberof DtoAttachServersRequest - */ - server_ids?: Array; -} - -/** - * Check if a given object implements the DtoAttachServersRequest interface. - */ -export function instanceOfDtoAttachServersRequest(value: object): value is DtoAttachServersRequest { - return true; -} - -export function DtoAttachServersRequestFromJSON(json: any): DtoAttachServersRequest { - return DtoAttachServersRequestFromJSONTyped(json, false); -} - -export function DtoAttachServersRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoAttachServersRequest { - if (json == null) { - return json; - } - return { - - 'server_ids': json['server_ids'] == null ? undefined : json['server_ids'], - }; -} - -export function DtoAttachServersRequestToJSON(json: any): DtoAttachServersRequest { - return DtoAttachServersRequestToJSONTyped(json, false); -} - -export function DtoAttachServersRequestToJSONTyped(value?: DtoAttachServersRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'server_ids': value['server_ids'], - }; -} - diff --git a/ui/src/sdk/models/DtoAttachTaintsRequest.ts b/ui/src/sdk/models/DtoAttachTaintsRequest.ts deleted file mode 100644 index e15ff92..0000000 --- a/ui/src/sdk/models/DtoAttachTaintsRequest.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoAttachTaintsRequest - */ -export interface DtoAttachTaintsRequest { - /** - * - * @type {Array} - * @memberof DtoAttachTaintsRequest - */ - taint_ids?: Array; -} - -/** - * Check if a given object implements the DtoAttachTaintsRequest interface. - */ -export function instanceOfDtoAttachTaintsRequest(value: object): value is DtoAttachTaintsRequest { - return true; -} - -export function DtoAttachTaintsRequestFromJSON(json: any): DtoAttachTaintsRequest { - return DtoAttachTaintsRequestFromJSONTyped(json, false); -} - -export function DtoAttachTaintsRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoAttachTaintsRequest { - if (json == null) { - return json; - } - return { - - 'taint_ids': json['taint_ids'] == null ? undefined : json['taint_ids'], - }; -} - -export function DtoAttachTaintsRequestToJSON(json: any): DtoAttachTaintsRequest { - return DtoAttachTaintsRequestToJSONTyped(json, false); -} - -export function DtoAttachTaintsRequestToJSONTyped(value?: DtoAttachTaintsRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'taint_ids': value['taint_ids'], - }; -} - diff --git a/ui/src/sdk/models/DtoAuthStartResponse.ts b/ui/src/sdk/models/DtoAuthStartResponse.ts deleted file mode 100644 index 3cb3db1..0000000 --- a/ui/src/sdk/models/DtoAuthStartResponse.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoAuthStartResponse - */ -export interface DtoAuthStartResponse { - /** - * - * @type {string} - * @memberof DtoAuthStartResponse - */ - auth_url?: string; -} - -/** - * Check if a given object implements the DtoAuthStartResponse interface. - */ -export function instanceOfDtoAuthStartResponse(value: object): value is DtoAuthStartResponse { - return true; -} - -export function DtoAuthStartResponseFromJSON(json: any): DtoAuthStartResponse { - return DtoAuthStartResponseFromJSONTyped(json, false); -} - -export function DtoAuthStartResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoAuthStartResponse { - if (json == null) { - return json; - } - return { - - 'auth_url': json['auth_url'] == null ? undefined : json['auth_url'], - }; -} - -export function DtoAuthStartResponseToJSON(json: any): DtoAuthStartResponse { - return DtoAuthStartResponseToJSONTyped(json, false); -} - -export function DtoAuthStartResponseToJSONTyped(value?: DtoAuthStartResponse | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'auth_url': value['auth_url'], - }; -} - diff --git a/ui/src/sdk/models/DtoClusterResponse.ts b/ui/src/sdk/models/DtoClusterResponse.ts deleted file mode 100644 index 6427a49..0000000 --- a/ui/src/sdk/models/DtoClusterResponse.ts +++ /dev/null @@ -1,173 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import type { DtoNodePoolResponse } from "./DtoNodePoolResponse" -import { DtoNodePoolResponseFromJSON, DtoNodePoolResponseToJSON, } from "./DtoNodePoolResponse" -import type { DtoServerResponse } from "./DtoServerResponse" -import { DtoServerResponseFromJSON, DtoServerResponseToJSON, } from "./DtoServerResponse" - -/** - * - * @export - * @interface DtoClusterResponse - */ -export interface DtoClusterResponse { - /** - * - * @type {DtoServerResponse} - * @memberof DtoClusterResponse - */ - bastion_server?: DtoServerResponse; - /** - * - * @type {string} - * @memberof DtoClusterResponse - */ - captain_domain?: string; - /** - * - * @type {string} - * @memberof DtoClusterResponse - */ - certificate_key?: string; - /** - * - * @type {string} - * @memberof DtoClusterResponse - */ - cluster_load_balancer?: string; - /** - * - * @type {string} - * @memberof DtoClusterResponse - */ - control_load_balancer?: string; - /** - * - * @type {string} - * @memberof DtoClusterResponse - */ - created_at?: string; - /** - * - * @type {string} - * @memberof DtoClusterResponse - */ - id?: string; - /** - * - * @type {string} - * @memberof DtoClusterResponse - */ - name?: string; - /** - * - * @type {Array} - * @memberof DtoClusterResponse - */ - node_pools?: Array; - /** - * - * @type {string} - * @memberof DtoClusterResponse - */ - provider?: string; - /** - * - * @type {string} - * @memberof DtoClusterResponse - */ - random_token?: string; - /** - * - * @type {string} - * @memberof DtoClusterResponse - */ - region?: string; - /** - * - * @type {string} - * @memberof DtoClusterResponse - */ - status?: string; - /** - * - * @type {string} - * @memberof DtoClusterResponse - */ - updated_at?: string; -} - -/** - * Check if a given object implements the DtoClusterResponse interface. - */ -export function instanceOfDtoClusterResponse(value: object): value is DtoClusterResponse { - return true; -} - -export function DtoClusterResponseFromJSON(json: any): DtoClusterResponse { - return DtoClusterResponseFromJSONTyped(json, false); -} - -export function DtoClusterResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoClusterResponse { - if (json == null) { - return json; - } - return { - - 'bastion_server': json['bastion_server'] == null ? undefined : DtoServerResponseFromJSON(json['bastion_server']), - 'captain_domain': json['captain_domain'] == null ? undefined : json['captain_domain'], - 'certificate_key': json['certificate_key'] == null ? undefined : json['certificate_key'], - 'cluster_load_balancer': json['cluster_load_balancer'] == null ? undefined : json['cluster_load_balancer'], - 'control_load_balancer': json['control_load_balancer'] == null ? undefined : json['control_load_balancer'], - 'created_at': json['created_at'] == null ? undefined : json['created_at'], - 'id': json['id'] == null ? undefined : json['id'], - 'name': json['name'] == null ? undefined : json['name'], - 'node_pools': json['node_pools'] == null ? undefined : ((json['node_pools'] as Array).map(DtoNodePoolResponseFromJSON)), - 'provider': json['provider'] == null ? undefined : json['provider'], - 'random_token': json['random_token'] == null ? undefined : json['random_token'], - 'region': json['region'] == null ? undefined : json['region'], - 'status': json['status'] == null ? undefined : json['status'], - 'updated_at': json['updated_at'] == null ? undefined : json['updated_at'], - }; -} - -export function DtoClusterResponseToJSON(json: any): DtoClusterResponse { - return DtoClusterResponseToJSONTyped(json, false); -} - -export function DtoClusterResponseToJSONTyped(value?: DtoClusterResponse | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'bastion_server': DtoServerResponseToJSON(value['bastion_server']), - 'captain_domain': value['captain_domain'], - 'certificate_key': value['certificate_key'], - 'cluster_load_balancer': value['cluster_load_balancer'], - 'control_load_balancer': value['control_load_balancer'], - 'created_at': value['created_at'], - 'id': value['id'], - 'name': value['name'], - 'node_pools': value['node_pools'] == null ? undefined : ((value['node_pools'] as Array).map(DtoNodePoolResponseToJSON)), - 'provider': value['provider'], - 'random_token': value['random_token'], - 'region': value['region'], - 'status': value['status'], - 'updated_at': value['updated_at'], - }; -} - diff --git a/ui/src/sdk/models/DtoCreateAnnotationRequest.ts b/ui/src/sdk/models/DtoCreateAnnotationRequest.ts deleted file mode 100644 index aece433..0000000 --- a/ui/src/sdk/models/DtoCreateAnnotationRequest.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoCreateAnnotationRequest - */ -export interface DtoCreateAnnotationRequest { - /** - * - * @type {string} - * @memberof DtoCreateAnnotationRequest - */ - key?: string; - /** - * - * @type {string} - * @memberof DtoCreateAnnotationRequest - */ - value?: string; -} - -/** - * Check if a given object implements the DtoCreateAnnotationRequest interface. - */ -export function instanceOfDtoCreateAnnotationRequest(value: object): value is DtoCreateAnnotationRequest { - return true; -} - -export function DtoCreateAnnotationRequestFromJSON(json: any): DtoCreateAnnotationRequest { - return DtoCreateAnnotationRequestFromJSONTyped(json, false); -} - -export function DtoCreateAnnotationRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoCreateAnnotationRequest { - if (json == null) { - return json; - } - return { - - 'key': json['key'] == null ? undefined : json['key'], - 'value': json['value'] == null ? undefined : json['value'], - }; -} - -export function DtoCreateAnnotationRequestToJSON(json: any): DtoCreateAnnotationRequest { - return DtoCreateAnnotationRequestToJSONTyped(json, false); -} - -export function DtoCreateAnnotationRequestToJSONTyped(value?: DtoCreateAnnotationRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'key': value['key'], - 'value': value['value'], - }; -} - diff --git a/ui/src/sdk/models/DtoCreateClusterRequest.ts b/ui/src/sdk/models/DtoCreateClusterRequest.ts deleted file mode 100644 index b265d9e..0000000 --- a/ui/src/sdk/models/DtoCreateClusterRequest.ts +++ /dev/null @@ -1,112 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoCreateClusterRequest - */ -export interface DtoCreateClusterRequest { - /** - * - * @type {string} - * @memberof DtoCreateClusterRequest - */ - captain_domain?: string; - /** - * - * @type {string} - * @memberof DtoCreateClusterRequest - */ - cluster_load_balancer?: string; - /** - * - * @type {string} - * @memberof DtoCreateClusterRequest - */ - control_load_balancer?: string; - /** - * - * @type {string} - * @memberof DtoCreateClusterRequest - */ - name?: string; - /** - * - * @type {string} - * @memberof DtoCreateClusterRequest - */ - provider?: string; - /** - * - * @type {string} - * @memberof DtoCreateClusterRequest - */ - region?: string; - /** - * - * @type {string} - * @memberof DtoCreateClusterRequest - */ - status?: string; -} - -/** - * Check if a given object implements the DtoCreateClusterRequest interface. - */ -export function instanceOfDtoCreateClusterRequest(value: object): value is DtoCreateClusterRequest { - return true; -} - -export function DtoCreateClusterRequestFromJSON(json: any): DtoCreateClusterRequest { - return DtoCreateClusterRequestFromJSONTyped(json, false); -} - -export function DtoCreateClusterRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoCreateClusterRequest { - if (json == null) { - return json; - } - return { - - 'captain_domain': json['captain_domain'] == null ? undefined : json['captain_domain'], - 'cluster_load_balancer': json['cluster_load_balancer'] == null ? undefined : json['cluster_load_balancer'], - 'control_load_balancer': json['control_load_balancer'] == null ? undefined : json['control_load_balancer'], - 'name': json['name'] == null ? undefined : json['name'], - 'provider': json['provider'] == null ? undefined : json['provider'], - 'region': json['region'] == null ? undefined : json['region'], - 'status': json['status'] == null ? undefined : json['status'], - }; -} - -export function DtoCreateClusterRequestToJSON(json: any): DtoCreateClusterRequest { - return DtoCreateClusterRequestToJSONTyped(json, false); -} - -export function DtoCreateClusterRequestToJSONTyped(value?: DtoCreateClusterRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'captain_domain': value['captain_domain'], - 'cluster_load_balancer': value['cluster_load_balancer'], - 'control_load_balancer': value['control_load_balancer'], - 'name': value['name'], - 'provider': value['provider'], - 'region': value['region'], - 'status': value['status'], - }; -} - diff --git a/ui/src/sdk/models/DtoCreateCredentialRequest.ts b/ui/src/sdk/models/DtoCreateCredentialRequest.ts deleted file mode 100644 index 09b5616..0000000 --- a/ui/src/sdk/models/DtoCreateCredentialRequest.ts +++ /dev/null @@ -1,167 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoCreateCredentialRequest - */ -export interface DtoCreateCredentialRequest { - /** - * - * @type {string} - * @memberof DtoCreateCredentialRequest - */ - account_id?: string; - /** - * aws_access_key, api_token, basic_auth, oauth2 - * @type {string} - * @memberof DtoCreateCredentialRequest - */ - kind: string; - /** - * human label - * @type {string} - * @memberof DtoCreateCredentialRequest - */ - name?: string; - /** - * - * @type {string} - * @memberof DtoCreateCredentialRequest - */ - provider: DtoCreateCredentialRequestProviderEnum; - /** - * - * @type {string} - * @memberof DtoCreateCredentialRequest - */ - region?: string; - /** - * secret schema version - * @type {number} - * @memberof DtoCreateCredentialRequest - */ - schema_version: number; - /** - * {"service":"route53"} or {"arn":"..."} - * @type {object} - * @memberof DtoCreateCredentialRequest - */ - scope: object; - /** - * - * @type {string} - * @memberof DtoCreateCredentialRequest - */ - scope_kind: DtoCreateCredentialRequestScopeKindEnum; - /** - * scope schema version - * @type {number} - * @memberof DtoCreateCredentialRequest - */ - scope_version: number; - /** - * encrypted later - * @type {object} - * @memberof DtoCreateCredentialRequest - */ - secret: object; -} - - -/** - * @export - */ -export const DtoCreateCredentialRequestProviderEnum = { - aws: 'aws', - cloudflare: 'cloudflare', - hetzner: 'hetzner', - digitalocean: 'digitalocean', - generic: 'generic' -} as const; -export type DtoCreateCredentialRequestProviderEnum = typeof DtoCreateCredentialRequestProviderEnum[keyof typeof DtoCreateCredentialRequestProviderEnum]; - -/** - * @export - */ -export const DtoCreateCredentialRequestScopeKindEnum = { - provider: 'provider', - service: 'service', - resource: 'resource' -} as const; -export type DtoCreateCredentialRequestScopeKindEnum = typeof DtoCreateCredentialRequestScopeKindEnum[keyof typeof DtoCreateCredentialRequestScopeKindEnum]; - - -/** - * Check if a given object implements the DtoCreateCredentialRequest interface. - */ -export function instanceOfDtoCreateCredentialRequest(value: object): value is DtoCreateCredentialRequest { - if (!('kind' in value) || value['kind'] === undefined) return false; - if (!('provider' in value) || value['provider'] === undefined) return false; - if (!('schema_version' in value) || value['schema_version'] === undefined) return false; - if (!('scope' in value) || value['scope'] === undefined) return false; - if (!('scope_kind' in value) || value['scope_kind'] === undefined) return false; - if (!('scope_version' in value) || value['scope_version'] === undefined) return false; - if (!('secret' in value) || value['secret'] === undefined) return false; - return true; -} - -export function DtoCreateCredentialRequestFromJSON(json: any): DtoCreateCredentialRequest { - return DtoCreateCredentialRequestFromJSONTyped(json, false); -} - -export function DtoCreateCredentialRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoCreateCredentialRequest { - if (json == null) { - return json; - } - return { - - 'account_id': json['account_id'] == null ? undefined : json['account_id'], - 'kind': json['kind'], - 'name': json['name'] == null ? undefined : json['name'], - 'provider': json['provider'], - 'region': json['region'] == null ? undefined : json['region'], - 'schema_version': json['schema_version'], - 'scope': json['scope'], - 'scope_kind': json['scope_kind'], - 'scope_version': json['scope_version'], - 'secret': json['secret'], - }; -} - -export function DtoCreateCredentialRequestToJSON(json: any): DtoCreateCredentialRequest { - return DtoCreateCredentialRequestToJSONTyped(json, false); -} - -export function DtoCreateCredentialRequestToJSONTyped(value?: DtoCreateCredentialRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'account_id': value['account_id'], - 'kind': value['kind'], - 'name': value['name'], - 'provider': value['provider'], - 'region': value['region'], - 'schema_version': value['schema_version'], - 'scope': value['scope'], - 'scope_kind': value['scope_kind'], - 'scope_version': value['scope_version'], - 'secret': value['secret'], - }; -} - diff --git a/ui/src/sdk/models/DtoCreateLabelRequest.ts b/ui/src/sdk/models/DtoCreateLabelRequest.ts deleted file mode 100644 index 0b4e2fa..0000000 --- a/ui/src/sdk/models/DtoCreateLabelRequest.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoCreateLabelRequest - */ -export interface DtoCreateLabelRequest { - /** - * - * @type {string} - * @memberof DtoCreateLabelRequest - */ - key?: string; - /** - * - * @type {string} - * @memberof DtoCreateLabelRequest - */ - value?: string; -} - -/** - * Check if a given object implements the DtoCreateLabelRequest interface. - */ -export function instanceOfDtoCreateLabelRequest(value: object): value is DtoCreateLabelRequest { - return true; -} - -export function DtoCreateLabelRequestFromJSON(json: any): DtoCreateLabelRequest { - return DtoCreateLabelRequestFromJSONTyped(json, false); -} - -export function DtoCreateLabelRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoCreateLabelRequest { - if (json == null) { - return json; - } - return { - - 'key': json['key'] == null ? undefined : json['key'], - 'value': json['value'] == null ? undefined : json['value'], - }; -} - -export function DtoCreateLabelRequestToJSON(json: any): DtoCreateLabelRequest { - return DtoCreateLabelRequestToJSONTyped(json, false); -} - -export function DtoCreateLabelRequestToJSONTyped(value?: DtoCreateLabelRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'key': value['key'], - 'value': value['value'], - }; -} - diff --git a/ui/src/sdk/models/DtoCreateNodePoolRequest.ts b/ui/src/sdk/models/DtoCreateNodePoolRequest.ts deleted file mode 100644 index 3d0e780..0000000 --- a/ui/src/sdk/models/DtoCreateNodePoolRequest.ts +++ /dev/null @@ -1,83 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoCreateNodePoolRequest - */ -export interface DtoCreateNodePoolRequest { - /** - * - * @type {string} - * @memberof DtoCreateNodePoolRequest - */ - name?: string; - /** - * - * @type {string} - * @memberof DtoCreateNodePoolRequest - */ - role?: DtoCreateNodePoolRequestRoleEnum; -} - - -/** - * @export - */ -export const DtoCreateNodePoolRequestRoleEnum = { - master: 'master', - worker: 'worker' -} as const; -export type DtoCreateNodePoolRequestRoleEnum = typeof DtoCreateNodePoolRequestRoleEnum[keyof typeof DtoCreateNodePoolRequestRoleEnum]; - - -/** - * Check if a given object implements the DtoCreateNodePoolRequest interface. - */ -export function instanceOfDtoCreateNodePoolRequest(value: object): value is DtoCreateNodePoolRequest { - return true; -} - -export function DtoCreateNodePoolRequestFromJSON(json: any): DtoCreateNodePoolRequest { - return DtoCreateNodePoolRequestFromJSONTyped(json, false); -} - -export function DtoCreateNodePoolRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoCreateNodePoolRequest { - if (json == null) { - return json; - } - return { - - 'name': json['name'] == null ? undefined : json['name'], - 'role': json['role'] == null ? undefined : json['role'], - }; -} - -export function DtoCreateNodePoolRequestToJSON(json: any): DtoCreateNodePoolRequest { - return DtoCreateNodePoolRequestToJSONTyped(json, false); -} - -export function DtoCreateNodePoolRequestToJSONTyped(value?: DtoCreateNodePoolRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'name': value['name'], - 'role': value['role'], - }; -} - diff --git a/ui/src/sdk/models/DtoCreateSSHRequest.ts b/ui/src/sdk/models/DtoCreateSSHRequest.ts deleted file mode 100644 index 17687c1..0000000 --- a/ui/src/sdk/models/DtoCreateSSHRequest.ts +++ /dev/null @@ -1,88 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoCreateSSHRequest - */ -export interface DtoCreateSSHRequest { - /** - * Only for RSA - * @type {number} - * @memberof DtoCreateSSHRequest - */ - bits?: number; - /** - * - * @type {string} - * @memberof DtoCreateSSHRequest - */ - comment?: string; - /** - * - * @type {string} - * @memberof DtoCreateSSHRequest - */ - name?: string; - /** - * "rsa" (default) or "ed25519" - * @type {string} - * @memberof DtoCreateSSHRequest - */ - type?: string; -} - -/** - * Check if a given object implements the DtoCreateSSHRequest interface. - */ -export function instanceOfDtoCreateSSHRequest(value: object): value is DtoCreateSSHRequest { - return true; -} - -export function DtoCreateSSHRequestFromJSON(json: any): DtoCreateSSHRequest { - return DtoCreateSSHRequestFromJSONTyped(json, false); -} - -export function DtoCreateSSHRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoCreateSSHRequest { - if (json == null) { - return json; - } - return { - - 'bits': json['bits'] == null ? undefined : json['bits'], - 'comment': json['comment'] == null ? undefined : json['comment'], - 'name': json['name'] == null ? undefined : json['name'], - 'type': json['type'] == null ? undefined : json['type'], - }; -} - -export function DtoCreateSSHRequestToJSON(json: any): DtoCreateSSHRequest { - return DtoCreateSSHRequestToJSONTyped(json, false); -} - -export function DtoCreateSSHRequestToJSONTyped(value?: DtoCreateSSHRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'bits': value['bits'], - 'comment': value['comment'], - 'name': value['name'], - 'type': value['type'], - }; -} - diff --git a/ui/src/sdk/models/DtoCreateServerRequest.ts b/ui/src/sdk/models/DtoCreateServerRequest.ts deleted file mode 100644 index a41a2d5..0000000 --- a/ui/src/sdk/models/DtoCreateServerRequest.ts +++ /dev/null @@ -1,135 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoCreateServerRequest - */ -export interface DtoCreateServerRequest { - /** - * - * @type {string} - * @memberof DtoCreateServerRequest - */ - hostname?: string; - /** - * - * @type {string} - * @memberof DtoCreateServerRequest - */ - private_ip_address?: string; - /** - * - * @type {string} - * @memberof DtoCreateServerRequest - */ - public_ip_address?: string; - /** - * - * @type {string} - * @memberof DtoCreateServerRequest - */ - role?: DtoCreateServerRequestRoleEnum; - /** - * - * @type {string} - * @memberof DtoCreateServerRequest - */ - ssh_key_id?: string; - /** - * - * @type {string} - * @memberof DtoCreateServerRequest - */ - ssh_user?: string; - /** - * - * @type {string} - * @memberof DtoCreateServerRequest - */ - status?: DtoCreateServerRequestStatusEnum; -} - - -/** - * @export - */ -export const DtoCreateServerRequestRoleEnum = { - master: 'master', - worker: 'worker', - bastion: 'bastion' -} as const; -export type DtoCreateServerRequestRoleEnum = typeof DtoCreateServerRequestRoleEnum[keyof typeof DtoCreateServerRequestRoleEnum]; - -/** - * @export - */ -export const DtoCreateServerRequestStatusEnum = { - pending: 'pending', - provisioning: 'provisioning', - ready: 'ready', - failed: 'failed' -} as const; -export type DtoCreateServerRequestStatusEnum = typeof DtoCreateServerRequestStatusEnum[keyof typeof DtoCreateServerRequestStatusEnum]; - - -/** - * Check if a given object implements the DtoCreateServerRequest interface. - */ -export function instanceOfDtoCreateServerRequest(value: object): value is DtoCreateServerRequest { - return true; -} - -export function DtoCreateServerRequestFromJSON(json: any): DtoCreateServerRequest { - return DtoCreateServerRequestFromJSONTyped(json, false); -} - -export function DtoCreateServerRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoCreateServerRequest { - if (json == null) { - return json; - } - return { - - 'hostname': json['hostname'] == null ? undefined : json['hostname'], - 'private_ip_address': json['private_ip_address'] == null ? undefined : json['private_ip_address'], - 'public_ip_address': json['public_ip_address'] == null ? undefined : json['public_ip_address'], - 'role': json['role'] == null ? undefined : json['role'], - 'ssh_key_id': json['ssh_key_id'] == null ? undefined : json['ssh_key_id'], - 'ssh_user': json['ssh_user'] == null ? undefined : json['ssh_user'], - 'status': json['status'] == null ? undefined : json['status'], - }; -} - -export function DtoCreateServerRequestToJSON(json: any): DtoCreateServerRequest { - return DtoCreateServerRequestToJSONTyped(json, false); -} - -export function DtoCreateServerRequestToJSONTyped(value?: DtoCreateServerRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'hostname': value['hostname'], - 'private_ip_address': value['private_ip_address'], - 'public_ip_address': value['public_ip_address'], - 'role': value['role'], - 'ssh_key_id': value['ssh_key_id'], - 'ssh_user': value['ssh_user'], - 'status': value['status'], - }; -} - diff --git a/ui/src/sdk/models/DtoCreateTaintRequest.ts b/ui/src/sdk/models/DtoCreateTaintRequest.ts deleted file mode 100644 index 1f10462..0000000 --- a/ui/src/sdk/models/DtoCreateTaintRequest.ts +++ /dev/null @@ -1,80 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoCreateTaintRequest - */ -export interface DtoCreateTaintRequest { - /** - * - * @type {string} - * @memberof DtoCreateTaintRequest - */ - effect?: string; - /** - * - * @type {string} - * @memberof DtoCreateTaintRequest - */ - key?: string; - /** - * - * @type {string} - * @memberof DtoCreateTaintRequest - */ - value?: string; -} - -/** - * Check if a given object implements the DtoCreateTaintRequest interface. - */ -export function instanceOfDtoCreateTaintRequest(value: object): value is DtoCreateTaintRequest { - return true; -} - -export function DtoCreateTaintRequestFromJSON(json: any): DtoCreateTaintRequest { - return DtoCreateTaintRequestFromJSONTyped(json, false); -} - -export function DtoCreateTaintRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoCreateTaintRequest { - if (json == null) { - return json; - } - return { - - 'effect': json['effect'] == null ? undefined : json['effect'], - 'key': json['key'] == null ? undefined : json['key'], - 'value': json['value'] == null ? undefined : json['value'], - }; -} - -export function DtoCreateTaintRequestToJSON(json: any): DtoCreateTaintRequest { - return DtoCreateTaintRequestToJSONTyped(json, false); -} - -export function DtoCreateTaintRequestToJSONTyped(value?: DtoCreateTaintRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'effect': value['effect'], - 'key': value['key'], - 'value': value['value'], - }; -} - diff --git a/ui/src/sdk/models/DtoCredentialOut.ts b/ui/src/sdk/models/DtoCredentialOut.ts deleted file mode 100644 index 84fb4f0..0000000 --- a/ui/src/sdk/models/DtoCredentialOut.ts +++ /dev/null @@ -1,152 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoCredentialOut - */ -export interface DtoCredentialOut { - /** - * - * @type {string} - * @memberof DtoCredentialOut - */ - account_id?: string; - /** - * - * @type {string} - * @memberof DtoCredentialOut - */ - created_at?: string; - /** - * - * @type {string} - * @memberof DtoCredentialOut - */ - id?: string; - /** - * - * @type {string} - * @memberof DtoCredentialOut - */ - kind?: string; - /** - * - * @type {string} - * @memberof DtoCredentialOut - */ - name?: string; - /** - * - * @type {string} - * @memberof DtoCredentialOut - */ - provider?: string; - /** - * - * @type {string} - * @memberof DtoCredentialOut - */ - region?: string; - /** - * - * @type {number} - * @memberof DtoCredentialOut - */ - schema_version?: number; - /** - * - * @type {object} - * @memberof DtoCredentialOut - */ - scope?: object; - /** - * - * @type {string} - * @memberof DtoCredentialOut - */ - scope_kind?: string; - /** - * - * @type {number} - * @memberof DtoCredentialOut - */ - scope_version?: number; - /** - * - * @type {string} - * @memberof DtoCredentialOut - */ - updated_at?: string; -} - -/** - * Check if a given object implements the DtoCredentialOut interface. - */ -export function instanceOfDtoCredentialOut(value: object): value is DtoCredentialOut { - return true; -} - -export function DtoCredentialOutFromJSON(json: any): DtoCredentialOut { - return DtoCredentialOutFromJSONTyped(json, false); -} - -export function DtoCredentialOutFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoCredentialOut { - if (json == null) { - return json; - } - return { - - 'account_id': json['account_id'] == null ? undefined : json['account_id'], - 'created_at': json['created_at'] == null ? undefined : json['created_at'], - 'id': json['id'] == null ? undefined : json['id'], - 'kind': json['kind'] == null ? undefined : json['kind'], - 'name': json['name'] == null ? undefined : json['name'], - 'provider': json['provider'] == null ? undefined : json['provider'], - 'region': json['region'] == null ? undefined : json['region'], - 'schema_version': json['schema_version'] == null ? undefined : json['schema_version'], - 'scope': json['scope'] == null ? undefined : json['scope'], - 'scope_kind': json['scope_kind'] == null ? undefined : json['scope_kind'], - 'scope_version': json['scope_version'] == null ? undefined : json['scope_version'], - 'updated_at': json['updated_at'] == null ? undefined : json['updated_at'], - }; -} - -export function DtoCredentialOutToJSON(json: any): DtoCredentialOut { - return DtoCredentialOutToJSONTyped(json, false); -} - -export function DtoCredentialOutToJSONTyped(value?: DtoCredentialOut | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'account_id': value['account_id'], - 'created_at': value['created_at'], - 'id': value['id'], - 'kind': value['kind'], - 'name': value['name'], - 'provider': value['provider'], - 'region': value['region'], - 'schema_version': value['schema_version'], - 'scope': value['scope'], - 'scope_kind': value['scope_kind'], - 'scope_version': value['scope_version'], - 'updated_at': value['updated_at'], - }; -} - diff --git a/ui/src/sdk/models/DtoEnqueueRequest.ts b/ui/src/sdk/models/DtoEnqueueRequest.ts deleted file mode 100644 index afd7f87..0000000 --- a/ui/src/sdk/models/DtoEnqueueRequest.ts +++ /dev/null @@ -1,88 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoEnqueueRequest - */ -export interface DtoEnqueueRequest { - /** - * - * @type {object} - * @memberof DtoEnqueueRequest - */ - payload?: object; - /** - * - * @type {string} - * @memberof DtoEnqueueRequest - */ - queue?: string; - /** - * - * @type {string} - * @memberof DtoEnqueueRequest - */ - run_at?: string; - /** - * - * @type {string} - * @memberof DtoEnqueueRequest - */ - type?: string; -} - -/** - * Check if a given object implements the DtoEnqueueRequest interface. - */ -export function instanceOfDtoEnqueueRequest(value: object): value is DtoEnqueueRequest { - return true; -} - -export function DtoEnqueueRequestFromJSON(json: any): DtoEnqueueRequest { - return DtoEnqueueRequestFromJSONTyped(json, false); -} - -export function DtoEnqueueRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoEnqueueRequest { - if (json == null) { - return json; - } - return { - - 'payload': json['payload'] == null ? undefined : json['payload'], - 'queue': json['queue'] == null ? undefined : json['queue'], - 'run_at': json['run_at'] == null ? undefined : json['run_at'], - 'type': json['type'] == null ? undefined : json['type'], - }; -} - -export function DtoEnqueueRequestToJSON(json: any): DtoEnqueueRequest { - return DtoEnqueueRequestToJSONTyped(json, false); -} - -export function DtoEnqueueRequestToJSONTyped(value?: DtoEnqueueRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'payload': value['payload'], - 'queue': value['queue'], - 'run_at': value['run_at'], - 'type': value['type'], - }; -} - diff --git a/ui/src/sdk/models/DtoJWK.ts b/ui/src/sdk/models/DtoJWK.ts deleted file mode 100644 index 5f9487d..0000000 --- a/ui/src/sdk/models/DtoJWK.ts +++ /dev/null @@ -1,112 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoJWK - */ -export interface DtoJWK { - /** - * - * @type {string} - * @memberof DtoJWK - */ - alg?: string; - /** - * - * @type {string} - * @memberof DtoJWK - */ - e?: string; - /** - * - * @type {string} - * @memberof DtoJWK - */ - kid?: string; - /** - * - * @type {string} - * @memberof DtoJWK - */ - kty?: string; - /** - * - * @type {string} - * @memberof DtoJWK - */ - n?: string; - /** - * - * @type {string} - * @memberof DtoJWK - */ - use?: string; - /** - * - * @type {string} - * @memberof DtoJWK - */ - x?: string; -} - -/** - * Check if a given object implements the DtoJWK interface. - */ -export function instanceOfDtoJWK(value: object): value is DtoJWK { - return true; -} - -export function DtoJWKFromJSON(json: any): DtoJWK { - return DtoJWKFromJSONTyped(json, false); -} - -export function DtoJWKFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoJWK { - if (json == null) { - return json; - } - return { - - 'alg': json['alg'] == null ? undefined : json['alg'], - 'e': json['e'] == null ? undefined : json['e'], - 'kid': json['kid'] == null ? undefined : json['kid'], - 'kty': json['kty'] == null ? undefined : json['kty'], - 'n': json['n'] == null ? undefined : json['n'], - 'use': json['use'] == null ? undefined : json['use'], - 'x': json['x'] == null ? undefined : json['x'], - }; -} - -export function DtoJWKToJSON(json: any): DtoJWK { - return DtoJWKToJSONTyped(json, false); -} - -export function DtoJWKToJSONTyped(value?: DtoJWK | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'alg': value['alg'], - 'e': value['e'], - 'kid': value['kid'], - 'kty': value['kty'], - 'n': value['n'], - 'use': value['use'], - 'x': value['x'], - }; -} - diff --git a/ui/src/sdk/models/DtoJWKS.ts b/ui/src/sdk/models/DtoJWKS.ts deleted file mode 100644 index 7e05ff4..0000000 --- a/ui/src/sdk/models/DtoJWKS.ts +++ /dev/null @@ -1,67 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import type { DtoJWK } from "./DtoJWK" -import { DtoJWKFromJSON, DtoJWKToJSON, } from "./DtoJWK" - -/** - * - * @export - * @interface DtoJWKS - */ -export interface DtoJWKS { - /** - * - * @type {Array} - * @memberof DtoJWKS - */ - keys?: Array; -} - -/** - * Check if a given object implements the DtoJWKS interface. - */ -export function instanceOfDtoJWKS(value: object): value is DtoJWKS { - return true; -} - -export function DtoJWKSFromJSON(json: any): DtoJWKS { - return DtoJWKSFromJSONTyped(json, false); -} - -export function DtoJWKSFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoJWKS { - if (json == null) { - return json; - } - return { - - 'keys': json['keys'] == null ? undefined : ((json['keys'] as Array).map(DtoJWKFromJSON)), - }; -} - -export function DtoJWKSToJSON(json: any): DtoJWKS { - return DtoJWKSToJSONTyped(json, false); -} - -export function DtoJWKSToJSONTyped(value?: DtoJWKS | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'keys': value['keys'] == null ? undefined : ((value['keys'] as Array).map(DtoJWKToJSON)), - }; -} - diff --git a/ui/src/sdk/models/DtoJob.ts b/ui/src/sdk/models/DtoJob.ts deleted file mode 100644 index 49563fa..0000000 --- a/ui/src/sdk/models/DtoJob.ts +++ /dev/null @@ -1,149 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import type { DtoJobStatus } from "./DtoJobStatus" -import { DtoJobStatusFromJSON, DtoJobStatusToJSON, } from "./DtoJobStatus" - -/** - * - * @export - * @interface DtoJob - */ -export interface DtoJob { - /** - * - * @type {number} - * @memberof DtoJob - */ - attempts?: number; - /** - * - * @type {string} - * @memberof DtoJob - */ - created_at?: string; - /** - * - * @type {string} - * @memberof DtoJob - */ - id?: string; - /** - * - * @type {string} - * @memberof DtoJob - */ - last_error?: string; - /** - * - * @type {number} - * @memberof DtoJob - */ - max_attempts?: number; - /** - * - * @type {object} - * @memberof DtoJob - */ - payload?: object; - /** - * - * @type {string} - * @memberof DtoJob - */ - queue?: string; - /** - * - * @type {string} - * @memberof DtoJob - */ - run_at?: string; - /** - * - * @type {DtoJobStatus} - * @memberof DtoJob - */ - status?: DtoJobStatus; - /** - * - * @type {string} - * @memberof DtoJob - */ - type?: string; - /** - * - * @type {string} - * @memberof DtoJob - */ - updated_at?: string; -} - - - -/** - * Check if a given object implements the DtoJob interface. - */ -export function instanceOfDtoJob(value: object): value is DtoJob { - return true; -} - -export function DtoJobFromJSON(json: any): DtoJob { - return DtoJobFromJSONTyped(json, false); -} - -export function DtoJobFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoJob { - if (json == null) { - return json; - } - return { - - 'attempts': json['attempts'] == null ? undefined : json['attempts'], - 'created_at': json['created_at'] == null ? undefined : json['created_at'], - 'id': json['id'] == null ? undefined : json['id'], - 'last_error': json['last_error'] == null ? undefined : json['last_error'], - 'max_attempts': json['max_attempts'] == null ? undefined : json['max_attempts'], - 'payload': json['payload'] == null ? undefined : json['payload'], - 'queue': json['queue'] == null ? undefined : json['queue'], - 'run_at': json['run_at'] == null ? undefined : json['run_at'], - 'status': json['status'] == null ? undefined : DtoJobStatusFromJSON(json['status']), - 'type': json['type'] == null ? undefined : json['type'], - 'updated_at': json['updated_at'] == null ? undefined : json['updated_at'], - }; -} - -export function DtoJobToJSON(json: any): DtoJob { - return DtoJobToJSONTyped(json, false); -} - -export function DtoJobToJSONTyped(value?: DtoJob | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'attempts': value['attempts'], - 'created_at': value['created_at'], - 'id': value['id'], - 'last_error': value['last_error'], - 'max_attempts': value['max_attempts'], - 'payload': value['payload'], - 'queue': value['queue'], - 'run_at': value['run_at'], - 'status': DtoJobStatusToJSON(value['status']), - 'type': value['type'], - 'updated_at': value['updated_at'], - }; -} - diff --git a/ui/src/sdk/models/DtoJobStatus.ts b/ui/src/sdk/models/DtoJobStatus.ts deleted file mode 100644 index 28fbc9b..0000000 --- a/ui/src/sdk/models/DtoJobStatus.ts +++ /dev/null @@ -1,58 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -/** - * - * @export - */ -export const DtoJobStatus = { - StatusQueued: 'queued', - StatusRunning: 'running', - StatusSucceeded: 'succeeded', - StatusFailed: 'failed', - StatusCanceled: 'canceled', - StatusRetrying: 'retrying', - StatusScheduled: 'scheduled' -} as const; -export type DtoJobStatus = typeof DtoJobStatus[keyof typeof DtoJobStatus]; - - -export function instanceOfDtoJobStatus(value: any): boolean { - for (const key in DtoJobStatus) { - if (Object.prototype.hasOwnProperty.call(DtoJobStatus, key)) { - if (DtoJobStatus[key as keyof typeof DtoJobStatus] === value) { - return true; - } - } - } - return false; -} - -export function DtoJobStatusFromJSON(json: any): DtoJobStatus { - return DtoJobStatusFromJSONTyped(json, false); -} - -export function DtoJobStatusFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoJobStatus { - return json as DtoJobStatus; -} - -export function DtoJobStatusToJSON(value?: DtoJobStatus | null): any { - return value as any; -} - -export function DtoJobStatusToJSONTyped(value: any, ignoreDiscriminator: boolean): DtoJobStatus { - return value as DtoJobStatus; -} - diff --git a/ui/src/sdk/models/DtoLabelResponse.ts b/ui/src/sdk/models/DtoLabelResponse.ts deleted file mode 100644 index 6f184df..0000000 --- a/ui/src/sdk/models/DtoLabelResponse.ts +++ /dev/null @@ -1,104 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoLabelResponse - */ -export interface DtoLabelResponse { - /** - * - * @type {string} - * @memberof DtoLabelResponse - */ - created_at?: string; - /** - * - * @type {string} - * @memberof DtoLabelResponse - */ - id?: string; - /** - * - * @type {string} - * @memberof DtoLabelResponse - */ - key?: string; - /** - * - * @type {string} - * @memberof DtoLabelResponse - */ - organization_id?: string; - /** - * - * @type {string} - * @memberof DtoLabelResponse - */ - updated_at?: string; - /** - * - * @type {string} - * @memberof DtoLabelResponse - */ - value?: string; -} - -/** - * Check if a given object implements the DtoLabelResponse interface. - */ -export function instanceOfDtoLabelResponse(value: object): value is DtoLabelResponse { - return true; -} - -export function DtoLabelResponseFromJSON(json: any): DtoLabelResponse { - return DtoLabelResponseFromJSONTyped(json, false); -} - -export function DtoLabelResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoLabelResponse { - if (json == null) { - return json; - } - return { - - 'created_at': json['created_at'] == null ? undefined : json['created_at'], - 'id': json['id'] == null ? undefined : json['id'], - 'key': json['key'] == null ? undefined : json['key'], - 'organization_id': json['organization_id'] == null ? undefined : json['organization_id'], - 'updated_at': json['updated_at'] == null ? undefined : json['updated_at'], - 'value': json['value'] == null ? undefined : json['value'], - }; -} - -export function DtoLabelResponseToJSON(json: any): DtoLabelResponse { - return DtoLabelResponseToJSONTyped(json, false); -} - -export function DtoLabelResponseToJSONTyped(value?: DtoLabelResponse | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'created_at': value['created_at'], - 'id': value['id'], - 'key': value['key'], - 'organization_id': value['organization_id'], - 'updated_at': value['updated_at'], - 'value': value['value'], - }; -} - diff --git a/ui/src/sdk/models/DtoLogoutRequest.ts b/ui/src/sdk/models/DtoLogoutRequest.ts deleted file mode 100644 index 53a6084..0000000 --- a/ui/src/sdk/models/DtoLogoutRequest.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoLogoutRequest - */ -export interface DtoLogoutRequest { - /** - * - * @type {string} - * @memberof DtoLogoutRequest - */ - refresh_token?: string; -} - -/** - * Check if a given object implements the DtoLogoutRequest interface. - */ -export function instanceOfDtoLogoutRequest(value: object): value is DtoLogoutRequest { - return true; -} - -export function DtoLogoutRequestFromJSON(json: any): DtoLogoutRequest { - return DtoLogoutRequestFromJSONTyped(json, false); -} - -export function DtoLogoutRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoLogoutRequest { - if (json == null) { - return json; - } - return { - - 'refresh_token': json['refresh_token'] == null ? undefined : json['refresh_token'], - }; -} - -export function DtoLogoutRequestToJSON(json: any): DtoLogoutRequest { - return DtoLogoutRequestToJSONTyped(json, false); -} - -export function DtoLogoutRequestToJSONTyped(value?: DtoLogoutRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'refresh_token': value['refresh_token'], - }; -} - diff --git a/ui/src/sdk/models/DtoNodePoolResponse.ts b/ui/src/sdk/models/DtoNodePoolResponse.ts deleted file mode 100644 index 7adcd07..0000000 --- a/ui/src/sdk/models/DtoNodePoolResponse.ts +++ /dev/null @@ -1,156 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import type { DtoTaintResponse } from "./DtoTaintResponse" -import { DtoTaintResponseFromJSON, DtoTaintResponseToJSON, } from "./DtoTaintResponse" -import type { DtoLabelResponse } from "./DtoLabelResponse" -import { DtoLabelResponseFromJSON, DtoLabelResponseToJSON, } from "./DtoLabelResponse" -import type { DtoServerResponse } from "./DtoServerResponse" -import { DtoServerResponseFromJSON, DtoServerResponseToJSON, } from "./DtoServerResponse" -import type { DtoAnnotationResponse } from "./DtoAnnotationResponse" -import { DtoAnnotationResponseFromJSON, DtoAnnotationResponseToJSON, } from "./DtoAnnotationResponse" - -/** - * - * @export - * @interface DtoNodePoolResponse - */ -export interface DtoNodePoolResponse { - /** - * - * @type {Array} - * @memberof DtoNodePoolResponse - */ - annotations?: Array; - /** - * - * @type {string} - * @memberof DtoNodePoolResponse - */ - created_at?: string; - /** - * - * @type {string} - * @memberof DtoNodePoolResponse - */ - id?: string; - /** - * - * @type {Array} - * @memberof DtoNodePoolResponse - */ - labels?: Array; - /** - * - * @type {string} - * @memberof DtoNodePoolResponse - */ - name?: string; - /** - * - * @type {string} - * @memberof DtoNodePoolResponse - */ - organization_id?: string; - /** - * - * @type {string} - * @memberof DtoNodePoolResponse - */ - role?: DtoNodePoolResponseRoleEnum; - /** - * - * @type {Array} - * @memberof DtoNodePoolResponse - */ - servers?: Array; - /** - * - * @type {Array} - * @memberof DtoNodePoolResponse - */ - taints?: Array; - /** - * - * @type {string} - * @memberof DtoNodePoolResponse - */ - updated_at?: string; -} - - -/** - * @export - */ -export const DtoNodePoolResponseRoleEnum = { - master: 'master', - worker: 'worker' -} as const; -export type DtoNodePoolResponseRoleEnum = typeof DtoNodePoolResponseRoleEnum[keyof typeof DtoNodePoolResponseRoleEnum]; - - -/** - * Check if a given object implements the DtoNodePoolResponse interface. - */ -export function instanceOfDtoNodePoolResponse(value: object): value is DtoNodePoolResponse { - return true; -} - -export function DtoNodePoolResponseFromJSON(json: any): DtoNodePoolResponse { - return DtoNodePoolResponseFromJSONTyped(json, false); -} - -export function DtoNodePoolResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoNodePoolResponse { - if (json == null) { - return json; - } - return { - - 'annotations': json['annotations'] == null ? undefined : ((json['annotations'] as Array).map(DtoAnnotationResponseFromJSON)), - 'created_at': json['created_at'] == null ? undefined : json['created_at'], - 'id': json['id'] == null ? undefined : json['id'], - 'labels': json['labels'] == null ? undefined : ((json['labels'] as Array).map(DtoLabelResponseFromJSON)), - 'name': json['name'] == null ? undefined : json['name'], - 'organization_id': json['organization_id'] == null ? undefined : json['organization_id'], - 'role': json['role'] == null ? undefined : json['role'], - 'servers': json['servers'] == null ? undefined : ((json['servers'] as Array).map(DtoServerResponseFromJSON)), - 'taints': json['taints'] == null ? undefined : ((json['taints'] as Array).map(DtoTaintResponseFromJSON)), - 'updated_at': json['updated_at'] == null ? undefined : json['updated_at'], - }; -} - -export function DtoNodePoolResponseToJSON(json: any): DtoNodePoolResponse { - return DtoNodePoolResponseToJSONTyped(json, false); -} - -export function DtoNodePoolResponseToJSONTyped(value?: DtoNodePoolResponse | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'annotations': value['annotations'] == null ? undefined : ((value['annotations'] as Array).map(DtoAnnotationResponseToJSON)), - 'created_at': value['created_at'], - 'id': value['id'], - 'labels': value['labels'] == null ? undefined : ((value['labels'] as Array).map(DtoLabelResponseToJSON)), - 'name': value['name'], - 'organization_id': value['organization_id'], - 'role': value['role'], - 'servers': value['servers'] == null ? undefined : ((value['servers'] as Array).map(DtoServerResponseToJSON)), - 'taints': value['taints'] == null ? undefined : ((value['taints'] as Array).map(DtoTaintResponseToJSON)), - 'updated_at': value['updated_at'], - }; -} - diff --git a/ui/src/sdk/models/DtoPageJob.ts b/ui/src/sdk/models/DtoPageJob.ts deleted file mode 100644 index 4109abc..0000000 --- a/ui/src/sdk/models/DtoPageJob.ts +++ /dev/null @@ -1,91 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import type { DtoJob } from "./DtoJob" -import { DtoJobFromJSON, DtoJobToJSON, } from "./DtoJob" - -/** - * - * @export - * @interface DtoPageJob - */ -export interface DtoPageJob { - /** - * - * @type {Array} - * @memberof DtoPageJob - */ - items?: Array; - /** - * - * @type {number} - * @memberof DtoPageJob - */ - page?: number; - /** - * - * @type {number} - * @memberof DtoPageJob - */ - page_size?: number; - /** - * - * @type {number} - * @memberof DtoPageJob - */ - total?: number; -} - -/** - * Check if a given object implements the DtoPageJob interface. - */ -export function instanceOfDtoPageJob(value: object): value is DtoPageJob { - return true; -} - -export function DtoPageJobFromJSON(json: any): DtoPageJob { - return DtoPageJobFromJSONTyped(json, false); -} - -export function DtoPageJobFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoPageJob { - if (json == null) { - return json; - } - return { - - 'items': json['items'] == null ? undefined : ((json['items'] as Array).map(DtoJobFromJSON)), - 'page': json['page'] == null ? undefined : json['page'], - 'page_size': json['page_size'] == null ? undefined : json['page_size'], - 'total': json['total'] == null ? undefined : json['total'], - }; -} - -export function DtoPageJobToJSON(json: any): DtoPageJob { - return DtoPageJobToJSONTyped(json, false); -} - -export function DtoPageJobToJSONTyped(value?: DtoPageJob | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'items': value['items'] == null ? undefined : ((value['items'] as Array).map(DtoJobToJSON)), - 'page': value['page'], - 'page_size': value['page_size'], - 'total': value['total'], - }; -} - diff --git a/ui/src/sdk/models/DtoQueueInfo.ts b/ui/src/sdk/models/DtoQueueInfo.ts deleted file mode 100644 index 4a7eeda..0000000 --- a/ui/src/sdk/models/DtoQueueInfo.ts +++ /dev/null @@ -1,96 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoQueueInfo - */ -export interface DtoQueueInfo { - /** - * - * @type {number} - * @memberof DtoQueueInfo - */ - failed?: number; - /** - * - * @type {string} - * @memberof DtoQueueInfo - */ - name?: string; - /** - * - * @type {number} - * @memberof DtoQueueInfo - */ - pending?: number; - /** - * - * @type {number} - * @memberof DtoQueueInfo - */ - running?: number; - /** - * - * @type {number} - * @memberof DtoQueueInfo - */ - scheduled?: number; -} - -/** - * Check if a given object implements the DtoQueueInfo interface. - */ -export function instanceOfDtoQueueInfo(value: object): value is DtoQueueInfo { - return true; -} - -export function DtoQueueInfoFromJSON(json: any): DtoQueueInfo { - return DtoQueueInfoFromJSONTyped(json, false); -} - -export function DtoQueueInfoFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoQueueInfo { - if (json == null) { - return json; - } - return { - - 'failed': json['failed'] == null ? undefined : json['failed'], - 'name': json['name'] == null ? undefined : json['name'], - 'pending': json['pending'] == null ? undefined : json['pending'], - 'running': json['running'] == null ? undefined : json['running'], - 'scheduled': json['scheduled'] == null ? undefined : json['scheduled'], - }; -} - -export function DtoQueueInfoToJSON(json: any): DtoQueueInfo { - return DtoQueueInfoToJSONTyped(json, false); -} - -export function DtoQueueInfoToJSONTyped(value?: DtoQueueInfo | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'failed': value['failed'], - 'name': value['name'], - 'pending': value['pending'], - 'running': value['running'], - 'scheduled': value['scheduled'], - }; -} - diff --git a/ui/src/sdk/models/DtoRefreshRequest.ts b/ui/src/sdk/models/DtoRefreshRequest.ts deleted file mode 100644 index 7a7cb73..0000000 --- a/ui/src/sdk/models/DtoRefreshRequest.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoRefreshRequest - */ -export interface DtoRefreshRequest { - /** - * - * @type {string} - * @memberof DtoRefreshRequest - */ - refresh_token?: string; -} - -/** - * Check if a given object implements the DtoRefreshRequest interface. - */ -export function instanceOfDtoRefreshRequest(value: object): value is DtoRefreshRequest { - return true; -} - -export function DtoRefreshRequestFromJSON(json: any): DtoRefreshRequest { - return DtoRefreshRequestFromJSONTyped(json, false); -} - -export function DtoRefreshRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoRefreshRequest { - if (json == null) { - return json; - } - return { - - 'refresh_token': json['refresh_token'] == null ? undefined : json['refresh_token'], - }; -} - -export function DtoRefreshRequestToJSON(json: any): DtoRefreshRequest { - return DtoRefreshRequestToJSONTyped(json, false); -} - -export function DtoRefreshRequestToJSONTyped(value?: DtoRefreshRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'refresh_token': value['refresh_token'], - }; -} - diff --git a/ui/src/sdk/models/DtoServerResponse.ts b/ui/src/sdk/models/DtoServerResponse.ts deleted file mode 100644 index 5741f65..0000000 --- a/ui/src/sdk/models/DtoServerResponse.ts +++ /dev/null @@ -1,167 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoServerResponse - */ -export interface DtoServerResponse { - /** - * - * @type {string} - * @memberof DtoServerResponse - */ - created_at?: string; - /** - * - * @type {string} - * @memberof DtoServerResponse - */ - hostname?: string; - /** - * - * @type {string} - * @memberof DtoServerResponse - */ - id?: string; - /** - * - * @type {string} - * @memberof DtoServerResponse - */ - organization_id?: string; - /** - * - * @type {string} - * @memberof DtoServerResponse - */ - private_ip_address?: string; - /** - * - * @type {string} - * @memberof DtoServerResponse - */ - public_ip_address?: string; - /** - * - * @type {string} - * @memberof DtoServerResponse - */ - role?: DtoServerResponseRoleEnum; - /** - * - * @type {string} - * @memberof DtoServerResponse - */ - ssh_key_id?: string; - /** - * - * @type {string} - * @memberof DtoServerResponse - */ - ssh_user?: string; - /** - * - * @type {string} - * @memberof DtoServerResponse - */ - status?: DtoServerResponseStatusEnum; - /** - * - * @type {string} - * @memberof DtoServerResponse - */ - updated_at?: string; -} - - -/** - * @export - */ -export const DtoServerResponseRoleEnum = { - master: 'master', - worker: 'worker', - bastion: 'bastion' -} as const; -export type DtoServerResponseRoleEnum = typeof DtoServerResponseRoleEnum[keyof typeof DtoServerResponseRoleEnum]; - -/** - * @export - */ -export const DtoServerResponseStatusEnum = { - pending: 'pending', - provisioning: 'provisioning', - ready: 'ready', - failed: 'failed' -} as const; -export type DtoServerResponseStatusEnum = typeof DtoServerResponseStatusEnum[keyof typeof DtoServerResponseStatusEnum]; - - -/** - * Check if a given object implements the DtoServerResponse interface. - */ -export function instanceOfDtoServerResponse(value: object): value is DtoServerResponse { - return true; -} - -export function DtoServerResponseFromJSON(json: any): DtoServerResponse { - return DtoServerResponseFromJSONTyped(json, false); -} - -export function DtoServerResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoServerResponse { - if (json == null) { - return json; - } - return { - - 'created_at': json['created_at'] == null ? undefined : json['created_at'], - 'hostname': json['hostname'] == null ? undefined : json['hostname'], - 'id': json['id'] == null ? undefined : json['id'], - 'organization_id': json['organization_id'] == null ? undefined : json['organization_id'], - 'private_ip_address': json['private_ip_address'] == null ? undefined : json['private_ip_address'], - 'public_ip_address': json['public_ip_address'] == null ? undefined : json['public_ip_address'], - 'role': json['role'] == null ? undefined : json['role'], - 'ssh_key_id': json['ssh_key_id'] == null ? undefined : json['ssh_key_id'], - 'ssh_user': json['ssh_user'] == null ? undefined : json['ssh_user'], - 'status': json['status'] == null ? undefined : json['status'], - 'updated_at': json['updated_at'] == null ? undefined : json['updated_at'], - }; -} - -export function DtoServerResponseToJSON(json: any): DtoServerResponse { - return DtoServerResponseToJSONTyped(json, false); -} - -export function DtoServerResponseToJSONTyped(value?: DtoServerResponse | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'created_at': value['created_at'], - 'hostname': value['hostname'], - 'id': value['id'], - 'organization_id': value['organization_id'], - 'private_ip_address': value['private_ip_address'], - 'public_ip_address': value['public_ip_address'], - 'role': value['role'], - 'ssh_key_id': value['ssh_key_id'], - 'ssh_user': value['ssh_user'], - 'status': value['status'], - 'updated_at': value['updated_at'], - }; -} - diff --git a/ui/src/sdk/models/DtoSshResponse.ts b/ui/src/sdk/models/DtoSshResponse.ts deleted file mode 100644 index 0549e20..0000000 --- a/ui/src/sdk/models/DtoSshResponse.ts +++ /dev/null @@ -1,112 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoSshResponse - */ -export interface DtoSshResponse { - /** - * - * @type {string} - * @memberof DtoSshResponse - */ - created_at?: string; - /** - * - * @type {string} - * @memberof DtoSshResponse - */ - fingerprint?: string; - /** - * - * @type {string} - * @memberof DtoSshResponse - */ - id?: string; - /** - * - * @type {string} - * @memberof DtoSshResponse - */ - name?: string; - /** - * - * @type {string} - * @memberof DtoSshResponse - */ - organization_id?: string; - /** - * - * @type {string} - * @memberof DtoSshResponse - */ - public_key?: string; - /** - * - * @type {string} - * @memberof DtoSshResponse - */ - updated_at?: string; -} - -/** - * Check if a given object implements the DtoSshResponse interface. - */ -export function instanceOfDtoSshResponse(value: object): value is DtoSshResponse { - return true; -} - -export function DtoSshResponseFromJSON(json: any): DtoSshResponse { - return DtoSshResponseFromJSONTyped(json, false); -} - -export function DtoSshResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoSshResponse { - if (json == null) { - return json; - } - return { - - 'created_at': json['created_at'] == null ? undefined : json['created_at'], - 'fingerprint': json['fingerprint'] == null ? undefined : json['fingerprint'], - 'id': json['id'] == null ? undefined : json['id'], - 'name': json['name'] == null ? undefined : json['name'], - 'organization_id': json['organization_id'] == null ? undefined : json['organization_id'], - 'public_key': json['public_key'] == null ? undefined : json['public_key'], - 'updated_at': json['updated_at'] == null ? undefined : json['updated_at'], - }; -} - -export function DtoSshResponseToJSON(json: any): DtoSshResponse { - return DtoSshResponseToJSONTyped(json, false); -} - -export function DtoSshResponseToJSONTyped(value?: DtoSshResponse | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'created_at': value['created_at'], - 'fingerprint': value['fingerprint'], - 'id': value['id'], - 'name': value['name'], - 'organization_id': value['organization_id'], - 'public_key': value['public_key'], - 'updated_at': value['updated_at'], - }; -} - diff --git a/ui/src/sdk/models/DtoSshRevealResponse.ts b/ui/src/sdk/models/DtoSshRevealResponse.ts deleted file mode 100644 index 71f2e55..0000000 --- a/ui/src/sdk/models/DtoSshRevealResponse.ts +++ /dev/null @@ -1,120 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoSshRevealResponse - */ -export interface DtoSshRevealResponse { - /** - * - * @type {string} - * @memberof DtoSshRevealResponse - */ - created_at?: string; - /** - * - * @type {string} - * @memberof DtoSshRevealResponse - */ - fingerprint?: string; - /** - * - * @type {string} - * @memberof DtoSshRevealResponse - */ - id?: string; - /** - * - * @type {string} - * @memberof DtoSshRevealResponse - */ - name?: string; - /** - * - * @type {string} - * @memberof DtoSshRevealResponse - */ - organization_id?: string; - /** - * - * @type {string} - * @memberof DtoSshRevealResponse - */ - private_key?: string; - /** - * - * @type {string} - * @memberof DtoSshRevealResponse - */ - public_key?: string; - /** - * - * @type {string} - * @memberof DtoSshRevealResponse - */ - updated_at?: string; -} - -/** - * Check if a given object implements the DtoSshRevealResponse interface. - */ -export function instanceOfDtoSshRevealResponse(value: object): value is DtoSshRevealResponse { - return true; -} - -export function DtoSshRevealResponseFromJSON(json: any): DtoSshRevealResponse { - return DtoSshRevealResponseFromJSONTyped(json, false); -} - -export function DtoSshRevealResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoSshRevealResponse { - if (json == null) { - return json; - } - return { - - 'created_at': json['created_at'] == null ? undefined : json['created_at'], - 'fingerprint': json['fingerprint'] == null ? undefined : json['fingerprint'], - 'id': json['id'] == null ? undefined : json['id'], - 'name': json['name'] == null ? undefined : json['name'], - 'organization_id': json['organization_id'] == null ? undefined : json['organization_id'], - 'private_key': json['private_key'] == null ? undefined : json['private_key'], - 'public_key': json['public_key'] == null ? undefined : json['public_key'], - 'updated_at': json['updated_at'] == null ? undefined : json['updated_at'], - }; -} - -export function DtoSshRevealResponseToJSON(json: any): DtoSshRevealResponse { - return DtoSshRevealResponseToJSONTyped(json, false); -} - -export function DtoSshRevealResponseToJSONTyped(value?: DtoSshRevealResponse | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'created_at': value['created_at'], - 'fingerprint': value['fingerprint'], - 'id': value['id'], - 'name': value['name'], - 'organization_id': value['organization_id'], - 'private_key': value['private_key'], - 'public_key': value['public_key'], - 'updated_at': value['updated_at'], - }; -} - diff --git a/ui/src/sdk/models/DtoTaintResponse.ts b/ui/src/sdk/models/DtoTaintResponse.ts deleted file mode 100644 index 08a8874..0000000 --- a/ui/src/sdk/models/DtoTaintResponse.ts +++ /dev/null @@ -1,112 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoTaintResponse - */ -export interface DtoTaintResponse { - /** - * - * @type {string} - * @memberof DtoTaintResponse - */ - created_at?: string; - /** - * - * @type {string} - * @memberof DtoTaintResponse - */ - effect?: string; - /** - * - * @type {string} - * @memberof DtoTaintResponse - */ - id?: string; - /** - * - * @type {string} - * @memberof DtoTaintResponse - */ - key?: string; - /** - * - * @type {string} - * @memberof DtoTaintResponse - */ - organization_id?: string; - /** - * - * @type {string} - * @memberof DtoTaintResponse - */ - updated_at?: string; - /** - * - * @type {string} - * @memberof DtoTaintResponse - */ - value?: string; -} - -/** - * Check if a given object implements the DtoTaintResponse interface. - */ -export function instanceOfDtoTaintResponse(value: object): value is DtoTaintResponse { - return true; -} - -export function DtoTaintResponseFromJSON(json: any): DtoTaintResponse { - return DtoTaintResponseFromJSONTyped(json, false); -} - -export function DtoTaintResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoTaintResponse { - if (json == null) { - return json; - } - return { - - 'created_at': json['created_at'] == null ? undefined : json['created_at'], - 'effect': json['effect'] == null ? undefined : json['effect'], - 'id': json['id'] == null ? undefined : json['id'], - 'key': json['key'] == null ? undefined : json['key'], - 'organization_id': json['organization_id'] == null ? undefined : json['organization_id'], - 'updated_at': json['updated_at'] == null ? undefined : json['updated_at'], - 'value': json['value'] == null ? undefined : json['value'], - }; -} - -export function DtoTaintResponseToJSON(json: any): DtoTaintResponse { - return DtoTaintResponseToJSONTyped(json, false); -} - -export function DtoTaintResponseToJSONTyped(value?: DtoTaintResponse | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'created_at': value['created_at'], - 'effect': value['effect'], - 'id': value['id'], - 'key': value['key'], - 'organization_id': value['organization_id'], - 'updated_at': value['updated_at'], - 'value': value['value'], - }; -} - diff --git a/ui/src/sdk/models/DtoTokenPair.ts b/ui/src/sdk/models/DtoTokenPair.ts deleted file mode 100644 index c7bad5e..0000000 --- a/ui/src/sdk/models/DtoTokenPair.ts +++ /dev/null @@ -1,88 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoTokenPair - */ -export interface DtoTokenPair { - /** - * - * @type {string} - * @memberof DtoTokenPair - */ - access_token?: string; - /** - * - * @type {number} - * @memberof DtoTokenPair - */ - expires_in?: number; - /** - * - * @type {string} - * @memberof DtoTokenPair - */ - refresh_token?: string; - /** - * - * @type {string} - * @memberof DtoTokenPair - */ - token_type?: string; -} - -/** - * Check if a given object implements the DtoTokenPair interface. - */ -export function instanceOfDtoTokenPair(value: object): value is DtoTokenPair { - return true; -} - -export function DtoTokenPairFromJSON(json: any): DtoTokenPair { - return DtoTokenPairFromJSONTyped(json, false); -} - -export function DtoTokenPairFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoTokenPair { - if (json == null) { - return json; - } - return { - - 'access_token': json['access_token'] == null ? undefined : json['access_token'], - 'expires_in': json['expires_in'] == null ? undefined : json['expires_in'], - 'refresh_token': json['refresh_token'] == null ? undefined : json['refresh_token'], - 'token_type': json['token_type'] == null ? undefined : json['token_type'], - }; -} - -export function DtoTokenPairToJSON(json: any): DtoTokenPair { - return DtoTokenPairToJSONTyped(json, false); -} - -export function DtoTokenPairToJSONTyped(value?: DtoTokenPair | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'access_token': value['access_token'], - 'expires_in': value['expires_in'], - 'refresh_token': value['refresh_token'], - 'token_type': value['token_type'], - }; -} - diff --git a/ui/src/sdk/models/DtoUpdateAnnotationRequest.ts b/ui/src/sdk/models/DtoUpdateAnnotationRequest.ts deleted file mode 100644 index ecefbbd..0000000 --- a/ui/src/sdk/models/DtoUpdateAnnotationRequest.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoUpdateAnnotationRequest - */ -export interface DtoUpdateAnnotationRequest { - /** - * - * @type {string} - * @memberof DtoUpdateAnnotationRequest - */ - key?: string; - /** - * - * @type {string} - * @memberof DtoUpdateAnnotationRequest - */ - value?: string; -} - -/** - * Check if a given object implements the DtoUpdateAnnotationRequest interface. - */ -export function instanceOfDtoUpdateAnnotationRequest(value: object): value is DtoUpdateAnnotationRequest { - return true; -} - -export function DtoUpdateAnnotationRequestFromJSON(json: any): DtoUpdateAnnotationRequest { - return DtoUpdateAnnotationRequestFromJSONTyped(json, false); -} - -export function DtoUpdateAnnotationRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoUpdateAnnotationRequest { - if (json == null) { - return json; - } - return { - - 'key': json['key'] == null ? undefined : json['key'], - 'value': json['value'] == null ? undefined : json['value'], - }; -} - -export function DtoUpdateAnnotationRequestToJSON(json: any): DtoUpdateAnnotationRequest { - return DtoUpdateAnnotationRequestToJSONTyped(json, false); -} - -export function DtoUpdateAnnotationRequestToJSONTyped(value?: DtoUpdateAnnotationRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'key': value['key'], - 'value': value['value'], - }; -} - diff --git a/ui/src/sdk/models/DtoUpdateCredentialRequest.ts b/ui/src/sdk/models/DtoUpdateCredentialRequest.ts deleted file mode 100644 index 85453be..0000000 --- a/ui/src/sdk/models/DtoUpdateCredentialRequest.ts +++ /dev/null @@ -1,112 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoUpdateCredentialRequest - */ -export interface DtoUpdateCredentialRequest { - /** - * - * @type {string} - * @memberof DtoUpdateCredentialRequest - */ - account_id?: string; - /** - * - * @type {string} - * @memberof DtoUpdateCredentialRequest - */ - name?: string; - /** - * - * @type {string} - * @memberof DtoUpdateCredentialRequest - */ - region?: string; - /** - * - * @type {object} - * @memberof DtoUpdateCredentialRequest - */ - scope?: object; - /** - * - * @type {string} - * @memberof DtoUpdateCredentialRequest - */ - scope_kind?: string; - /** - * - * @type {number} - * @memberof DtoUpdateCredentialRequest - */ - scope_version?: number; - /** - * set if rotating - * @type {object} - * @memberof DtoUpdateCredentialRequest - */ - secret?: object; -} - -/** - * Check if a given object implements the DtoUpdateCredentialRequest interface. - */ -export function instanceOfDtoUpdateCredentialRequest(value: object): value is DtoUpdateCredentialRequest { - return true; -} - -export function DtoUpdateCredentialRequestFromJSON(json: any): DtoUpdateCredentialRequest { - return DtoUpdateCredentialRequestFromJSONTyped(json, false); -} - -export function DtoUpdateCredentialRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoUpdateCredentialRequest { - if (json == null) { - return json; - } - return { - - 'account_id': json['account_id'] == null ? undefined : json['account_id'], - 'name': json['name'] == null ? undefined : json['name'], - 'region': json['region'] == null ? undefined : json['region'], - 'scope': json['scope'] == null ? undefined : json['scope'], - 'scope_kind': json['scope_kind'] == null ? undefined : json['scope_kind'], - 'scope_version': json['scope_version'] == null ? undefined : json['scope_version'], - 'secret': json['secret'] == null ? undefined : json['secret'], - }; -} - -export function DtoUpdateCredentialRequestToJSON(json: any): DtoUpdateCredentialRequest { - return DtoUpdateCredentialRequestToJSONTyped(json, false); -} - -export function DtoUpdateCredentialRequestToJSONTyped(value?: DtoUpdateCredentialRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'account_id': value['account_id'], - 'name': value['name'], - 'region': value['region'], - 'scope': value['scope'], - 'scope_kind': value['scope_kind'], - 'scope_version': value['scope_version'], - 'secret': value['secret'], - }; -} - diff --git a/ui/src/sdk/models/DtoUpdateLabelRequest.ts b/ui/src/sdk/models/DtoUpdateLabelRequest.ts deleted file mode 100644 index 7ba28ea..0000000 --- a/ui/src/sdk/models/DtoUpdateLabelRequest.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoUpdateLabelRequest - */ -export interface DtoUpdateLabelRequest { - /** - * - * @type {string} - * @memberof DtoUpdateLabelRequest - */ - key?: string; - /** - * - * @type {string} - * @memberof DtoUpdateLabelRequest - */ - value?: string; -} - -/** - * Check if a given object implements the DtoUpdateLabelRequest interface. - */ -export function instanceOfDtoUpdateLabelRequest(value: object): value is DtoUpdateLabelRequest { - return true; -} - -export function DtoUpdateLabelRequestFromJSON(json: any): DtoUpdateLabelRequest { - return DtoUpdateLabelRequestFromJSONTyped(json, false); -} - -export function DtoUpdateLabelRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoUpdateLabelRequest { - if (json == null) { - return json; - } - return { - - 'key': json['key'] == null ? undefined : json['key'], - 'value': json['value'] == null ? undefined : json['value'], - }; -} - -export function DtoUpdateLabelRequestToJSON(json: any): DtoUpdateLabelRequest { - return DtoUpdateLabelRequestToJSONTyped(json, false); -} - -export function DtoUpdateLabelRequestToJSONTyped(value?: DtoUpdateLabelRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'key': value['key'], - 'value': value['value'], - }; -} - diff --git a/ui/src/sdk/models/DtoUpdateNodePoolRequest.ts b/ui/src/sdk/models/DtoUpdateNodePoolRequest.ts deleted file mode 100644 index 7ec7206..0000000 --- a/ui/src/sdk/models/DtoUpdateNodePoolRequest.ts +++ /dev/null @@ -1,83 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoUpdateNodePoolRequest - */ -export interface DtoUpdateNodePoolRequest { - /** - * - * @type {string} - * @memberof DtoUpdateNodePoolRequest - */ - name?: string; - /** - * - * @type {string} - * @memberof DtoUpdateNodePoolRequest - */ - role?: DtoUpdateNodePoolRequestRoleEnum; -} - - -/** - * @export - */ -export const DtoUpdateNodePoolRequestRoleEnum = { - master: 'master', - worker: 'worker' -} as const; -export type DtoUpdateNodePoolRequestRoleEnum = typeof DtoUpdateNodePoolRequestRoleEnum[keyof typeof DtoUpdateNodePoolRequestRoleEnum]; - - -/** - * Check if a given object implements the DtoUpdateNodePoolRequest interface. - */ -export function instanceOfDtoUpdateNodePoolRequest(value: object): value is DtoUpdateNodePoolRequest { - return true; -} - -export function DtoUpdateNodePoolRequestFromJSON(json: any): DtoUpdateNodePoolRequest { - return DtoUpdateNodePoolRequestFromJSONTyped(json, false); -} - -export function DtoUpdateNodePoolRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoUpdateNodePoolRequest { - if (json == null) { - return json; - } - return { - - 'name': json['name'] == null ? undefined : json['name'], - 'role': json['role'] == null ? undefined : json['role'], - }; -} - -export function DtoUpdateNodePoolRequestToJSON(json: any): DtoUpdateNodePoolRequest { - return DtoUpdateNodePoolRequestToJSONTyped(json, false); -} - -export function DtoUpdateNodePoolRequestToJSONTyped(value?: DtoUpdateNodePoolRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'name': value['name'], - 'role': value['role'], - }; -} - diff --git a/ui/src/sdk/models/DtoUpdateServerRequest.ts b/ui/src/sdk/models/DtoUpdateServerRequest.ts deleted file mode 100644 index 9060388..0000000 --- a/ui/src/sdk/models/DtoUpdateServerRequest.ts +++ /dev/null @@ -1,135 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoUpdateServerRequest - */ -export interface DtoUpdateServerRequest { - /** - * - * @type {string} - * @memberof DtoUpdateServerRequest - */ - hostname?: string; - /** - * - * @type {string} - * @memberof DtoUpdateServerRequest - */ - private_ip_address?: string; - /** - * - * @type {string} - * @memberof DtoUpdateServerRequest - */ - public_ip_address?: string; - /** - * - * @type {string} - * @memberof DtoUpdateServerRequest - */ - role?: DtoUpdateServerRequestRoleEnum; - /** - * - * @type {string} - * @memberof DtoUpdateServerRequest - */ - ssh_key_id?: string; - /** - * - * @type {string} - * @memberof DtoUpdateServerRequest - */ - ssh_user?: string; - /** - * - * @type {string} - * @memberof DtoUpdateServerRequest - */ - status?: DtoUpdateServerRequestStatusEnum; -} - - -/** - * @export - */ -export const DtoUpdateServerRequestRoleEnum = { - master: 'master', - worker: 'worker', - bastion: 'bastion' -} as const; -export type DtoUpdateServerRequestRoleEnum = typeof DtoUpdateServerRequestRoleEnum[keyof typeof DtoUpdateServerRequestRoleEnum]; - -/** - * @export - */ -export const DtoUpdateServerRequestStatusEnum = { - pending: 'pending', - provisioning: 'provisioning', - ready: 'ready', - failed: 'failed' -} as const; -export type DtoUpdateServerRequestStatusEnum = typeof DtoUpdateServerRequestStatusEnum[keyof typeof DtoUpdateServerRequestStatusEnum]; - - -/** - * Check if a given object implements the DtoUpdateServerRequest interface. - */ -export function instanceOfDtoUpdateServerRequest(value: object): value is DtoUpdateServerRequest { - return true; -} - -export function DtoUpdateServerRequestFromJSON(json: any): DtoUpdateServerRequest { - return DtoUpdateServerRequestFromJSONTyped(json, false); -} - -export function DtoUpdateServerRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoUpdateServerRequest { - if (json == null) { - return json; - } - return { - - 'hostname': json['hostname'] == null ? undefined : json['hostname'], - 'private_ip_address': json['private_ip_address'] == null ? undefined : json['private_ip_address'], - 'public_ip_address': json['public_ip_address'] == null ? undefined : json['public_ip_address'], - 'role': json['role'] == null ? undefined : json['role'], - 'ssh_key_id': json['ssh_key_id'] == null ? undefined : json['ssh_key_id'], - 'ssh_user': json['ssh_user'] == null ? undefined : json['ssh_user'], - 'status': json['status'] == null ? undefined : json['status'], - }; -} - -export function DtoUpdateServerRequestToJSON(json: any): DtoUpdateServerRequest { - return DtoUpdateServerRequestToJSONTyped(json, false); -} - -export function DtoUpdateServerRequestToJSONTyped(value?: DtoUpdateServerRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'hostname': value['hostname'], - 'private_ip_address': value['private_ip_address'], - 'public_ip_address': value['public_ip_address'], - 'role': value['role'], - 'ssh_key_id': value['ssh_key_id'], - 'ssh_user': value['ssh_user'], - 'status': value['status'], - }; -} - diff --git a/ui/src/sdk/models/DtoUpdateTaintRequest.ts b/ui/src/sdk/models/DtoUpdateTaintRequest.ts deleted file mode 100644 index 9bdd499..0000000 --- a/ui/src/sdk/models/DtoUpdateTaintRequest.ts +++ /dev/null @@ -1,80 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface DtoUpdateTaintRequest - */ -export interface DtoUpdateTaintRequest { - /** - * - * @type {string} - * @memberof DtoUpdateTaintRequest - */ - effect?: string; - /** - * - * @type {string} - * @memberof DtoUpdateTaintRequest - */ - key?: string; - /** - * - * @type {string} - * @memberof DtoUpdateTaintRequest - */ - value?: string; -} - -/** - * Check if a given object implements the DtoUpdateTaintRequest interface. - */ -export function instanceOfDtoUpdateTaintRequest(value: object): value is DtoUpdateTaintRequest { - return true; -} - -export function DtoUpdateTaintRequestFromJSON(json: any): DtoUpdateTaintRequest { - return DtoUpdateTaintRequestFromJSONTyped(json, false); -} - -export function DtoUpdateTaintRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DtoUpdateTaintRequest { - if (json == null) { - return json; - } - return { - - 'effect': json['effect'] == null ? undefined : json['effect'], - 'key': json['key'] == null ? undefined : json['key'], - 'value': json['value'] == null ? undefined : json['value'], - }; -} - -export function DtoUpdateTaintRequestToJSON(json: any): DtoUpdateTaintRequest { - return DtoUpdateTaintRequestToJSONTyped(json, false); -} - -export function DtoUpdateTaintRequestToJSONTyped(value?: DtoUpdateTaintRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'effect': value['effect'], - 'key': value['key'], - 'value': value['value'], - }; -} - diff --git a/ui/src/sdk/models/HandlersCreateUserKeyRequest.ts b/ui/src/sdk/models/HandlersCreateUserKeyRequest.ts deleted file mode 100644 index 395b56d..0000000 --- a/ui/src/sdk/models/HandlersCreateUserKeyRequest.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface HandlersCreateUserKeyRequest - */ -export interface HandlersCreateUserKeyRequest { - /** - * optional TTL - * @type {number} - * @memberof HandlersCreateUserKeyRequest - */ - expires_in_hours?: number; - /** - * - * @type {string} - * @memberof HandlersCreateUserKeyRequest - */ - name?: string; -} - -/** - * Check if a given object implements the HandlersCreateUserKeyRequest interface. - */ -export function instanceOfHandlersCreateUserKeyRequest(value: object): value is HandlersCreateUserKeyRequest { - return true; -} - -export function HandlersCreateUserKeyRequestFromJSON(json: any): HandlersCreateUserKeyRequest { - return HandlersCreateUserKeyRequestFromJSONTyped(json, false); -} - -export function HandlersCreateUserKeyRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlersCreateUserKeyRequest { - if (json == null) { - return json; - } - return { - - 'expires_in_hours': json['expires_in_hours'] == null ? undefined : json['expires_in_hours'], - 'name': json['name'] == null ? undefined : json['name'], - }; -} - -export function HandlersCreateUserKeyRequestToJSON(json: any): HandlersCreateUserKeyRequest { - return HandlersCreateUserKeyRequestToJSONTyped(json, false); -} - -export function HandlersCreateUserKeyRequestToJSONTyped(value?: HandlersCreateUserKeyRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'expires_in_hours': value['expires_in_hours'], - 'name': value['name'], - }; -} - diff --git a/ui/src/sdk/models/HandlersHealthStatus.ts b/ui/src/sdk/models/HandlersHealthStatus.ts deleted file mode 100644 index 23645eb..0000000 --- a/ui/src/sdk/models/HandlersHealthStatus.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface HandlersHealthStatus - */ -export interface HandlersHealthStatus { - /** - * - * @type {string} - * @memberof HandlersHealthStatus - */ - status?: string; -} - -/** - * Check if a given object implements the HandlersHealthStatus interface. - */ -export function instanceOfHandlersHealthStatus(value: object): value is HandlersHealthStatus { - return true; -} - -export function HandlersHealthStatusFromJSON(json: any): HandlersHealthStatus { - return HandlersHealthStatusFromJSONTyped(json, false); -} - -export function HandlersHealthStatusFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlersHealthStatus { - if (json == null) { - return json; - } - return { - - 'status': json['status'] == null ? undefined : json['status'], - }; -} - -export function HandlersHealthStatusToJSON(json: any): HandlersHealthStatus { - return HandlersHealthStatusToJSONTyped(json, false); -} - -export function HandlersHealthStatusToJSONTyped(value?: HandlersHealthStatus | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'status': value['status'], - }; -} - diff --git a/ui/src/sdk/models/HandlersMeResponse.ts b/ui/src/sdk/models/HandlersMeResponse.ts deleted file mode 100644 index d97d618..0000000 --- a/ui/src/sdk/models/HandlersMeResponse.ts +++ /dev/null @@ -1,141 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import type { ModelsUserEmail } from "./ModelsUserEmail" -import { ModelsUserEmailFromJSON, ModelsUserEmailToJSON, } from "./ModelsUserEmail" -import type { ModelsOrganization } from "./ModelsOrganization" -import { ModelsOrganizationFromJSON, ModelsOrganizationToJSON, } from "./ModelsOrganization" - -/** - * - * @export - * @interface HandlersMeResponse - */ -export interface HandlersMeResponse { - /** - * - * @type {string} - * @memberof HandlersMeResponse - */ - avatar_url?: string; - /** - * - * @type {Date} - * @memberof HandlersMeResponse - */ - created_at?: Date; - /** - * - * @type {string} - * @memberof HandlersMeResponse - */ - display_name?: string; - /** - * - * @type {Array} - * @memberof HandlersMeResponse - */ - emails?: Array; - /** - * example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 - * @type {string} - * @memberof HandlersMeResponse - */ - id?: string; - /** - * - * @type {boolean} - * @memberof HandlersMeResponse - */ - is_admin?: boolean; - /** - * - * @type {boolean} - * @memberof HandlersMeResponse - */ - is_disabled?: boolean; - /** - * - * @type {Array} - * @memberof HandlersMeResponse - */ - organizations?: Array; - /** - * - * @type {string} - * @memberof HandlersMeResponse - */ - primary_email?: string; - /** - * - * @type {Date} - * @memberof HandlersMeResponse - */ - updated_at?: Date; -} - -/** - * Check if a given object implements the HandlersMeResponse interface. - */ -export function instanceOfHandlersMeResponse(value: object): value is HandlersMeResponse { - return true; -} - -export function HandlersMeResponseFromJSON(json: any): HandlersMeResponse { - return HandlersMeResponseFromJSONTyped(json, false); -} - -export function HandlersMeResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlersMeResponse { - if (json == null) { - return json; - } - return { - - 'avatar_url': json['avatar_url'] == null ? undefined : json['avatar_url'], - 'created_at': json['created_at'] == null ? undefined : (new Date(json['created_at'])), - 'display_name': json['display_name'] == null ? undefined : json['display_name'], - 'emails': json['emails'] == null ? undefined : ((json['emails'] as Array).map(ModelsUserEmailFromJSON)), - 'id': json['id'] == null ? undefined : json['id'], - 'is_admin': json['is_admin'] == null ? undefined : json['is_admin'], - 'is_disabled': json['is_disabled'] == null ? undefined : json['is_disabled'], - 'organizations': json['organizations'] == null ? undefined : ((json['organizations'] as Array).map(ModelsOrganizationFromJSON)), - 'primary_email': json['primary_email'] == null ? undefined : json['primary_email'], - 'updated_at': json['updated_at'] == null ? undefined : (new Date(json['updated_at'])), - }; -} - -export function HandlersMeResponseToJSON(json: any): HandlersMeResponse { - return HandlersMeResponseToJSONTyped(json, false); -} - -export function HandlersMeResponseToJSONTyped(value?: HandlersMeResponse | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'avatar_url': value['avatar_url'], - 'created_at': value['created_at'] == null ? value['created_at'] : value['created_at'].toISOString(), - 'display_name': value['display_name'], - 'emails': value['emails'] == null ? undefined : ((value['emails'] as Array).map(ModelsUserEmailToJSON)), - 'id': value['id'], - 'is_admin': value['is_admin'], - 'is_disabled': value['is_disabled'], - 'organizations': value['organizations'] == null ? undefined : ((value['organizations'] as Array).map(ModelsOrganizationToJSON)), - 'primary_email': value['primary_email'], - 'updated_at': value['updated_at'] == null ? value['updated_at'] : value['updated_at'].toISOString(), - }; -} - diff --git a/ui/src/sdk/models/HandlersMemberOut.ts b/ui/src/sdk/models/HandlersMemberOut.ts deleted file mode 100644 index 5993860..0000000 --- a/ui/src/sdk/models/HandlersMemberOut.ts +++ /dev/null @@ -1,80 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface HandlersMemberOut - */ -export interface HandlersMemberOut { - /** - * - * @type {string} - * @memberof HandlersMemberOut - */ - email?: string; - /** - * owner/admin/member - * @type {string} - * @memberof HandlersMemberOut - */ - role?: string; - /** - * - * @type {string} - * @memberof HandlersMemberOut - */ - user_id?: string; -} - -/** - * Check if a given object implements the HandlersMemberOut interface. - */ -export function instanceOfHandlersMemberOut(value: object): value is HandlersMemberOut { - return true; -} - -export function HandlersMemberOutFromJSON(json: any): HandlersMemberOut { - return HandlersMemberOutFromJSONTyped(json, false); -} - -export function HandlersMemberOutFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlersMemberOut { - if (json == null) { - return json; - } - return { - - 'email': json['email'] == null ? undefined : json['email'], - 'role': json['role'] == null ? undefined : json['role'], - 'user_id': json['user_id'] == null ? undefined : json['user_id'], - }; -} - -export function HandlersMemberOutToJSON(json: any): HandlersMemberOut { - return HandlersMemberOutToJSONTyped(json, false); -} - -export function HandlersMemberOutToJSONTyped(value?: HandlersMemberOut | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'email': value['email'], - 'role': value['role'], - 'user_id': value['user_id'], - }; -} - diff --git a/ui/src/sdk/models/HandlersMemberUpsertReq.ts b/ui/src/sdk/models/HandlersMemberUpsertReq.ts deleted file mode 100644 index fa3021a..0000000 --- a/ui/src/sdk/models/HandlersMemberUpsertReq.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface HandlersMemberUpsertReq - */ -export interface HandlersMemberUpsertReq { - /** - * - * @type {string} - * @memberof HandlersMemberUpsertReq - */ - role?: string; - /** - * - * @type {string} - * @memberof HandlersMemberUpsertReq - */ - user_id?: string; -} - -/** - * Check if a given object implements the HandlersMemberUpsertReq interface. - */ -export function instanceOfHandlersMemberUpsertReq(value: object): value is HandlersMemberUpsertReq { - return true; -} - -export function HandlersMemberUpsertReqFromJSON(json: any): HandlersMemberUpsertReq { - return HandlersMemberUpsertReqFromJSONTyped(json, false); -} - -export function HandlersMemberUpsertReqFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlersMemberUpsertReq { - if (json == null) { - return json; - } - return { - - 'role': json['role'] == null ? undefined : json['role'], - 'user_id': json['user_id'] == null ? undefined : json['user_id'], - }; -} - -export function HandlersMemberUpsertReqToJSON(json: any): HandlersMemberUpsertReq { - return HandlersMemberUpsertReqToJSONTyped(json, false); -} - -export function HandlersMemberUpsertReqToJSONTyped(value?: HandlersMemberUpsertReq | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'role': value['role'], - 'user_id': value['user_id'], - }; -} - diff --git a/ui/src/sdk/models/HandlersOrgCreateReq.ts b/ui/src/sdk/models/HandlersOrgCreateReq.ts deleted file mode 100644 index 97294b9..0000000 --- a/ui/src/sdk/models/HandlersOrgCreateReq.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface HandlersOrgCreateReq - */ -export interface HandlersOrgCreateReq { - /** - * - * @type {string} - * @memberof HandlersOrgCreateReq - */ - domain?: string; - /** - * - * @type {string} - * @memberof HandlersOrgCreateReq - */ - name?: string; -} - -/** - * Check if a given object implements the HandlersOrgCreateReq interface. - */ -export function instanceOfHandlersOrgCreateReq(value: object): value is HandlersOrgCreateReq { - return true; -} - -export function HandlersOrgCreateReqFromJSON(json: any): HandlersOrgCreateReq { - return HandlersOrgCreateReqFromJSONTyped(json, false); -} - -export function HandlersOrgCreateReqFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlersOrgCreateReq { - if (json == null) { - return json; - } - return { - - 'domain': json['domain'] == null ? undefined : json['domain'], - 'name': json['name'] == null ? undefined : json['name'], - }; -} - -export function HandlersOrgCreateReqToJSON(json: any): HandlersOrgCreateReq { - return HandlersOrgCreateReqToJSONTyped(json, false); -} - -export function HandlersOrgCreateReqToJSONTyped(value?: HandlersOrgCreateReq | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'domain': value['domain'], - 'name': value['name'], - }; -} - diff --git a/ui/src/sdk/models/HandlersOrgKeyCreateReq.ts b/ui/src/sdk/models/HandlersOrgKeyCreateReq.ts deleted file mode 100644 index 602223f..0000000 --- a/ui/src/sdk/models/HandlersOrgKeyCreateReq.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface HandlersOrgKeyCreateReq - */ -export interface HandlersOrgKeyCreateReq { - /** - * - * @type {number} - * @memberof HandlersOrgKeyCreateReq - */ - expires_in_hours?: number; - /** - * - * @type {string} - * @memberof HandlersOrgKeyCreateReq - */ - name?: string; -} - -/** - * Check if a given object implements the HandlersOrgKeyCreateReq interface. - */ -export function instanceOfHandlersOrgKeyCreateReq(value: object): value is HandlersOrgKeyCreateReq { - return true; -} - -export function HandlersOrgKeyCreateReqFromJSON(json: any): HandlersOrgKeyCreateReq { - return HandlersOrgKeyCreateReqFromJSONTyped(json, false); -} - -export function HandlersOrgKeyCreateReqFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlersOrgKeyCreateReq { - if (json == null) { - return json; - } - return { - - 'expires_in_hours': json['expires_in_hours'] == null ? undefined : json['expires_in_hours'], - 'name': json['name'] == null ? undefined : json['name'], - }; -} - -export function HandlersOrgKeyCreateReqToJSON(json: any): HandlersOrgKeyCreateReq { - return HandlersOrgKeyCreateReqToJSONTyped(json, false); -} - -export function HandlersOrgKeyCreateReqToJSONTyped(value?: HandlersOrgKeyCreateReq | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'expires_in_hours': value['expires_in_hours'], - 'name': value['name'], - }; -} - diff --git a/ui/src/sdk/models/HandlersOrgKeyCreateResp.ts b/ui/src/sdk/models/HandlersOrgKeyCreateResp.ts deleted file mode 100644 index 6072a7b..0000000 --- a/ui/src/sdk/models/HandlersOrgKeyCreateResp.ts +++ /dev/null @@ -1,112 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface HandlersOrgKeyCreateResp - */ -export interface HandlersOrgKeyCreateResp { - /** - * - * @type {string} - * @memberof HandlersOrgKeyCreateResp - */ - created_at?: string; - /** - * - * @type {string} - * @memberof HandlersOrgKeyCreateResp - */ - expires_at?: string; - /** - * - * @type {string} - * @memberof HandlersOrgKeyCreateResp - */ - id?: string; - /** - * - * @type {string} - * @memberof HandlersOrgKeyCreateResp - */ - name?: string; - /** - * shown once: - * @type {string} - * @memberof HandlersOrgKeyCreateResp - */ - org_key?: string; - /** - * shown once: - * @type {string} - * @memberof HandlersOrgKeyCreateResp - */ - org_secret?: string; - /** - * "org" - * @type {string} - * @memberof HandlersOrgKeyCreateResp - */ - scope?: string; -} - -/** - * Check if a given object implements the HandlersOrgKeyCreateResp interface. - */ -export function instanceOfHandlersOrgKeyCreateResp(value: object): value is HandlersOrgKeyCreateResp { - return true; -} - -export function HandlersOrgKeyCreateRespFromJSON(json: any): HandlersOrgKeyCreateResp { - return HandlersOrgKeyCreateRespFromJSONTyped(json, false); -} - -export function HandlersOrgKeyCreateRespFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlersOrgKeyCreateResp { - if (json == null) { - return json; - } - return { - - 'created_at': json['created_at'] == null ? undefined : json['created_at'], - 'expires_at': json['expires_at'] == null ? undefined : json['expires_at'], - 'id': json['id'] == null ? undefined : json['id'], - 'name': json['name'] == null ? undefined : json['name'], - 'org_key': json['org_key'] == null ? undefined : json['org_key'], - 'org_secret': json['org_secret'] == null ? undefined : json['org_secret'], - 'scope': json['scope'] == null ? undefined : json['scope'], - }; -} - -export function HandlersOrgKeyCreateRespToJSON(json: any): HandlersOrgKeyCreateResp { - return HandlersOrgKeyCreateRespToJSONTyped(json, false); -} - -export function HandlersOrgKeyCreateRespToJSONTyped(value?: HandlersOrgKeyCreateResp | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'created_at': value['created_at'], - 'expires_at': value['expires_at'], - 'id': value['id'], - 'name': value['name'], - 'org_key': value['org_key'], - 'org_secret': value['org_secret'], - 'scope': value['scope'], - }; -} - diff --git a/ui/src/sdk/models/HandlersOrgUpdateReq.ts b/ui/src/sdk/models/HandlersOrgUpdateReq.ts deleted file mode 100644 index c0ec8ac..0000000 --- a/ui/src/sdk/models/HandlersOrgUpdateReq.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface HandlersOrgUpdateReq - */ -export interface HandlersOrgUpdateReq { - /** - * - * @type {string} - * @memberof HandlersOrgUpdateReq - */ - domain?: string; - /** - * - * @type {string} - * @memberof HandlersOrgUpdateReq - */ - name?: string; -} - -/** - * Check if a given object implements the HandlersOrgUpdateReq interface. - */ -export function instanceOfHandlersOrgUpdateReq(value: object): value is HandlersOrgUpdateReq { - return true; -} - -export function HandlersOrgUpdateReqFromJSON(json: any): HandlersOrgUpdateReq { - return HandlersOrgUpdateReqFromJSONTyped(json, false); -} - -export function HandlersOrgUpdateReqFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlersOrgUpdateReq { - if (json == null) { - return json; - } - return { - - 'domain': json['domain'] == null ? undefined : json['domain'], - 'name': json['name'] == null ? undefined : json['name'], - }; -} - -export function HandlersOrgUpdateReqToJSON(json: any): HandlersOrgUpdateReq { - return HandlersOrgUpdateReqToJSONTyped(json, false); -} - -export function HandlersOrgUpdateReqToJSONTyped(value?: HandlersOrgUpdateReq | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'domain': value['domain'], - 'name': value['name'], - }; -} - diff --git a/ui/src/sdk/models/HandlersUpdateMeRequest.ts b/ui/src/sdk/models/HandlersUpdateMeRequest.ts deleted file mode 100644 index e962a53..0000000 --- a/ui/src/sdk/models/HandlersUpdateMeRequest.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface HandlersUpdateMeRequest - */ -export interface HandlersUpdateMeRequest { - /** - * - * @type {string} - * @memberof HandlersUpdateMeRequest - */ - display_name?: string; -} - -/** - * Check if a given object implements the HandlersUpdateMeRequest interface. - */ -export function instanceOfHandlersUpdateMeRequest(value: object): value is HandlersUpdateMeRequest { - return true; -} - -export function HandlersUpdateMeRequestFromJSON(json: any): HandlersUpdateMeRequest { - return HandlersUpdateMeRequestFromJSONTyped(json, false); -} - -export function HandlersUpdateMeRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlersUpdateMeRequest { - if (json == null) { - return json; - } - return { - - 'display_name': json['display_name'] == null ? undefined : json['display_name'], - }; -} - -export function HandlersUpdateMeRequestToJSON(json: any): HandlersUpdateMeRequest { - return HandlersUpdateMeRequestToJSONTyped(json, false); -} - -export function HandlersUpdateMeRequestToJSONTyped(value?: HandlersUpdateMeRequest | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'display_name': value['display_name'], - }; -} - diff --git a/ui/src/sdk/models/HandlersUserAPIKeyOut.ts b/ui/src/sdk/models/HandlersUserAPIKeyOut.ts deleted file mode 100644 index e890f67..0000000 --- a/ui/src/sdk/models/HandlersUserAPIKeyOut.ts +++ /dev/null @@ -1,112 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface HandlersUserAPIKeyOut - */ -export interface HandlersUserAPIKeyOut { - /** - * - * @type {string} - * @memberof HandlersUserAPIKeyOut - */ - created_at?: string; - /** - * - * @type {string} - * @memberof HandlersUserAPIKeyOut - */ - expires_at?: string; - /** - * - * @type {string} - * @memberof HandlersUserAPIKeyOut - */ - id?: string; - /** - * - * @type {string} - * @memberof HandlersUserAPIKeyOut - */ - last_used_at?: string; - /** - * - * @type {string} - * @memberof HandlersUserAPIKeyOut - */ - name?: string; - /** - * Shown only on create: - * @type {string} - * @memberof HandlersUserAPIKeyOut - */ - plain?: string; - /** - * "user" - * @type {string} - * @memberof HandlersUserAPIKeyOut - */ - scope?: string; -} - -/** - * Check if a given object implements the HandlersUserAPIKeyOut interface. - */ -export function instanceOfHandlersUserAPIKeyOut(value: object): value is HandlersUserAPIKeyOut { - return true; -} - -export function HandlersUserAPIKeyOutFromJSON(json: any): HandlersUserAPIKeyOut { - return HandlersUserAPIKeyOutFromJSONTyped(json, false); -} - -export function HandlersUserAPIKeyOutFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlersUserAPIKeyOut { - if (json == null) { - return json; - } - return { - - 'created_at': json['created_at'] == null ? undefined : json['created_at'], - 'expires_at': json['expires_at'] == null ? undefined : json['expires_at'], - 'id': json['id'] == null ? undefined : json['id'], - 'last_used_at': json['last_used_at'] == null ? undefined : json['last_used_at'], - 'name': json['name'] == null ? undefined : json['name'], - 'plain': json['plain'] == null ? undefined : json['plain'], - 'scope': json['scope'] == null ? undefined : json['scope'], - }; -} - -export function HandlersUserAPIKeyOutToJSON(json: any): HandlersUserAPIKeyOut { - return HandlersUserAPIKeyOutToJSONTyped(json, false); -} - -export function HandlersUserAPIKeyOutToJSONTyped(value?: HandlersUserAPIKeyOut | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'created_at': value['created_at'], - 'expires_at': value['expires_at'], - 'id': value['id'], - 'last_used_at': value['last_used_at'], - 'name': value['name'], - 'plain': value['plain'], - 'scope': value['scope'], - }; -} - diff --git a/ui/src/sdk/models/HandlersVersionResponse.ts b/ui/src/sdk/models/HandlersVersionResponse.ts deleted file mode 100644 index be5adf1..0000000 --- a/ui/src/sdk/models/HandlersVersionResponse.ts +++ /dev/null @@ -1,144 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface HandlersVersionResponse - */ -export interface HandlersVersionResponse { - /** - * - * @type {string} - * @memberof HandlersVersionResponse - */ - built?: string; - /** - * - * @type {string} - * @memberof HandlersVersionResponse - */ - builtBy?: string; - /** - * - * @type {string} - * @memberof HandlersVersionResponse - */ - commit?: string; - /** - * - * @type {string} - * @memberof HandlersVersionResponse - */ - commitTime?: string; - /** - * - * @type {string} - * @memberof HandlersVersionResponse - */ - go?: string; - /** - * - * @type {string} - * @memberof HandlersVersionResponse - */ - goArch?: string; - /** - * - * @type {string} - * @memberof HandlersVersionResponse - */ - goOS?: string; - /** - * - * @type {boolean} - * @memberof HandlersVersionResponse - */ - modified?: boolean; - /** - * - * @type {string} - * @memberof HandlersVersionResponse - */ - revision?: string; - /** - * - * @type {string} - * @memberof HandlersVersionResponse - */ - vcs?: string; - /** - * - * @type {string} - * @memberof HandlersVersionResponse - */ - version?: string; -} - -/** - * Check if a given object implements the HandlersVersionResponse interface. - */ -export function instanceOfHandlersVersionResponse(value: object): value is HandlersVersionResponse { - return true; -} - -export function HandlersVersionResponseFromJSON(json: any): HandlersVersionResponse { - return HandlersVersionResponseFromJSONTyped(json, false); -} - -export function HandlersVersionResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlersVersionResponse { - if (json == null) { - return json; - } - return { - - 'built': json['built'] == null ? undefined : json['built'], - 'builtBy': json['builtBy'] == null ? undefined : json['builtBy'], - 'commit': json['commit'] == null ? undefined : json['commit'], - 'commitTime': json['commitTime'] == null ? undefined : json['commitTime'], - 'go': json['go'] == null ? undefined : json['go'], - 'goArch': json['goArch'] == null ? undefined : json['goArch'], - 'goOS': json['goOS'] == null ? undefined : json['goOS'], - 'modified': json['modified'] == null ? undefined : json['modified'], - 'revision': json['revision'] == null ? undefined : json['revision'], - 'vcs': json['vcs'] == null ? undefined : json['vcs'], - 'version': json['version'] == null ? undefined : json['version'], - }; -} - -export function HandlersVersionResponseToJSON(json: any): HandlersVersionResponse { - return HandlersVersionResponseToJSONTyped(json, false); -} - -export function HandlersVersionResponseToJSONTyped(value?: HandlersVersionResponse | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'built': value['built'], - 'builtBy': value['builtBy'], - 'commit': value['commit'], - 'commitTime': value['commitTime'], - 'go': value['go'], - 'goArch': value['goArch'], - 'goOS': value['goOS'], - 'modified': value['modified'], - 'revision': value['revision'], - 'vcs': value['vcs'], - 'version': value['version'], - }; -} - diff --git a/ui/src/sdk/models/ModelsAPIKey.ts b/ui/src/sdk/models/ModelsAPIKey.ts deleted file mode 100644 index 3fa7b24..0000000 --- a/ui/src/sdk/models/ModelsAPIKey.ts +++ /dev/null @@ -1,144 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface ModelsAPIKey - */ -export interface ModelsAPIKey { - /** - * - * @type {Date} - * @memberof ModelsAPIKey - */ - created_at?: Date; - /** - * - * @type {Date} - * @memberof ModelsAPIKey - */ - expires_at?: Date; - /** - * - * @type {string} - * @memberof ModelsAPIKey - */ - id?: string; - /** - * - * @type {Date} - * @memberof ModelsAPIKey - */ - last_used_at?: Date; - /** - * - * @type {string} - * @memberof ModelsAPIKey - */ - name?: string; - /** - * - * @type {string} - * @memberof ModelsAPIKey - */ - org_id?: string; - /** - * - * @type {string} - * @memberof ModelsAPIKey - */ - prefix?: string; - /** - * - * @type {boolean} - * @memberof ModelsAPIKey - */ - revoked?: boolean; - /** - * - * @type {string} - * @memberof ModelsAPIKey - */ - scope?: string; - /** - * - * @type {Date} - * @memberof ModelsAPIKey - */ - updated_at?: Date; - /** - * - * @type {string} - * @memberof ModelsAPIKey - */ - user_id?: string; -} - -/** - * Check if a given object implements the ModelsAPIKey interface. - */ -export function instanceOfModelsAPIKey(value: object): value is ModelsAPIKey { - return true; -} - -export function ModelsAPIKeyFromJSON(json: any): ModelsAPIKey { - return ModelsAPIKeyFromJSONTyped(json, false); -} - -export function ModelsAPIKeyFromJSONTyped(json: any, ignoreDiscriminator: boolean): ModelsAPIKey { - if (json == null) { - return json; - } - return { - - 'created_at': json['created_at'] == null ? undefined : (new Date(json['created_at'])), - 'expires_at': json['expires_at'] == null ? undefined : (new Date(json['expires_at'])), - 'id': json['id'] == null ? undefined : json['id'], - 'last_used_at': json['last_used_at'] == null ? undefined : (new Date(json['last_used_at'])), - 'name': json['name'] == null ? undefined : json['name'], - 'org_id': json['org_id'] == null ? undefined : json['org_id'], - 'prefix': json['prefix'] == null ? undefined : json['prefix'], - 'revoked': json['revoked'] == null ? undefined : json['revoked'], - 'scope': json['scope'] == null ? undefined : json['scope'], - 'updated_at': json['updated_at'] == null ? undefined : (new Date(json['updated_at'])), - 'user_id': json['user_id'] == null ? undefined : json['user_id'], - }; -} - -export function ModelsAPIKeyToJSON(json: any): ModelsAPIKey { - return ModelsAPIKeyToJSONTyped(json, false); -} - -export function ModelsAPIKeyToJSONTyped(value?: ModelsAPIKey | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'created_at': value['created_at'] == null ? value['created_at'] : value['created_at'].toISOString(), - 'expires_at': value['expires_at'] == null ? value['expires_at'] : value['expires_at'].toISOString(), - 'id': value['id'], - 'last_used_at': value['last_used_at'] == null ? value['last_used_at'] : value['last_used_at'].toISOString(), - 'name': value['name'], - 'org_id': value['org_id'], - 'prefix': value['prefix'], - 'revoked': value['revoked'], - 'scope': value['scope'], - 'updated_at': value['updated_at'] == null ? value['updated_at'] : value['updated_at'].toISOString(), - 'user_id': value['user_id'], - }; -} - diff --git a/ui/src/sdk/models/ModelsOrganization.ts b/ui/src/sdk/models/ModelsOrganization.ts deleted file mode 100644 index 0eba6f9..0000000 --- a/ui/src/sdk/models/ModelsOrganization.ts +++ /dev/null @@ -1,96 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface ModelsOrganization - */ -export interface ModelsOrganization { - /** - * - * @type {Date} - * @memberof ModelsOrganization - */ - created_at?: Date; - /** - * - * @type {string} - * @memberof ModelsOrganization - */ - domain?: string; - /** - * example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 - * @type {string} - * @memberof ModelsOrganization - */ - id?: string; - /** - * - * @type {string} - * @memberof ModelsOrganization - */ - name?: string; - /** - * - * @type {Date} - * @memberof ModelsOrganization - */ - updated_at?: Date; -} - -/** - * Check if a given object implements the ModelsOrganization interface. - */ -export function instanceOfModelsOrganization(value: object): value is ModelsOrganization { - return true; -} - -export function ModelsOrganizationFromJSON(json: any): ModelsOrganization { - return ModelsOrganizationFromJSONTyped(json, false); -} - -export function ModelsOrganizationFromJSONTyped(json: any, ignoreDiscriminator: boolean): ModelsOrganization { - if (json == null) { - return json; - } - return { - - 'created_at': json['created_at'] == null ? undefined : (new Date(json['created_at'])), - 'domain': json['domain'] == null ? undefined : json['domain'], - 'id': json['id'] == null ? undefined : json['id'], - 'name': json['name'] == null ? undefined : json['name'], - 'updated_at': json['updated_at'] == null ? undefined : (new Date(json['updated_at'])), - }; -} - -export function ModelsOrganizationToJSON(json: any): ModelsOrganization { - return ModelsOrganizationToJSONTyped(json, false); -} - -export function ModelsOrganizationToJSONTyped(value?: ModelsOrganization | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'created_at': value['created_at'] == null ? value['created_at'] : value['created_at'].toISOString(), - 'domain': value['domain'], - 'id': value['id'], - 'name': value['name'], - 'updated_at': value['updated_at'] == null ? value['updated_at'] : value['updated_at'].toISOString(), - }; -} - diff --git a/ui/src/sdk/models/ModelsUser.ts b/ui/src/sdk/models/ModelsUser.ts deleted file mode 100644 index de96350..0000000 --- a/ui/src/sdk/models/ModelsUser.ts +++ /dev/null @@ -1,120 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface ModelsUser - */ -export interface ModelsUser { - /** - * - * @type {string} - * @memberof ModelsUser - */ - avatar_url?: string; - /** - * - * @type {Date} - * @memberof ModelsUser - */ - created_at?: Date; - /** - * - * @type {string} - * @memberof ModelsUser - */ - display_name?: string; - /** - * example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 - * @type {string} - * @memberof ModelsUser - */ - id?: string; - /** - * - * @type {boolean} - * @memberof ModelsUser - */ - is_admin?: boolean; - /** - * - * @type {boolean} - * @memberof ModelsUser - */ - is_disabled?: boolean; - /** - * - * @type {string} - * @memberof ModelsUser - */ - primary_email?: string; - /** - * - * @type {Date} - * @memberof ModelsUser - */ - updated_at?: Date; -} - -/** - * Check if a given object implements the ModelsUser interface. - */ -export function instanceOfModelsUser(value: object): value is ModelsUser { - return true; -} - -export function ModelsUserFromJSON(json: any): ModelsUser { - return ModelsUserFromJSONTyped(json, false); -} - -export function ModelsUserFromJSONTyped(json: any, ignoreDiscriminator: boolean): ModelsUser { - if (json == null) { - return json; - } - return { - - 'avatar_url': json['avatar_url'] == null ? undefined : json['avatar_url'], - 'created_at': json['created_at'] == null ? undefined : (new Date(json['created_at'])), - 'display_name': json['display_name'] == null ? undefined : json['display_name'], - 'id': json['id'] == null ? undefined : json['id'], - 'is_admin': json['is_admin'] == null ? undefined : json['is_admin'], - 'is_disabled': json['is_disabled'] == null ? undefined : json['is_disabled'], - 'primary_email': json['primary_email'] == null ? undefined : json['primary_email'], - 'updated_at': json['updated_at'] == null ? undefined : (new Date(json['updated_at'])), - }; -} - -export function ModelsUserToJSON(json: any): ModelsUser { - return ModelsUserToJSONTyped(json, false); -} - -export function ModelsUserToJSONTyped(value?: ModelsUser | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'avatar_url': value['avatar_url'], - 'created_at': value['created_at'] == null ? value['created_at'] : value['created_at'].toISOString(), - 'display_name': value['display_name'], - 'id': value['id'], - 'is_admin': value['is_admin'], - 'is_disabled': value['is_disabled'], - 'primary_email': value['primary_email'], - 'updated_at': value['updated_at'] == null ? value['updated_at'] : value['updated_at'].toISOString(), - }; -} - diff --git a/ui/src/sdk/models/ModelsUserEmail.ts b/ui/src/sdk/models/ModelsUserEmail.ts deleted file mode 100644 index 2835761..0000000 --- a/ui/src/sdk/models/ModelsUserEmail.ts +++ /dev/null @@ -1,123 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import type { ModelsUser } from "./ModelsUser" -import { ModelsUserFromJSON, ModelsUserToJSON, } from "./ModelsUser" - -/** - * - * @export - * @interface ModelsUserEmail - */ -export interface ModelsUserEmail { - /** - * - * @type {Date} - * @memberof ModelsUserEmail - */ - created_at?: Date; - /** - * - * @type {string} - * @memberof ModelsUserEmail - */ - email?: string; - /** - * example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 - * @type {string} - * @memberof ModelsUserEmail - */ - id?: string; - /** - * - * @type {boolean} - * @memberof ModelsUserEmail - */ - is_primary?: boolean; - /** - * - * @type {boolean} - * @memberof ModelsUserEmail - */ - is_verified?: boolean; - /** - * - * @type {Date} - * @memberof ModelsUserEmail - */ - updated_at?: Date; - /** - * - * @type {ModelsUser} - * @memberof ModelsUserEmail - */ - user?: ModelsUser; - /** - * - * @type {string} - * @memberof ModelsUserEmail - */ - user_id?: string; -} - -/** - * Check if a given object implements the ModelsUserEmail interface. - */ -export function instanceOfModelsUserEmail(value: object): value is ModelsUserEmail { - return true; -} - -export function ModelsUserEmailFromJSON(json: any): ModelsUserEmail { - return ModelsUserEmailFromJSONTyped(json, false); -} - -export function ModelsUserEmailFromJSONTyped(json: any, ignoreDiscriminator: boolean): ModelsUserEmail { - if (json == null) { - return json; - } - return { - - 'created_at': json['created_at'] == null ? undefined : (new Date(json['created_at'])), - 'email': json['email'] == null ? undefined : json['email'], - 'id': json['id'] == null ? undefined : json['id'], - 'is_primary': json['is_primary'] == null ? undefined : json['is_primary'], - 'is_verified': json['is_verified'] == null ? undefined : json['is_verified'], - 'updated_at': json['updated_at'] == null ? undefined : (new Date(json['updated_at'])), - 'user': json['user'] == null ? undefined : ModelsUserFromJSON(json['user']), - 'user_id': json['user_id'] == null ? undefined : json['user_id'], - }; -} - -export function ModelsUserEmailToJSON(json: any): ModelsUserEmail { - return ModelsUserEmailToJSONTyped(json, false); -} - -export function ModelsUserEmailToJSONTyped(value?: ModelsUserEmail | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'created_at': value['created_at'] == null ? value['created_at'] : value['created_at'].toISOString(), - 'email': value['email'], - 'id': value['id'], - 'is_primary': value['is_primary'], - 'is_verified': value['is_verified'], - 'updated_at': value['updated_at'] == null ? value['updated_at'] : value['updated_at'].toISOString(), - 'user': ModelsUserToJSON(value['user']), - 'user_id': value['user_id'], - }; -} - diff --git a/ui/src/sdk/models/UtilsErrorResponse.ts b/ui/src/sdk/models/UtilsErrorResponse.ts deleted file mode 100644 index 36932a9..0000000 --- a/ui/src/sdk/models/UtilsErrorResponse.ts +++ /dev/null @@ -1,74 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -/** - * - * @export - * @interface UtilsErrorResponse - */ -export interface UtilsErrorResponse { - /** - * A machine-readable error code, e.g. "validation_error" - * example: validation_error - * @type {string} - * @memberof UtilsErrorResponse - */ - code?: string; - /** - * Human-readable message - * example: slug is required - * @type {string} - * @memberof UtilsErrorResponse - */ - message?: string; -} - -/** - * Check if a given object implements the UtilsErrorResponse interface. - */ -export function instanceOfUtilsErrorResponse(value: object): value is UtilsErrorResponse { - return true; -} - -export function UtilsErrorResponseFromJSON(json: any): UtilsErrorResponse { - return UtilsErrorResponseFromJSONTyped(json, false); -} - -export function UtilsErrorResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): UtilsErrorResponse { - if (json == null) { - return json; - } - return { - - 'code': json['code'] == null ? undefined : json['code'], - 'message': json['message'] == null ? undefined : json['message'], - }; -} - -export function UtilsErrorResponseToJSON(json: any): UtilsErrorResponse { - return UtilsErrorResponseToJSONTyped(json, false); -} - -export function UtilsErrorResponseToJSONTyped(value?: UtilsErrorResponse | null, ignoreDiscriminator: boolean = false): any { - if (value == null) { - return value; - } - - return { - - 'code': value['code'], - 'message': value['message'], - }; -} - diff --git a/ui/src/sdk/models/index.ts b/ui/src/sdk/models/index.ts deleted file mode 100644 index 3f500eb..0000000 --- a/ui/src/sdk/models/index.ts +++ /dev/null @@ -1,57 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -export * from './DtoAnnotationResponse'; -export * from './DtoAttachAnnotationsRequest'; -export * from './DtoAttachLabelsRequest'; -export * from './DtoAttachServersRequest'; -export * from './DtoAttachTaintsRequest'; -export * from './DtoAuthStartResponse'; -export * from './DtoClusterResponse'; -export * from './DtoCreateAnnotationRequest'; -export * from './DtoCreateClusterRequest'; -export * from './DtoCreateCredentialRequest'; -export * from './DtoCreateLabelRequest'; -export * from './DtoCreateNodePoolRequest'; -export * from './DtoCreateSSHRequest'; -export * from './DtoCreateServerRequest'; -export * from './DtoCreateTaintRequest'; -export * from './DtoCredentialOut'; -export * from './DtoEnqueueRequest'; -export * from './DtoJWK'; -export * from './DtoJWKS'; -export * from './DtoJob'; -export * from './DtoJobStatus'; -export * from './DtoLabelResponse'; -export * from './DtoLogoutRequest'; -export * from './DtoNodePoolResponse'; -export * from './DtoPageJob'; -export * from './DtoQueueInfo'; -export * from './DtoRefreshRequest'; -export * from './DtoServerResponse'; -export * from './DtoSshResponse'; -export * from './DtoSshRevealResponse'; -export * from './DtoTaintResponse'; -export * from './DtoTokenPair'; -export * from './DtoUpdateAnnotationRequest'; -export * from './DtoUpdateCredentialRequest'; -export * from './DtoUpdateLabelRequest'; -export * from './DtoUpdateNodePoolRequest'; -export * from './DtoUpdateServerRequest'; -export * from './DtoUpdateTaintRequest'; -export * from './HandlersCreateUserKeyRequest'; -export * from './HandlersHealthStatus'; -export * from './HandlersMeResponse'; -export * from './HandlersMemberOut'; -export * from './HandlersMemberUpsertReq'; -export * from './HandlersOrgCreateReq'; -export * from './HandlersOrgKeyCreateReq'; -export * from './HandlersOrgKeyCreateResp'; -export * from './HandlersOrgUpdateReq'; -export * from './HandlersUpdateMeRequest'; -export * from './HandlersUserAPIKeyOut'; -export * from './HandlersVersionResponse'; -export * from './ModelsAPIKey'; -export * from './ModelsOrganization'; -export * from './ModelsUser'; -export * from './ModelsUserEmail'; -export * from './UtilsErrorResponse'; diff --git a/ui/src/sdk/runtime.ts b/ui/src/sdk/runtime.ts deleted file mode 100644 index a81d7ec..0000000 --- a/ui/src/sdk/runtime.ts +++ /dev/null @@ -1,432 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * AutoGlue API - * API for managing K3s clusters across cloud providers - * - * The version of the OpenAPI document: 1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -export const BASE_PATH = "/api/v1".replace(/\/+$/, ""); - -export interface ConfigurationParameters { - basePath?: string; // override base path - fetchApi?: FetchAPI; // override for fetch implementation - middleware?: Middleware[]; // middleware to apply before/after fetch requests - queryParamsStringify?: (params: HTTPQuery) => string; // stringify function for query strings - username?: string; // parameter for basic security - password?: string; // parameter for basic security - apiKey?: string | Promise | ((name: string) => string | Promise); // parameter for apiKey security - accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string | Promise); // parameter for oauth2 security - headers?: HTTPHeaders; //header params we want to use on every request - credentials?: RequestCredentials; //value for the credentials param we want to use on each request -} - -export class Configuration { - constructor(private configuration: ConfigurationParameters = {}) {} - - set config(configuration: Configuration) { - this.configuration = configuration; - } - - get basePath(): string { - return this.configuration.basePath != null ? this.configuration.basePath : BASE_PATH; - } - - get fetchApi(): FetchAPI | undefined { - return this.configuration.fetchApi; - } - - get middleware(): Middleware[] { - return this.configuration.middleware || []; - } - - get queryParamsStringify(): (params: HTTPQuery) => string { - return this.configuration.queryParamsStringify || querystring; - } - - get username(): string | undefined { - return this.configuration.username; - } - - get password(): string | undefined { - return this.configuration.password; - } - - get apiKey(): ((name: string) => string | Promise) | undefined { - const apiKey = this.configuration.apiKey; - if (apiKey) { - return typeof apiKey === 'function' ? apiKey : () => apiKey; - } - return undefined; - } - - get accessToken(): ((name?: string, scopes?: string[]) => string | Promise) | undefined { - const accessToken = this.configuration.accessToken; - if (accessToken) { - return typeof accessToken === 'function' ? accessToken : async () => accessToken; - } - return undefined; - } - - get headers(): HTTPHeaders | undefined { - return this.configuration.headers; - } - - get credentials(): RequestCredentials | undefined { - return this.configuration.credentials; - } -} - -export const DefaultConfig = new Configuration(); - -/** - * This is the base class for all generated API classes. - */ -export class BaseAPI { - - private static readonly jsonRegex = new RegExp('^(:?application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(:?;.*)?$', 'i'); - private middleware: Middleware[]; - - constructor(protected configuration = DefaultConfig) { - this.middleware = configuration.middleware; - } - - withMiddleware(this: T, ...middlewares: Middleware[]) { - const next = this.clone(); - next.middleware = next.middleware.concat(...middlewares); - return next; - } - - withPreMiddleware(this: T, ...preMiddlewares: Array) { - const middlewares = preMiddlewares.map((pre) => ({ pre })); - return this.withMiddleware(...middlewares); - } - - withPostMiddleware(this: T, ...postMiddlewares: Array) { - const middlewares = postMiddlewares.map((post) => ({ post })); - return this.withMiddleware(...middlewares); - } - - /** - * Check if the given MIME is a JSON MIME. - * JSON MIME examples: - * application/json - * application/json; charset=UTF8 - * APPLICATION/JSON - * application/vnd.company+json - * @param mime - MIME (Multipurpose Internet Mail Extensions) - * @return True if the given MIME is JSON, false otherwise. - */ - protected isJsonMime(mime: string | null | undefined): boolean { - if (!mime) { - return false; - } - return BaseAPI.jsonRegex.test(mime); - } - - protected async request(context: RequestOpts, initOverrides?: RequestInit | InitOverrideFunction): Promise { - const { url, init } = await this.createFetchParams(context, initOverrides); - const response = await this.fetchApi(url, init); - if (response && (response.status >= 200 && response.status < 300)) { - return response; - } - throw new ResponseError(response, 'Response returned an error code'); - } - - private async createFetchParams(context: RequestOpts, initOverrides?: RequestInit | InitOverrideFunction) { - let url = this.configuration.basePath + context.path; - if (context.query !== undefined && Object.keys(context.query).length !== 0) { - // only add the querystring to the URL if there are query parameters. - // this is done to avoid urls ending with a "?" character which buggy webservers - // do not handle correctly sometimes. - url += '?' + this.configuration.queryParamsStringify(context.query); - } - - const headers = Object.assign({}, this.configuration.headers, context.headers); - Object.keys(headers).forEach(key => headers[key] === undefined ? delete headers[key] : {}); - - const initOverrideFn = - typeof initOverrides === "function" - ? initOverrides - : async () => initOverrides; - - const initParams = { - method: context.method, - headers, - body: context.body, - credentials: this.configuration.credentials, - }; - - const overriddenInit: RequestInit = { - ...initParams, - ...(await initOverrideFn({ - init: initParams, - context, - })) - }; - - let body: any; - if (isFormData(overriddenInit.body) - || (overriddenInit.body instanceof URLSearchParams) - || isBlob(overriddenInit.body)) { - body = overriddenInit.body; - } else if (this.isJsonMime(headers['Content-Type'])) { - body = JSON.stringify(overriddenInit.body); - } else { - body = overriddenInit.body; - } - - const init: RequestInit = { - ...overriddenInit, - body - }; - - return { url, init }; - } - - private fetchApi = async (url: string, init: RequestInit) => { - let fetchParams = { url, init }; - for (const middleware of this.middleware) { - if (middleware.pre) { - fetchParams = await middleware.pre({ - fetch: this.fetchApi, - ...fetchParams, - }) || fetchParams; - } - } - let response: Response | undefined = undefined; - try { - response = await (this.configuration.fetchApi || fetch)(fetchParams.url, fetchParams.init); - } catch (e) { - for (const middleware of this.middleware) { - if (middleware.onError) { - response = await middleware.onError({ - fetch: this.fetchApi, - url: fetchParams.url, - init: fetchParams.init, - error: e, - response: response ? response.clone() : undefined, - }) || response; - } - } - if (response === undefined) { - if (e instanceof Error) { - throw new FetchError(e, 'The request failed and the interceptors did not return an alternative response'); - } else { - throw e; - } - } - } - for (const middleware of this.middleware) { - if (middleware.post) { - response = await middleware.post({ - fetch: this.fetchApi, - url: fetchParams.url, - init: fetchParams.init, - response: response.clone(), - }) || response; - } - } - return response; - } - - /** - * Create a shallow clone of `this` by constructing a new instance - * and then shallow cloning data members. - */ - private clone(this: T): T { - const constructor = this.constructor as any; - const next = new constructor(this.configuration); - next.middleware = this.middleware.slice(); - return next; - } -}; - -function isBlob(value: any): value is Blob { - return typeof Blob !== 'undefined' && value instanceof Blob; -} - -function isFormData(value: any): value is FormData { - return typeof FormData !== "undefined" && value instanceof FormData; -} - -export class ResponseError extends Error { - override name: "ResponseError" = "ResponseError"; - constructor(public response: Response, msg?: string) { - super(msg); - } -} - -export class FetchError extends Error { - override name: "FetchError" = "FetchError"; - constructor(public cause: Error, msg?: string) { - super(msg); - } -} - -export class RequiredError extends Error { - override name: "RequiredError" = "RequiredError"; - constructor(public field: string, msg?: string) { - super(msg); - } -} - -export const COLLECTION_FORMATS = { - csv: ",", - ssv: " ", - tsv: "\t", - pipes: "|", -}; - -export type FetchAPI = WindowOrWorkerGlobalScope['fetch']; - -export type Json = any; -export type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD'; -export type HTTPHeaders = { [key: string]: string }; -export type HTTPQuery = { [key: string]: string | number | null | boolean | Array | Set | HTTPQuery }; -export type HTTPBody = Json | FormData | URLSearchParams; -export type HTTPRequestInit = { headers?: HTTPHeaders; method: HTTPMethod; credentials?: RequestCredentials; body?: HTTPBody }; -export type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original'; - -export type InitOverrideFunction = (requestContext: { init: HTTPRequestInit, context: RequestOpts }) => Promise - -export interface FetchParams { - url: string; - init: RequestInit; -} - -export interface RequestOpts { - path: string; - method: HTTPMethod; - headers: HTTPHeaders; - query?: HTTPQuery; - body?: HTTPBody; -} - -export function querystring(params: HTTPQuery, prefix: string = ''): string { - return Object.keys(params) - .map(key => querystringSingleKey(key, params[key], prefix)) - .filter(part => part.length > 0) - .join('&'); -} - -function querystringSingleKey(key: string, value: string | number | null | undefined | boolean | Array | Set | HTTPQuery, keyPrefix: string = ''): string { - const fullKey = keyPrefix + (keyPrefix.length ? `[${key}]` : key); - if (value instanceof Array) { - const multiValue = value.map(singleValue => encodeURIComponent(String(singleValue))) - .join(`&${encodeURIComponent(fullKey)}=`); - return `${encodeURIComponent(fullKey)}=${multiValue}`; - } - if (value instanceof Set) { - const valueAsArray = Array.from(value); - return querystringSingleKey(key, valueAsArray, keyPrefix); - } - if (value instanceof Date) { - return `${encodeURIComponent(fullKey)}=${encodeURIComponent(value.toISOString())}`; - } - if (value instanceof Object) { - return querystring(value as HTTPQuery, fullKey); - } - return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`; -} - -export function exists(json: any, key: string) { - const value = json[key]; - return value !== null && value !== undefined; -} - -export function mapValues(data: any, fn: (item: any) => any) { - const result: { [key: string]: any } = {}; - for (const key of Object.keys(data)) { - result[key] = fn(data[key]); - } - return result; -} - -export function canConsumeForm(consumes: Consume[]): boolean { - for (const consume of consumes) { - if ('multipart/form-data' === consume.contentType) { - return true; - } - } - return false; -} - -export interface Consume { - contentType: string; -} - -export interface RequestContext { - fetch: FetchAPI; - url: string; - init: RequestInit; -} - -export interface ResponseContext { - fetch: FetchAPI; - url: string; - init: RequestInit; - response: Response; -} - -export interface ErrorContext { - fetch: FetchAPI; - url: string; - init: RequestInit; - error: unknown; - response?: Response; -} - -export interface Middleware { - pre?(context: RequestContext): Promise; - post?(context: ResponseContext): Promise; - onError?(context: ErrorContext): Promise; -} - -export interface ApiResponse { - raw: Response; - value(): Promise; -} - -export interface ResponseTransformer { - (json: any): T; -} - -export class JSONApiResponse { - constructor(public raw: Response, private transformer: ResponseTransformer = (jsonValue: any) => jsonValue) {} - - async value(): Promise { - return this.transformer(await this.raw.json()); - } -} - -export class VoidApiResponse { - constructor(public raw: Response) {} - - async value(): Promise { - return undefined; - } -} - -export class BlobApiResponse { - constructor(public raw: Response) {} - - async value(): Promise { - return await this.raw.blob(); - }; -} - -export class TextApiResponse { - constructor(public raw: Response) {} - - async value(): Promise { - return await this.raw.text(); - }; -} diff --git a/ui/src/sdk/tsconfig.esm.json b/ui/src/sdk/tsconfig.esm.json deleted file mode 100644 index 2c0331c..0000000 --- a/ui/src/sdk/tsconfig.esm.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "esnext", - "outDir": "dist/esm" - } -} diff --git a/ui/yarn.lock b/ui/yarn.lock index 12a4a69..cf48a88 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -763,11 +763,6 @@ resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== -"@pkgr/core@^0.2.9": - version "0.2.9" - resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b" - integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA== - "@radix-ui/number@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.1.1.tgz#7b2c9225fbf1b126539551f5985769d0048d9090" @@ -2492,19 +2487,6 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-prettier@10.1.8: - version "10.1.8" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz#15734ce4af8c2778cc32f0b01b37b0b5cd1ecb97" - integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w== - -eslint-plugin-prettier@5.5.4: - version "5.5.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz#9d61c4ea11de5af704d4edf108c82ccfa7f2e61c" - integrity sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.11.7" - eslint-plugin-react-hooks@7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz#66e258db58ece50723ef20cc159f8aa908219169" @@ -2715,11 +2697,6 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - fast-equals@^5.0.1: version "5.3.2" resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.3.2.tgz#75a9c7b1c2f627851349a2db94327d79b774ce83" @@ -3754,13 +3731,6 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - prettier-plugin-tailwindcss@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.7.1.tgz#0cb15246668788e62b5b752868f5e01f0ce7eec9" @@ -4329,17 +4299,10 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -synckit@^0.11.7: - version "0.11.11" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.11.tgz#c0b619cf258a97faa209155d9cd1699b5c998cb0" - integrity sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw== - dependencies: - "@pkgr/core" "^0.2.9" - -tailwind-merge@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-3.3.1.tgz#a7e7db7c714f6020319e626ecfb7e7dac8393a4b" - integrity sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g== +tailwind-merge@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-3.4.0.tgz#5a264e131a096879965f1175d11f8c36e6b64eca" + integrity sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g== tailwindcss@4.1.17, tailwindcss@^4.1.17: version "4.1.17"