diff --git a/autoglue b/autoglue index 8871ab4..c658036 100755 Binary files a/autoglue and b/autoglue differ diff --git a/docs/docs.go b/docs/docs.go index 04322ec..0e20c6b 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -953,6 +953,233 @@ const docTemplate = `{ } } }, + "/api/v1/labels/{id}": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Returns one label. Add ` + "`" + `include=node_pools` + "`" + ` to include node groups.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "labels" + ], + "summary": "Get label by ID (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Label ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Optional: node_pools", + "name": "include", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/labels.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": [] + } + ], + "description": "Permanently deletes the label.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "labels" + ], + "summary": "Delete label (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "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": [] + } + ], + "description": "Partially update label fields.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "labels" + ], + "summary": "Update label (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "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/labels.updateLabelRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/labels.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" + } + } + } + } + }, "/api/v1/node-pools": { "get": { "security": [ @@ -3647,6 +3874,17 @@ const docTemplate = `{ } } }, + "labels.updateLabelRequest": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, "models.Member": { "type": "object", "properties": { diff --git a/docs/swagger.json b/docs/swagger.json index 4a5d942..2c1c878 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -949,6 +949,233 @@ } } }, + "/api/v1/labels/{id}": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Returns one label. Add `include=node_pools` to include node groups.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "labels" + ], + "summary": "Get label by ID (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Label ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Optional: node_pools", + "name": "include", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/labels.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": [] + } + ], + "description": "Permanently deletes the label.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "labels" + ], + "summary": "Delete label (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "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": [] + } + ], + "description": "Partially update label fields.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "labels" + ], + "summary": "Update label (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "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/labels.updateLabelRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/labels.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" + } + } + } + } + }, "/api/v1/node-pools": { "get": { "security": [ @@ -3643,6 +3870,17 @@ } } }, + "labels.updateLabelRequest": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, "models.Member": { "type": "object", "properties": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 3966341..b1553da 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -183,6 +183,13 @@ definitions: name: type: string type: object + labels.updateLabelRequest: + properties: + key: + type: string + value: + type: string + type: object models.Member: properties: created_at: @@ -1106,6 +1113,154 @@ paths: summary: Create label (org scoped) tags: - labels + /api/v1/labels/{id}: + delete: + consumes: + - application/json + description: Permanently deletes the label. + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + 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: [] + summary: Delete label (org scoped) + tags: + - labels + get: + consumes: + - application/json + description: Returns one label. Add `include=node_pools` to include node groups. + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Label ID (UUID) + in: path + name: id + required: true + type: string + - description: 'Optional: node_pools' + in: query + name: include + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/labels.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: [] + summary: Get label by ID (org scoped) + tags: + - labels + patch: + consumes: + - application/json + description: Partially update label fields. + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + 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/labels.updateLabelRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/labels.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: [] + summary: Update label (org scoped) + tags: + - labels /api/v1/node-pools: get: consumes: diff --git a/go.sum b/go.sum index 87e77c0..334c67a 100644 --- a/go.sum +++ b/go.sum @@ -81,12 +81,8 @@ github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs= github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4= github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= -github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= -github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= -github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4= diff --git a/internal/api/routes.go b/internal/api/routes.go index b45d0d9..9a7e9e1 100644 --- a/internal/api/routes.go +++ b/internal/api/routes.go @@ -118,6 +118,8 @@ func RegisterRoutes(r chi.Router) { l.Get("/", labels.ListLabels) l.Post("/", labels.CreateLabel) l.Get("/{id}", labels.GetLabel) + l.Patch("/{id}", labels.UpdateLabel) + l.Delete("/{id}", labels.DeleteLabel) }) }) }) diff --git a/internal/handlers/labels/dto.go b/internal/handlers/labels/dto.go index 83949c3..01755da 100644 --- a/internal/handlers/labels/dto.go +++ b/internal/handlers/labels/dto.go @@ -19,3 +19,8 @@ type createLabelRequest struct { Value string `json:"value"` NodePoolIDs []string `json:"node_pool_ids,omitempty"` } + +type updateLabelRequest struct { + Key *string `json:"key"` + Value *string `json:"value"` +} diff --git a/internal/handlers/labels/labels.go b/internal/handlers/labels/labels.go index b61cb60..eab46c1 100644 --- a/internal/handlers/labels/labels.go +++ b/internal/handlers/labels/labels.go @@ -79,7 +79,6 @@ func ListLabels(w http.ResponseWriter, r *http.Request) { // @Failure 404 {string} string "not found" // @Failure 500 {string} string "fetch failed" // @Router /api/v1/labels/{id} [get] - func GetLabel(w http.ResponseWriter, r *http.Request) { ac := middleware.GetAuthContext(r) if ac == nil || ac.OrganizationID == uuid.Nil { @@ -176,5 +175,99 @@ func CreateLabel(w http.ResponseWriter, r *http.Request) { } _ = response.JSON(w, http.StatusCreated, toResp(t, false)) - +} + +// UpdateLabel godoc +// @Summary Update label (org scoped) +// @Description Partially update label fields. +// @Tags labels +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Label ID (UUID)" +// @Param body body updateLabelRequest true "Fields to update" +// @Security BearerAuth +// @Success 200 {object} labelResponse +// @Failure 400 {string} string "invalid id / invalid json" +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 404 {string} string "not found" +// @Failure 500 {string} string "update failed" +// @Router /api/v1/labels/{id} [patch] +func UpdateLabel(w http.ResponseWriter, r *http.Request) { + ac := middleware.GetAuthContext(r) + if ac == nil || ac.OrganizationID == uuid.Nil { + http.Error(w, "organization required", http.StatusForbidden) + return + } + + id, err := uuid.Parse(chi.URLParam(r, "id")) + if err != nil { + http.Error(w, "invalid id", http.StatusBadRequest) + return + } + + var t models.Label + if err := db.DB.Where("id = ? AND organization_id = ?", id, ac.OrganizationID).First(&t).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + http.Error(w, "not found", http.StatusNotFound) + return + } + http.Error(w, "fetch failed", http.StatusInternalServerError) + return + } + + var req updateLabelRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "invalid json or missing key/value", http.StatusBadRequest) + return + } + if req.Key != nil { + t.Key = strings.TrimSpace(*req.Key) + } + if req.Value != nil { + t.Value = strings.TrimSpace(*req.Value) + } + + if err := db.DB.Save(&t).Error; err != nil { + http.Error(w, "update failed", http.StatusInternalServerError) + return + } + _ = response.JSON(w, http.StatusOK, toResp(t, false)) +} + +// DeleteLabel godoc +// @Summary Delete label (org scoped) +// @Description Permanently deletes the label. +// @Tags labels +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Label ID (UUID)" +// @Security BearerAuth +// @Success 204 {string} string "No Content" +// @Failure 400 {string} string "invalid id" +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 500 {string} string "delete failed" +// @Router /api/v1/labels/{id} [delete] +func DeleteLabel(w http.ResponseWriter, r *http.Request) { + ac := middleware.GetAuthContext(r) + if ac == nil || ac.OrganizationID == uuid.Nil { + http.Error(w, "organization required", http.StatusForbidden) + return + } + + id, err := uuid.Parse(chi.URLParam(r, "id")) + if err != nil { + http.Error(w, "invalid id", http.StatusBadRequest) + return + } + + if err := db.DB.Where("id = ? AND organization_id = ?", id, ac.OrganizationID).Delete(&models.Taint{}).Error; err != nil { + http.Error(w, "delete failed", http.StatusInternalServerError) + return + } + + response.NoContent(w) } diff --git a/internal/ui/dist/assets/icons-CNkJtX2d.js b/internal/ui/dist/assets/icons-DQ1I1M7X.js similarity index 99% rename from internal/ui/dist/assets/icons-CNkJtX2d.js rename to internal/ui/dist/assets/icons-DQ1I1M7X.js index bedccb0..15edc62 100644 --- a/internal/ui/dist/assets/icons-CNkJtX2d.js +++ b/internal/ui/dist/assets/icons-DQ1I1M7X.js @@ -1,4 +1,4 @@ -import{r as d,R as s}from"./vendor-DBKlM1wc.js";/** +import{r as d,R as s}from"./vendor-DvippHRz.js";/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. @@ -183,4 +183,4 @@ import{r as d,R as s}from"./vendor-DBKlM1wc.js";/** * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const r1=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],Z1=n("x",r1);var f={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},u=s.createContext&&s.createContext(f),h1=["attr","size","title"];function s1(e,t){if(e==null)return{};var a=i1(e,t),c,o;if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0)&&Object.prototype.propertyIsEnumerable.call(e,c)&&(a[c]=e[c])}return a}function i1(e,t){if(e==null)return{};var a={};for(var c in e)if(Object.prototype.hasOwnProperty.call(e,c)){if(t.indexOf(c)>=0)continue;a[c]=e[c]}return a}function y(){return y=Object.assign?Object.assign.bind():function(e){for(var t=1;ts.createElement(t.tag,l({key:a},t.attr),M(t.child)))}function _(e){return t=>s.createElement(p1,y({attr:l({},e.attr)},t),M(e.child))}function p1(e){var t=a=>{var{attr:c,size:o,title:r}=e,p=s1(e,h1),i=o||a.size||"1em",h;return a.className&&(h=a.className),e.className&&(h=(h?h+" ":"")+e.className),s.createElement("svg",y({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},a.attr,c,p,{className:h,style:l(l({color:e.color||a.color},a.style),e.style),height:i,width:i,xmlns:"http://www.w3.org/2000/svg"}),r&&s.createElement("title",null,r),e.children)};return u!==void 0?s.createElement(u.Consumer,null,a=>t(a)):t(f)}function F1(e){return _({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 G1(e){return _({attr:{viewBox:"0 0 496 512"},child:[{tag:"path",attr:{d:"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"},child:[]}]})(e)}export{F1 as A,u1 as B,f1 as C,b1 as F,z1 as H,j1 as K,N1 as L,P1 as M,A1 as P,L1 as R,U1 as S,D1 as T,W1 as U,Z1 as X,x1 as a,B1 as b,E1 as c,m1 as d,O1 as e,$1 as f,v1 as g,T1 as h,H1 as i,S1 as j,M1 as k,G1 as l,_1 as m,q1 as n,R1 as o,V1 as p,w1 as q,g1 as r,K1 as s,C1 as t,I1 as u}; + */const r1=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],Z1=n("x",r1);var f={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},u=s.createContext&&s.createContext(f),h1=["attr","size","title"];function s1(e,t){if(e==null)return{};var a=i1(e,t),c,o;if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0)&&Object.prototype.propertyIsEnumerable.call(e,c)&&(a[c]=e[c])}return a}function i1(e,t){if(e==null)return{};var a={};for(var c in e)if(Object.prototype.hasOwnProperty.call(e,c)){if(t.indexOf(c)>=0)continue;a[c]=e[c]}return a}function y(){return y=Object.assign?Object.assign.bind():function(e){for(var t=1;ts.createElement(t.tag,l({key:a},t.attr),M(t.child)))}function _(e){return t=>s.createElement(p1,y({attr:l({},e.attr)},t),M(e.child))}function p1(e){var t=a=>{var{attr:c,size:o,title:r}=e,p=s1(e,h1),i=o||a.size||"1em",h;return a.className&&(h=a.className),e.className&&(h=(h?h+" ":"")+e.className),s.createElement("svg",y({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},a.attr,c,p,{className:h,style:l(l({color:e.color||a.color},a.style),e.style),height:i,width:i,xmlns:"http://www.w3.org/2000/svg"}),r&&s.createElement("title",null,r),e.children)};return u!==void 0?s.createElement(u.Consumer,null,a=>t(a)):t(f)}function F1(e){return _({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 G1(e){return _({attr:{viewBox:"0 0 496 512"},child:[{tag:"path",attr:{d:"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"},child:[]}]})(e)}export{F1 as A,u1 as B,f1 as C,b1 as F,z1 as H,j1 as K,N1 as L,P1 as M,A1 as P,L1 as R,U1 as S,D1 as T,W1 as U,Z1 as X,x1 as a,B1 as b,E1 as c,m1 as d,O1 as e,$1 as f,v1 as g,T1 as h,H1 as i,S1 as j,M1 as k,G1 as l,_1 as m,q1 as n,R1 as o,V1 as p,C1 as q,I1 as r,w1 as s,g1 as t,K1 as u}; diff --git a/internal/ui/dist/assets/index-D2Vr0ZQJ.css b/internal/ui/dist/assets/index--a4aJrTK.css similarity index 99% rename from internal/ui/dist/assets/index-D2Vr0ZQJ.css rename to internal/ui/dist/assets/index--a4aJrTK.css index 6751885..2aca382 100644 --- a/internal/ui/dist/assets/index-D2Vr0ZQJ.css +++ b/internal/ui/dist/assets/index--a4aJrTK.css @@ -1 +1 @@ -/*! tailwindcss v4.1.12 | 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-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-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-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-500:oklch(63.7% .237 25.331);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-widest:.1em;--leading-tight:1.25;--leading-loose:2;--radius-xs:.125rem;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::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}.pointer-events-none{pointer-events:none}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.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-0{top:calc(var(--spacing)*0)}.top-1\.5{top:calc(var(--spacing)*1.5)}.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-\[50\%\]{top:50%}.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-0{bottom:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.left-2{left:calc(var(--spacing)*2)}.left-\[50\%\]{left:50%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.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}}.-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-1{margin-block:calc(var(--spacing)*1)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-auto{margin-top:auto}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-auto{margin-left:auto}.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}.aspect-square{aspect-ratio:1}.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\.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-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.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-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-svh{height:100svh}.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-56{max-height:calc(var(--spacing)*56)}.max-h-64{max-height:calc(var(--spacing)*64)}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-\(--sidebar-width\){width:var(--sidebar-width)}.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-24{width:calc(var(--spacing)*24)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-\[120px\]{width:120px}.w-\[160px\]{width:160px}.w-\[180px\]{width:180px}.w-\[200px\]{width:200px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-\[70vw\]{max-width:70vw}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[360px\]{min-width:360px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-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: -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-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-\[-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}.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)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.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-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.border{border-style:var(--tw-border-style);border-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-input{border-color:var(--input)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-transparent{border-color:#0000}.bg-accent{background-color:var(--accent)}.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-muted,.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-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-border{background-color:var(--sidebar-border)}.bg-transparent{background-color:#0000}.fill-current{fill:currentColor}.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)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.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-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.pt-4{padding-top:calc(var(--spacing)*4)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pl-2{padding-left:calc(var(--spacing)*2)}.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}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.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-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-accent-foreground{color:var(--accent-foreground)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.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-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-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.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{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.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-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-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}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[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-200{--tw-duration:.2s;transition-duration:.2s}.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}.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-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] *){opacity:.5}.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\]\/collapsible\:rotate-180:is(:where(.group\/collapsible)[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)}@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{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.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-\[2px\]:after{content:var(--tw-content);width:2px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}@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\/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-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\: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\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.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\:border-ring:focus-visible{border-color:var(--ring)}.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-\[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\/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\/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)}}.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-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.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)}.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)}}.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-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{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-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-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\=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-\[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-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%}.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]{background-color:var(--accent)}.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-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%}@media (hover:hover){.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\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.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)}@media (min-width:40rem){.sm\:flex{display:flex}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-\[480px\]{max-width:480px}.sm\:max-w-\[520px\]{max-width:520px}.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\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}.sm\:text-left{text-align:left}}@media (min-width:48rem){.md\:block{display:block}.md\:flex{display:flex}.md\:h-24{height:calc(var(--spacing)*24)}.md\:max-w-\[48ch\]{max-width:48ch}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md\:px-0{padding-inline:calc(var(--spacing)*0)}.md\:py-0{padding-block:calc(var(--spacing)*0)}.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\:break-normal{overflow-wrap:normal;word-break:normal}.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-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.dark\:border-input:is(.dark *){border-color:var(--input)}.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)}}@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\: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\: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-\[state\=checked\]\:bg-primary:is(.dark *)[data-state=checked]{background-color:var(--primary)}.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)}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_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}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}: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}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>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-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}[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}@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:oklch(100% 0 0);--foreground:oklch(14.1% .005 285.823);--card:oklch(100% 0 0);--card-foreground:oklch(14.1% .005 285.823);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.1% .005 285.823);--primary:oklch(21% .006 285.885);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(96.7% .001 286.375);--secondary-foreground:oklch(21% .006 285.885);--muted:oklch(96.7% .001 286.375);--muted-foreground:oklch(55.2% .016 285.938);--accent:oklch(96.7% .001 286.375);--accent-foreground:oklch(21% .006 285.885);--destructive:oklch(57.7% .245 27.325);--border:oklch(92% .004 286.32);--input:oklch(92% .004 286.32);--ring:oklch(70.5% .015 286.067);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08);--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.1% .005 285.823);--sidebar-primary:oklch(21% .006 285.885);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(96.7% .001 286.375);--sidebar-accent-foreground:oklch(21% .006 285.885);--sidebar-border:oklch(92% .004 286.32);--sidebar-ring:oklch(70.5% .015 286.067)}.dark{--background:oklch(14.1% .005 285.823);--foreground:oklch(98.5% 0 0);--card:oklch(21% .006 285.885);--card-foreground:oklch(98.5% 0 0);--popover:oklch(21% .006 285.885);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92% .004 286.32);--primary-foreground:oklch(21% .006 285.885);--secondary:oklch(27.4% .006 286.033);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(27.4% .006 286.033);--muted-foreground:oklch(70.5% .015 286.067);--accent:oklch(27.4% .006 286.033);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.2% .016 285.938);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439);--sidebar:oklch(21% .006 285.885);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(27.4% .006 286.033);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.2% .016 285.938)}@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-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-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@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))}} +/*! tailwindcss v4.1.12 | 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-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-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-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-500:oklch(63.7% .237 25.331);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-widest:.1em;--leading-tight:1.25;--leading-loose:2;--radius-xs:.125rem;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::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}.pointer-events-none{pointer-events:none}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.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-0{top:calc(var(--spacing)*0)}.top-1\.5{top:calc(var(--spacing)*1.5)}.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-\[50\%\]{top:50%}.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-0{bottom:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.left-2{left:calc(var(--spacing)*2)}.left-\[50\%\]{left:50%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.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}}.-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-1{margin-block:calc(var(--spacing)*1)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-auto{margin-top:auto}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-auto{margin-left:auto}.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}.aspect-square{aspect-ratio:1}.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\.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-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.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-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-svh{height:100svh}.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-56{max-height:calc(var(--spacing)*56)}.max-h-64{max-height:calc(var(--spacing)*64)}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-\(--sidebar-width\){width:var(--sidebar-width)}.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-24{width:calc(var(--spacing)*24)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-\[120px\]{width:120px}.w-\[160px\]{width:160px}.w-\[180px\]{width:180px}.w-\[200px\]{width:200px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-\[70vw\]{max-width:70vw}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[360px\]{min-width:360px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-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: -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-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-\[-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}.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)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.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-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.border{border-style:var(--tw-border-style);border-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-input{border-color:var(--input)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-transparent{border-color:#0000}.bg-accent{background-color:var(--accent)}.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-muted,.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-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-border{background-color:var(--sidebar-border)}.bg-transparent{background-color:#0000}.fill-current{fill:currentColor}.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)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.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-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.pt-4{padding-top:calc(var(--spacing)*4)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pl-2{padding-left:calc(var(--spacing)*2)}.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}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.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-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-accent-foreground{color:var(--accent-foreground)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.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-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-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.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{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.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-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-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}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[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-200{--tw-duration:.2s;transition-duration:.2s}.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}.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-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] *){opacity:.5}.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\]\/collapsible\:rotate-180:is(:where(.group\/collapsible)[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)}@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{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.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-\[2px\]:after{content:var(--tw-content);width:2px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}@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\/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-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\: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\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.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\:border-ring:focus-visible{border-color:var(--ring)}.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-\[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\/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\/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)}}.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-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.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)}.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)}}.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-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{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-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-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(var(--spacing)*2*-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(var(--spacing)*2)}.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(var(--spacing)*2*-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(var(--spacing)*2)}.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\=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-\[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-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%}.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]{background-color:var(--accent)}.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-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%}@media (hover:hover){.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\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.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)}@media (min-width:40rem){.sm\:flex{display:flex}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-\[480px\]{max-width:480px}.sm\:max-w-\[520px\]{max-width:520px}.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\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}.sm\:text-left{text-align:left}}@media (min-width:48rem){.md\:block{display:block}.md\:flex{display:flex}.md\:h-24{height:calc(var(--spacing)*24)}.md\:max-w-\[48ch\]{max-width:48ch}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md\:px-0{padding-inline:calc(var(--spacing)*0)}.md\:py-0{padding-block:calc(var(--spacing)*0)}.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\:break-normal{overflow-wrap:normal;word-break:normal}.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-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.dark\:border-input:is(.dark *){border-color:var(--input)}.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)}}@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\: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\: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-\[state\=checked\]\:bg-primary:is(.dark *)[data-state=checked]{background-color:var(--primary)}.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)}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_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}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}: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}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>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-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}[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}@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:oklch(100% 0 0);--foreground:oklch(14.1% .005 285.823);--card:oklch(100% 0 0);--card-foreground:oklch(14.1% .005 285.823);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.1% .005 285.823);--primary:oklch(21% .006 285.885);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(96.7% .001 286.375);--secondary-foreground:oklch(21% .006 285.885);--muted:oklch(96.7% .001 286.375);--muted-foreground:oklch(55.2% .016 285.938);--accent:oklch(96.7% .001 286.375);--accent-foreground:oklch(21% .006 285.885);--destructive:oklch(57.7% .245 27.325);--border:oklch(92% .004 286.32);--input:oklch(92% .004 286.32);--ring:oklch(70.5% .015 286.067);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08);--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.1% .005 285.823);--sidebar-primary:oklch(21% .006 285.885);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(96.7% .001 286.375);--sidebar-accent-foreground:oklch(21% .006 285.885);--sidebar-border:oklch(92% .004 286.32);--sidebar-ring:oklch(70.5% .015 286.067)}.dark{--background:oklch(14.1% .005 285.823);--foreground:oklch(98.5% 0 0);--card:oklch(21% .006 285.885);--card-foreground:oklch(98.5% 0 0);--popover:oklch(21% .006 285.885);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92% .004 286.32);--primary-foreground:oklch(21% .006 285.885);--secondary:oklch(27.4% .006 286.033);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(27.4% .006 286.033);--muted-foreground:oklch(70.5% .015 286.067);--accent:oklch(27.4% .006 286.033);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.2% .016 285.938);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439);--sidebar:oklch(21% .006 285.885);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(27.4% .006 286.033);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.2% .016 285.938)}@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-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-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@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))}} diff --git a/internal/ui/dist/assets/index-CmZFDWt2.js b/internal/ui/dist/assets/index-CmZFDWt2.js new file mode 100644 index 0000000..1f1583c --- /dev/null +++ b/internal/ui/dist/assets/index-CmZFDWt2.js @@ -0,0 +1 @@ +import{t as Xs,m as Qs,r as c,j as e,n as ss,z as Es,F as Zs,C as et,p as st,q as tt,v as J,w as R,_ as Ne,x as Se,y as at,A as B,B as K,D as O,E as zs,G as ts,T as rt,J as nt,H as it}from"./vendor-DvippHRz.js";import{S as Me,R as lt,a as Os,C as Ls,b as As,T as Ds,D as Ts,P as $s,O as Ms,c as ot,d as dt,e as ct,f as mt,g as ut,A as xt,h as ht,i as jt,j as ft,k as gt,l as pt,m as vt,n as bt,I as wt,o as yt,p as Nt,q as St,r as Ct,s as kt,t as _t,u as It,v as Et,w as zt,x as Ot,y as Lt,z as At,B as Dt,E as Tt,V as $t,F as Mt,G as Pt,H as Ft,J as Rt,K as Vt,L as Ht,M as Ut,N as Bt,Q as Kt,U as Gt}from"./radix-DRmH1vcw.js";import{X as Ps,S as qt,M as Jt,L as Wt,C as Ee,H as Yt,A as Xt,B as Qt,a as Zt,T as ea,b as sa,c as Fs,d as ta,K as aa,F as ra,e as na,f as ia,g as la,U as vs,h as oa,i as da,j as ca,k as as,l as ma,m as ua,P as Pe,n as Je,o as we,p as Rs,R as Vs,q as Ce,r as xa,s as ha,t as ja,u as bs}from"./icons-DQ1I1M7X.js";import{u as We,L as ve,O as rs,N as ns,a as Fe,b as Hs,R as fa,c as T,B as ga}from"./router-CANfZtzM.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const m of document.querySelectorAll('link[rel="modulepreload"]'))n(m);new MutationObserver(m=>{for(const u of m)if(u.type==="childList")for(const g of u.addedNodes)g.tagName==="LINK"&&g.rel==="modulepreload"&&n(g)}).observe(document,{childList:!0,subtree:!0});function a(m){const u={};return m.integrity&&(u.integrity=m.integrity),m.referrerPolicy&&(u.referrerPolicy=m.referrerPolicy),m.crossOrigin==="use-credentials"?u.credentials="include":m.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function n(m){if(m.ep)return;m.ep=!0;const u=a(m);fetch(m.href,u)}})();function h(...s){return Xs(Qs(s))}function ws(s){return s.toLowerCase().trim().replace(/['"]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)+/g,"")}const Qe=768;function pa(){const[s,t]=c.useState(void 0);return c.useEffect(()=>{const a=window.matchMedia(`(max-width: ${Qe-1}px)`),n=()=>{t(window.innerWidtha.removeEventListener("change",n)},[]),!!s}const is=ss("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 shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs 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 shadow-xs 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"}},defaultVariants:{variant:"default",size:"default"}});function x({className:s,variant:t,size:a,asChild:n=!1,...m}){const u=n?Me:"button";return e.jsx(u,{"data-slot":"button",className:h(is({variant:t,size:a,className:s})),...m})}function L({className:s,type:t,...a}){return e.jsx("input",{type:t,"data-slot":"input",className:h("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex 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",s),...a})}function ze({className:s,orientation:t="horizontal",decorative:a=!0,...n}){return e.jsx(lt,{"data-slot":"separator",decorative:a,orientation:t,className:h("bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",s),...n})}function va({...s}){return e.jsx(Os,{"data-slot":"sheet",...s})}function ba({...s}){return e.jsx($s,{"data-slot":"sheet-portal",...s})}function wa({className:s,...t}){return e.jsx(Ms,{"data-slot":"sheet-overlay",className:h("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",s),...t})}function ya({className:s,children:t,side:a="right",...n}){return e.jsxs(ba,{children:[e.jsx(wa,{}),e.jsxs(Ls,{"data-slot":"sheet-content",className:h("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",a==="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",a==="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",a==="top"&&"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",a==="bottom"&&"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",s),...n,children:[t,e.jsxs(As,{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:[e.jsx(Ps,{className:"size-4"}),e.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function Na({className:s,...t}){return e.jsx("div",{"data-slot":"sheet-header",className:h("flex flex-col gap-1.5 p-4",s),...t})}function Sa({className:s,...t}){return e.jsx(Ds,{"data-slot":"sheet-title",className:h("text-foreground font-semibold",s),...t})}function Ca({className:s,...t}){return e.jsx(Ts,{"data-slot":"sheet-description",className:h("text-muted-foreground text-sm",s),...t})}function fe({className:s,...t}){return e.jsx("div",{"data-slot":"skeleton",className:h("bg-accent animate-pulse rounded-md",s),...t})}function Ye({delayDuration:s=0,...t}){return e.jsx(ot,{"data-slot":"tooltip-provider",delayDuration:s,...t})}function ls({...s}){return e.jsx(Ye,{children:e.jsx(dt,{"data-slot":"tooltip",...s})})}function os({...s}){return e.jsx(ct,{"data-slot":"tooltip-trigger",...s})}function ds({className:s,sideOffset:t=0,children:a,...n}){return e.jsx(mt,{children:e.jsxs(ut,{"data-slot":"tooltip-content",sideOffset:t,className:h("bg-primary text-primary-foreground 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",s),...n,children:[a,e.jsx(xt,{className:"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]"})]})})}const ka="sidebar_state",_a=3600*24*7,Ia="16rem",Ea="18rem",za="3rem",Oa="b",Us=c.createContext(null);function Bs(){const s=c.useContext(Us);if(!s)throw new Error("useSidebar must be used within a SidebarProvider.");return s}function La({defaultOpen:s=!0,open:t,onOpenChange:a,className:n,style:m,children:u,...g}){const j=pa(),[b,f]=c.useState(!1),[k,p]=c.useState(s),_=t??k,I=c.useCallback(o=>{const d=typeof o=="function"?o(_):o;a?a(d):p(d),document.cookie=`${ka}=${d}; path=/; max-age=${_a}`},[a,_]),$=c.useCallback(()=>j?f(o=>!o):I(o=>!o),[j,I,f]);c.useEffect(()=>{const o=d=>{d.key===Oa&&(d.metaKey||d.ctrlKey)&&(d.preventDefault(),$())};return window.addEventListener("keydown",o),()=>window.removeEventListener("keydown",o)},[$]);const M=_?"expanded":"collapsed",F=c.useMemo(()=>({state:M,open:_,setOpen:I,isMobile:j,openMobile:b,setOpenMobile:f,toggleSidebar:$}),[M,_,I,j,b,f,$]);return e.jsx(Us.Provider,{value:F,children:e.jsx(Ye,{delayDuration:0,children:e.jsx("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":Ia,"--sidebar-width-icon":za,...m},className:h("group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full",n),...g,children:u})})})}function Aa({side:s="left",variant:t="sidebar",collapsible:a="offcanvas",className:n,children:m,...u}){const{isMobile:g,state:j,openMobile:b,setOpenMobile:f}=Bs();return a==="none"?e.jsx("div",{"data-slot":"sidebar",className:h("bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col",n),...u,children:m}):g?e.jsx(va,{open:b,onOpenChange:f,...u,children:e.jsxs(ya,{"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":Ea},side:s,children:[e.jsxs(Na,{className:"sr-only",children:[e.jsx(Sa,{children:"Sidebar"}),e.jsx(Ca,{children:"Displays the mobile sidebar."})]}),e.jsx("div",{className:"flex h-full w-full flex-col",children:m})]})}):e.jsxs("div",{className:"group peer text-sidebar-foreground hidden md:block","data-state":j,"data-collapsible":j==="collapsed"?a:"","data-variant":t,"data-side":s,"data-slot":"sidebar",children:[e.jsx("div",{"data-slot":"sidebar-gap",className:h("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)")}),e.jsx("div",{"data-slot":"sidebar-container",className:h("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",s==="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",n),...u,children:e.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:m})})]})}function Da({className:s,...t}){return e.jsx("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:h("flex flex-col gap-2 p-2",s),...t})}function Ta({className:s,...t}){return e.jsx("div",{"data-slot":"sidebar-footer","data-sidebar":"footer",className:h("flex flex-col gap-2 p-2",s),...t})}function $a({className:s,...t}){return e.jsx("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:h("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",s),...t})}function Ma({className:s,...t}){return e.jsx("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:h("relative flex w-full min-w-0 flex-col p-2",s),...t})}function Pa({className:s,asChild:t=!1,...a}){const n=t?Me:"div";return e.jsx(n,{"data-slot":"sidebar-group-label","data-sidebar":"group-label",className:h("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",s),...a})}function Fa({className:s,...t}){return e.jsx("div",{"data-slot":"sidebar-group-content","data-sidebar":"group-content",className:h("w-full text-sm",s),...t})}function Ra({className:s,...t}){return e.jsx("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:h("flex w-full min-w-0 flex-col gap-1",s),...t})}function Va({className:s,...t}){return e.jsx("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:h("group/menu-item relative",s),...t})}const Ha=ss("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 Ua({asChild:s=!1,isActive:t=!1,variant:a="default",size:n="default",tooltip:m,className:u,...g}){const j=s?Me:"button",{isMobile:b,state:f}=Bs(),k=e.jsx(j,{"data-slot":"sidebar-menu-button","data-sidebar":"menu-button","data-size":n,"data-active":t,className:h(Ha({variant:a,size:n}),u),...g});return m?(typeof m=="string"&&(m={children:m}),e.jsxs(ls,{children:[e.jsx(os,{asChild:!0,children:k}),e.jsx(ds,{side:"right",align:"center",hidden:f!=="collapsed"||b,...m})]})):k}const Ge="";class Y extends Error{status;body;constructor(t,a,n){super(a),this.status=t,this.body=n}}function Ba(s){const t={};if(!s)return t;if(s instanceof Headers)s.forEach((a,n)=>t[n]=a);else if(Array.isArray(s))for(const[a,n]of s)t[a]=n;else Object.assign(t,s);return t}function Ka(){const s={},t=localStorage.getItem("access_token");return t&&(s.Authorization=`Bearer ${t}`),s}function Ga(){const s=localStorage.getItem("active_org_id");return s?{"X-Org-ID":s}:{}}async function ke(s,t,a,n={}){const u={...{"Content-Type":"application/json"},...n.auth===!1?{}:Ka(),...Ga(),...Ba(n.headers)},g=await fetch(`${Ge}${s}`,{method:t,headers:u,body:a===void 0?void 0:JSON.stringify(a),...n}),b=(g.headers.get("content-type")||"").includes("application/json"),f=b?await g.json().catch(()=>{}):await g.text().catch(()=>"");if(!g.ok){const k=b&&f&&typeof f=="object"&&"error"in f&&f.error||b&&f&&typeof f=="object"&&"message"in f&&f.message||typeof f=="string"&&f||`HTTP ${g.status}`;throw new Y(g.status,String(k),f)}return console.debug("API ->",t,`${Ge}${s}`,u),b?f:void 0}const z={get:(s,t)=>ke(s,"GET",void 0,t),post:(s,t,a)=>ke(s,"POST",t,a),put:(s,t,a)=>ke(s,"PUT",t,a),patch:(s,t,a)=>ke(s,"PATCH",t,a),delete:(s,t)=>ke(s,"DELETE",void 0,t)};function qa(s){return s&&(s.user||s.user_id)}function Ks(s){return qa(s)?.role==="admin"}function Ja(s){return(s?.org_role??"")==="admin"}const ue={isAuthenticated(){return!!localStorage.getItem("access_token")},async login(s,t){const a=await z.post("/api/v1/auth/login",{email:s,password:t});localStorage.setItem("access_token",a.access_token),localStorage.setItem("refresh_token",a.refresh_token)},async register(s,t,a){await z.post("/api/v1/auth/register",{name:s,email:t,password:a})},async me(){return await z.get("/api/v1/auth/me")},async logout(){const s=localStorage.getItem("refresh_token");if(s)try{await z.post("/api/v1/auth/logout",{refresh_token:s})}catch{}localStorage.removeItem("access_token"),localStorage.removeItem("refresh_token")},async forgot(s){await z.post("/api/v1/auth/password/forgot",{email:s})},async reset(s,t){await z.post("/api/v1/auth/password/reset",{token:s,new_password:t})},async verify(s){const t=await fetch(`${Ge}/api/v1/auth/verify?token=${encodeURIComponent(s)}`);if(!t.ok){const a=await t.text();throw new Error(a)}}};function Wa({...s}){return e.jsx(ht,{"data-slot":"collapsible",...s})}function Ya({...s}){return e.jsx(jt,{"data-slot":"collapsible-trigger",...s})}function Xa({...s}){return e.jsx(ft,{"data-slot":"collapsible-content",...s})}function Re({...s}){return e.jsx(gt,{"data-slot":"dropdown-menu",...s})}function Ve({...s}){return e.jsx(pt,{"data-slot":"dropdown-menu-trigger",...s})}function He({className:s,sideOffset:t=4,...a}){return e.jsx(vt,{children:e.jsx(bt,{"data-slot":"dropdown-menu-content",sideOffset:t,className:h("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",s),...a})})}function me({className:s,inset:t,variant:a="default",...n}){return e.jsx(wt,{"data-slot":"dropdown-menu-item","data-inset":t,"data-variant":a,className:h("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",s),...n})}function Qa(){const{setTheme:s,theme:t}=Es();return e.jsxs(Re,{children:[e.jsx(Ve,{asChild:!0,children:e.jsx(x,{variant:"outline",size:"icon","aria-label":"Toggle theme",children:t==="light"?e.jsx(qt,{className:"h-5 w-5"}):t==="dark"?e.jsx(Jt,{className:"h-5 w-5"}):e.jsx(Wt,{className:"h-5 w-5"})})}),e.jsxs(He,{align:"end",children:[e.jsxs(me,{onClick:()=>s("light"),children:[t==="light"&&e.jsx(Ee,{}),"Light"]}),e.jsxs(me,{onClick:()=>s("dark"),children:[t==="dark"&&e.jsx(Ee,{}),"Dark"]}),e.jsxs(me,{onClick:()=>s("system"),children:[t==="system"&&e.jsx(Ee,{}),"System"]})]})]})}const es="active_org_id",be="active-org-changed",Le="orgs-changed";function je(){return localStorage.getItem(es)}function Oe(s){s?localStorage.setItem(es,s):localStorage.removeItem(es),window.dispatchEvent(new CustomEvent(be,{detail:s}))}function ys(){window.dispatchEvent(new Event(Le))}const Za=()=>{const[s,t]=c.useState([]),[a,n]=c.useState(null);async function m(){try{const j=await z.get("/api/v1/orgs");t(j),!je()&&j.length>0&&(Oe(j[0].id),n(j[0].id))}catch(j){const b=j instanceof Y?j.message:"Failed to load organizations";console.error(b)}}c.useEffect(()=>{n(je()),m();const j=k=>{k.key==="active_org_id"&&n(k.newValue)};window.addEventListener("storage",j);const b=k=>n(k.detail??null),f=()=>void m();return window.addEventListener(be,b),window.addEventListener(Le,f),()=>{window.removeEventListener("storage",j),window.removeEventListener(be,b),window.removeEventListener(Le,f)}},[]);const u=j=>{Oe(j),n(j)},g=s.find(j=>j.id===a)?.name??"Select Org";return e.jsxs(Re,{children:[e.jsx(Ve,{asChild:!0,children:e.jsx(x,{variant:"outline",className:"w-full justify-start",children:g})}),e.jsx(He,{className:"w-48",children:s.length===0?e.jsx(me,{disabled:!0,children:"No organizations"}):s.map(j=>e.jsx(me,{onClick:()=>u(j.id),className:j.id===a?"font-semibold":void 0,children:j.name},j.id))})]})},er=[{label:"Dashboard",icon:Yt,to:"/dashboard"},{label:"Core",icon:ta,items:[{label:"Cluster",to:"/core/clusters",icon:Xt},{label:"Node Pools",icon:Qt,to:"/core/nodepools"},{label:"Annotations",icon:Zt,to:"/core/annotations"},{label:"Labels",icon:ea,to:"/core/labels"},{label:"Taints",icon:sa,to:"/core/taints"},{label:"Servers",icon:Fs,to:"/core/servers"}]},{label:"Security",icon:na,items:[{label:"Keys & Tokens",icon:aa,to:"/security/keys"},{label:"SSH Keys",to:"/security/ssh",icon:ra}]},{label:"Tasks",icon:ia,items:[]},{label:"Settings",icon:da,items:[{label:"Organizations",to:"/settings/orgs",icon:la},{label:"Members",to:"/settings/members",icon:vs},{label:"Profile",to:"/settings/me",icon:oa}]},{label:"Admin",icon:ca,requiresAdmin:!0,items:[{label:"Users",to:"/admin/users",icon:vs,requiresAdmin:!0}]}];function Gs(s,t,a){return s.filter(n=>!(n.requiresAdmin&&!t||n.requiresOrgAdmin&&!a)).map(n=>({...n,items:n.items?Gs(n.items,t,a):void 0})).filter(n=>!n.items||n.items.length>0)}const qs=({item:s})=>{const t=We(),a=s.icon;return s.to?e.jsxs(ve,{to:s.to,className:`hover:bg-accent hover:text-accent-foreground flex items-center space-x-2 rounded-md px-4 py-2 text-sm ${t.pathname===s.to?"bg-accent text-accent-foreground":""}`,children:[e.jsx(a,{className:"mr-4 h-4 w-4"}),s.label]}):s.items?e.jsx(Wa,{defaultOpen:!0,className:"group/collapsible",children:e.jsxs(Ma,{children:[e.jsx(Pa,{asChild:!0,children:e.jsxs(Ya,{children:[e.jsx(a,{className:"mr-4 h-4 w-4"}),s.label,e.jsx(as,{className:"ml-auto transition-transform group-data-[state=open]/collapsible:rotate-180"})]})}),e.jsx(Xa,{children:e.jsx(Fa,{children:e.jsx(Ra,{children:s.items.map((n,m)=>e.jsx(Va,{children:e.jsx(Ua,{asChild:!0,children:e.jsx(qs,{item:n})})},m))})})})]})}):null},sr=()=>{const[s,t]=c.useState(null),[a,n]=c.useState(!0);c.useEffect(()=>{let u=!0;return(async()=>{try{const g=await ue.me();if(!u)return;t(g)}catch{}finally{n(!1)}})(),()=>{u=!1}},[]);const m=c.useMemo(()=>{const u=Ks(s),g=Ja(s);return Gs(er,u,g)},[s]);return a?e.jsx("div",{className:"p-6",children:"Loading…"}):e.jsxs(Aa,{children:[e.jsx(Da,{className:"flex items-center justify-between p-4",children:e.jsx("h1",{className:"text-xl font-bold",children:"AutoGlue"})}),e.jsx($a,{children:m.map((u,g)=>e.jsx(qs,{item:u},g))}),e.jsxs(Ta,{className:"space-y-2 p-4",children:[e.jsx(Za,{}),e.jsx(Qa,{}),e.jsx(x,{onClick:()=>{localStorage.clear(),window.location.reload()},className:"w-full",children:"Logout"})]})]})};function tr(){return e.jsx("footer",{className:"border-t",children:e.jsxs("div",{className:"container flex flex-col items-center justify-between gap-4 py-10 md:h-24 md:flex-row md:py-0",children:[e.jsx("div",{className:"flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0",children:e.jsxs("p",{className:"text-muted-foreground text-center text-sm leading-loose md:text-left",children:["Built for"," ",e.jsx("a",{href:"https://www.glueops.dev/",target:"_blank",rel:"noreferrer",className:"font-medium underline underline-offset-4",children:"GlueOps"}),". The source code is available on"," ",e.jsx("a",{href:"https://github.com/GlueOps/autoglue",target:"_blank",rel:"noreferrer",className:"font-medium underline underline-offset-4",children:"GitHub"}),"."]})}),e.jsx("div",{className:"flex items-center space-x-4",children:e.jsx("a",{href:"https://github.com/GlueOps/autoglue",target:"_blank",rel:"noreferrer",children:e.jsx(ma,{className:"h-5 w-5"})})})]})})}function ar(){return e.jsx("div",{className:"flex h-screen",children:e.jsxs(La,{children:[e.jsx(sr,{}),e.jsxs("div",{className:"flex flex-1 flex-col",children:[e.jsx("main",{className:"flex-1 overflow-auto p-4",children:e.jsx(rs,{})}),e.jsx(tr,{})]})]})})}function rr({children:s}){const t=We();return ue.isAuthenticated()?s?e.jsx(e.Fragment,{children:s}):e.jsx(rs,{}):e.jsx(ns,{to:"/auth/login",state:{from:t},replace:!0})}function nr({children:s}){const[t,a]=c.useState(!0),[n,m]=c.useState(!1),u=We();return c.useEffect(()=>{let g=!0;return(async()=>{try{const j=await ue.me();if(!g)return;m(Ks(j))}catch{if(!g)return;m(!1)}finally{if(a(!1),!g)return}})(),()=>{g=!1}},[]),t?null:n?s?e.jsx(e.Fragment,{children:s}):e.jsx(rs,{}):e.jsx(ns,{to:"/403",replace:!0,state:{from:u}})}function cs({...s}){return e.jsx(yt,{"data-slot":"alert-dialog",...s})}function ms({...s}){return e.jsx(Nt,{"data-slot":"alert-dialog-trigger",...s})}function ir({...s}){return e.jsx(Et,{"data-slot":"alert-dialog-portal",...s})}function lr({className:s,...t}){return e.jsx(zt,{"data-slot":"alert-dialog-overlay",className:h("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",s),...t})}function us({className:s,...t}){return e.jsxs(ir,{children:[e.jsx(lr,{}),e.jsx(St,{"data-slot":"alert-dialog-content",className:h("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",s),...t})]})}function xs({className:s,...t}){return e.jsx("div",{"data-slot":"alert-dialog-header",className:h("flex flex-col gap-2 text-center sm:text-left",s),...t})}function hs({className:s,...t}){return e.jsx("div",{"data-slot":"alert-dialog-footer",className:h("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",s),...t})}function js({className:s,...t}){return e.jsx(Ct,{"data-slot":"alert-dialog-title",className:h("text-lg font-semibold",s),...t})}function fs({className:s,...t}){return e.jsx(kt,{"data-slot":"alert-dialog-description",className:h("text-muted-foreground text-sm",s),...t})}function gs({className:s,...t}){return e.jsx(It,{className:h(is(),s),...t})}function ps({className:s,...t}){return e.jsx(_t,{className:h(is({variant:"outline"}),s),...t})}function oe({className:s,...t}){return e.jsx("div",{"data-slot":"card",className:h("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",s),...t})}function de({className:s,...t}){return e.jsx("div",{"data-slot":"card-header",className:h("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",s),...t})}function he({className:s,...t}){return e.jsx("div",{"data-slot":"card-title",className:h("leading-none font-semibold",s),...t})}function ce({className:s,...t}){return e.jsx("div",{"data-slot":"card-content",className:h("px-6",s),...t})}function Ae({className:s,...t}){return e.jsx("div",{"data-slot":"card-footer",className:h("flex items-center px-6 [.border-t]:pt-6",s),...t})}function ae({...s}){return e.jsx(Os,{"data-slot":"dialog",...s})}function Ue({...s}){return e.jsx(Ot,{"data-slot":"dialog-trigger",...s})}function or({...s}){return e.jsx($s,{"data-slot":"dialog-portal",...s})}function dr({className:s,...t}){return e.jsx(Ms,{"data-slot":"dialog-overlay",className:h("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",s),...t})}function re({className:s,children:t,showCloseButton:a=!0,...n}){return e.jsxs(or,{"data-slot":"dialog-portal",children:[e.jsx(dr,{}),e.jsxs(Ls,{"data-slot":"dialog-content",className:h("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",s),...n,children:[t,a&&e.jsxs(As,{"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:[e.jsx(Ps,{}),e.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function ne({className:s,...t}){return e.jsx("div",{"data-slot":"dialog-header",className:h("flex flex-col gap-2 text-center sm:text-left",s),...t})}function ie({className:s,...t}){return e.jsx("div",{"data-slot":"dialog-footer",className:h("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",s),...t})}function le({className:s,...t}){return e.jsx(Ds,{"data-slot":"dialog-title",className:h("text-lg leading-none font-semibold",s),...t})}function qe({className:s,...t}){return e.jsx(Ts,{"data-slot":"dialog-description",className:h("text-muted-foreground text-sm",s),...t})}function cr({className:s,...t}){return e.jsx(Lt,{"data-slot":"label",className:h("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",s),...t})}const G=Zs,Js=c.createContext({}),w=({...s})=>e.jsx(Js.Provider,{value:{name:s.name},children:e.jsx(et,{...s})}),Xe=()=>{const s=c.useContext(Js),t=c.useContext(Ws),{getFieldState:a}=st(),n=tt({name:s.name}),m=a(s.name,n);if(!s)throw new Error("useFormField should be used within ");const{id:u}=t;return{id:u,name:s.name,formItemId:`${u}-form-item`,formDescriptionId:`${u}-form-item-description`,formMessageId:`${u}-form-item-message`,...m}},Ws=c.createContext({});function y({className:s,...t}){const a=c.useId();return e.jsx(Ws.Provider,{value:{id:a},children:e.jsx("div",{"data-slot":"form-item",className:h("grid gap-2",s),...t})})}function N({className:s,...t}){const{error:a,formItemId:n}=Xe();return e.jsx(cr,{"data-slot":"form-label","data-error":!!a,className:h("data-[error=true]:text-destructive",s),htmlFor:n,...t})}function C({...s}){const{error:t,formItemId:a,formDescriptionId:n,formMessageId:m}=Xe();return e.jsx(Me,{"data-slot":"form-control",id:a,"aria-describedby":t?`${n} ${m}`:`${n}`,"aria-invalid":!!t,...s})}function Ns({className:s,...t}){const{formDescriptionId:a}=Xe();return e.jsx("p",{"data-slot":"form-description",id:a,className:h("text-muted-foreground text-sm",s),...t})}function S({className:s,...t}){const{error:a,formMessageId:n}=Xe(),m=a?String(a?.message??""):t.children;return m?e.jsx("p",{"data-slot":"form-message",id:n,className:h("text-destructive text-sm",s),...t,children:m}):null}function Z({...s}){return e.jsx(At,{"data-slot":"select",...s})}function ee({...s}){return e.jsx($t,{"data-slot":"select-value",...s})}function se({className:s,size:t="default",children:a,...n}){return e.jsxs(Dt,{"data-slot":"select-trigger","data-size":t,className:h("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",s),...n,children:[a,e.jsx(Tt,{asChild:!0,children:e.jsx(as,{className:"size-4 opacity-50"})})]})}function te({className:s,children:t,position:a="popper",...n}){return e.jsx(Mt,{children:e.jsxs(Pt,{"data-slot":"select-content",className:h("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",a==="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",s),position:a,...n,children:[e.jsx(mr,{}),e.jsx(Ft,{className:h("p-1",a==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:t}),e.jsx(ur,{})]})})}function q({className:s,children:t,...a}){return e.jsxs(Rt,{"data-slot":"select-item",className:h("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",s),...a,children:[e.jsx("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:e.jsx(Vt,{children:e.jsx(Ee,{className:"size-4"})})}),e.jsx(Ht,{children:t})]})}function mr({className:s,...t}){return e.jsx(Ut,{"data-slot":"select-scroll-up-button",className:h("flex cursor-default items-center justify-center py-1",s),...t,children:e.jsx(ua,{className:"size-4"})})}function ur({className:s,...t}){return e.jsx(Bt,{"data-slot":"select-scroll-down-button",className:h("flex cursor-default items-center justify-center py-1",s),...t,children:e.jsx(as,{className:"size-4"})})}const xr=J({name:R().min(1,"Name required"),email:Se("Enter a valid email"),role:Ne(["user","admin"]),password:R().min(8,"Min 8 characters")}),hr=J({name:R().min(1,"Name required"),email:Se("Enter a valid email"),role:Ne(["user","admin"]),password:R().min(8,"Min 8 characters").optional().or(at(""))});function jr(){const[s,t]=c.useState([]),[a,n]=c.useState(!0),[m,u]=c.useState(!1),[g,j]=c.useState(!1),[b,f]=c.useState(null),[k,p]=c.useState(null),_=B({resolver:K(xr),mode:"onChange",defaultValues:{name:"",email:"",role:"user",password:""}}),I=B({resolver:K(hr),mode:"onChange",defaultValues:{name:"",email:"",role:"user",password:""}});async function $(){n(!0);try{const l=await z.get("/api/v1/admin/users?page=1&page_size=100");t(l.users??[])}catch(l){O.error(l instanceof Y?l.message:"Failed to load users")}finally{n(!1)}}c.useEffect(()=>{$()},[]);async function M(l){try{const v=await z.post("/api/v1/admin/users",l);t(A=>[v,...A]),u(!1),_.reset({name:"",email:"",role:"user",password:""}),O.success(`Created ${v.email}`)}catch(v){O.error(v instanceof Y?v.message:"Failed to create user")}}function F(l){f(l),I.reset({name:l.name||"",email:l.email,role:l.role??"user",password:""}),j(!0)}async function o(l){if(!b)return;const v={name:l.name,email:l.email,role:l.role};l.password&&l.password.length>=8&&(v.password=l.password);try{const A=await z.patch(`/api/v1/admin/users/${b.id}`,v);t(H=>H.map(V=>V.id===A.id?A:V)),j(!1),f(null),O.success(`Updated ${A.email}`)}catch(A){O.error(A instanceof Y?A.message:"Failed to update user")}}async function d(l){try{p(l),await z.delete(`/api/v1/admin/users/${l}`),t(v=>v.filter(A=>A.id!==l)),O.success("User deleted")}catch(v){O.error(v instanceof Y?v.message:"Failed to delete user")}finally{p(null)}}return e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Users"}),e.jsxs(x,{onClick:()=>u(!0),children:[e.jsx(Pe,{className:"mr-2 h-4 w-4"}),"New user"]})]}),e.jsx(ze,{}),a?e.jsx("div",{className:"text-muted-foreground text-sm",children:"Loading…"}):s.length===0?e.jsx("div",{className:"text-muted-foreground text-sm",children:"No users yet."}):e.jsx("div",{className:"grid grid-cols-1 gap-4 pr-2 md:grid-cols-2 lg:grid-cols-3",children:s.map(l=>e.jsxs(oe,{className:"flex flex-col",children:[e.jsx(de,{children:e.jsx(he,{className:"text-base",children:l.name||l.email})}),e.jsxs(ce,{className:"text-muted-foreground space-y-1 text-sm",children:[e.jsxs("div",{children:["Email: ",l.email]}),e.jsxs("div",{children:["Role: ",l.role]}),e.jsxs("div",{children:["Verified: ",l.email_verified?"Yes":"No"]}),e.jsxs("div",{children:["Joined: ",new Date(l.created_at).toLocaleString()]})]}),e.jsxs(Ae,{className:"mt-auto w-full flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs(x,{variant:"outline",onClick:()=>F(l),children:[e.jsx(Je,{className:"mr-2 h-4 w-4"})," Edit"]}),e.jsxs(cs,{children:[e.jsx(ms,{asChild:!0,children:e.jsxs(x,{variant:"destructive",disabled:k===l.id,children:[e.jsx(we,{className:"mr-2 h-4 w-4"}),k===l.id?"Deleting…":"Delete"]})}),e.jsxs(us,{children:[e.jsxs(xs,{children:[e.jsx(js,{children:"Delete user?"}),e.jsxs(fs,{children:["This will permanently delete ",e.jsx("b",{children:l.email}),"."]})]}),e.jsxs(hs,{className:"sm:justify-between",children:[e.jsx(ps,{disabled:k===l.id,children:"Cancel"}),e.jsx(gs,{asChild:!0,disabled:k===l.id,children:e.jsx(x,{variant:"destructive",onClick:()=>d(l.id),children:"Confirm delete"})})]})]})]})]})]},l.id))}),e.jsx(ae,{open:m,onOpenChange:u,children:e.jsxs(re,{className:"sm:max-w-[520px]",children:[e.jsxs(ne,{children:[e.jsx(le,{children:"Create user"}),e.jsx(qe,{children:"Add a new user account."})]}),e.jsx(G,{..._,children:e.jsxs("form",{onSubmit:_.handleSubmit(M),className:"grid gap-4 py-2",children:[e.jsx(w,{name:"name",control:_.control,render:({field:l})=>e.jsxs(y,{children:[e.jsx(N,{children:"Name"}),e.jsx(C,{children:e.jsx(L,{...l,placeholder:"Jane Doe"})}),e.jsx(S,{})]})}),e.jsx(w,{name:"email",control:_.control,render:({field:l})=>e.jsxs(y,{children:[e.jsx(N,{children:"Email"}),e.jsx(C,{children:e.jsx(L,{type:"email",...l,placeholder:"jane@example.com"})}),e.jsx(S,{})]})}),e.jsx(w,{name:"role",control:_.control,render:({field:l})=>e.jsxs(y,{children:[e.jsx(N,{children:"Role"}),e.jsxs(Z,{value:l.value,onValueChange:l.onChange,children:[e.jsx(C,{children:e.jsx(se,{className:"w-[200px]",children:e.jsx(ee,{placeholder:"Select role"})})}),e.jsxs(te,{children:[e.jsx(q,{value:"user",children:"User"}),e.jsx(q,{value:"admin",children:"Admin"})]})]}),e.jsx(S,{})]})}),e.jsx(w,{name:"password",control:_.control,render:({field:l})=>e.jsxs(y,{children:[e.jsx(N,{children:"Password"}),e.jsx(C,{children:e.jsx(L,{type:"password",...l,placeholder:"••••••••"})}),e.jsx(S,{})]})}),e.jsxs(ie,{className:"mt-2 flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(x,{type:"button",variant:"outline",onClick:()=>u(!1),children:"Cancel"}),e.jsx(x,{type:"submit",disabled:!_.formState.isValid||_.formState.isSubmitting,children:_.formState.isSubmitting?"Creating…":"Create"})]})]})})]})}),e.jsx(ae,{open:g,onOpenChange:j,children:e.jsxs(re,{className:"sm:max-w-[520px]",children:[e.jsxs(ne,{children:[e.jsx(le,{children:"Edit user"}),e.jsx(qe,{children:"Update user details. Leave password blank to keep it unchanged."})]}),e.jsx(G,{...I,children:e.jsxs("form",{onSubmit:I.handleSubmit(o),className:"grid gap-4 py-2",children:[e.jsx(w,{name:"name",control:I.control,render:({field:l})=>e.jsxs(y,{children:[e.jsx(N,{children:"Name"}),e.jsx(C,{children:e.jsx(L,{...l})}),e.jsx(S,{})]})}),e.jsx(w,{name:"email",control:I.control,render:({field:l})=>e.jsxs(y,{children:[e.jsx(N,{children:"Email"}),e.jsx(C,{children:e.jsx(L,{type:"email",...l})}),e.jsx(S,{})]})}),e.jsx(w,{name:"role",control:I.control,render:({field:l})=>e.jsxs(y,{children:[e.jsx(N,{children:"Role"}),e.jsxs(Z,{value:l.value,onValueChange:l.onChange,children:[e.jsx(C,{children:e.jsx(se,{className:"w-[200px]",children:e.jsx(ee,{placeholder:"Select role"})})}),e.jsxs(te,{children:[e.jsx(q,{value:"user",children:"User"}),e.jsx(q,{value:"admin",children:"Admin"})]})]}),e.jsx(S,{})]})}),e.jsx(w,{name:"password",control:I.control,render:({field:l})=>e.jsxs(y,{children:[e.jsx(N,{children:"New password (optional)"}),e.jsx(C,{children:e.jsx(L,{type:"password",...l,placeholder:"Leave blank to keep"})}),e.jsx(S,{})]})}),e.jsxs(ie,{className:"mt-2 flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(x,{type:"button",variant:"outline",onClick:()=>j(!1),children:"Cancel"}),e.jsx(x,{type:"submit",disabled:!I.formState.isValid||I.formState.isSubmitting,children:I.formState.isSubmitting?"Saving…":"Save changes"})]})]})})]})})]})}const fr=J({email:Se()});function gr(){const s=B({resolver:K(fr),defaultValues:{email:""}});async function t(a){try{await ue.forgot(a.email),O.success("If that email exists, we've sent instructions.")}catch(n){O.error(n.message||"Something went wrong")}}return e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(oe,{children:[e.jsx(de,{children:e.jsx(he,{children:"Forgot password"})}),e.jsx(ce,{children:e.jsx(G,{...s,children:e.jsxs("form",{onSubmit:s.handleSubmit(t),className:"space-y-4",children:[e.jsx(w,{name:"email",control:s.control,render:({field:a})=>e.jsxs(y,{children:[e.jsx(N,{children:"Email"}),e.jsx(C,{children:e.jsx(L,{placeholder:"you@example.com",...a})}),e.jsx(S,{})]})}),e.jsx(x,{type:"submit",className:"w-full",children:"Send reset link"})]})})})]})})}const pr=J({email:Se(),password:R().min(6)});function vr(){const s=Fe(),t=We(),a=B({resolver:K(pr),defaultValues:{email:"",password:""}});async function n(m){try{await ue.login(m.email,m.password),O.success("Welcome back!");const u=t.state?.from?.pathname??"/settings/me";s(u,{replace:!0})}catch(u){O.error(u.message||"Login failed")}}return e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(oe,{children:[e.jsx(de,{children:e.jsx(he,{children:"Sign in"})}),e.jsxs(ce,{children:[e.jsx(G,{...a,children:e.jsxs("form",{onSubmit:a.handleSubmit(n),className:"space-y-4",children:[e.jsx(w,{name:"email",control:a.control,render:({field:m})=>e.jsxs(y,{children:[e.jsx(N,{children:"Email"}),e.jsx(C,{children:e.jsx(L,{placeholder:"you@example.com",...m})}),e.jsx(S,{})]})}),e.jsx(w,{name:"password",control:a.control,render:({field:m})=>e.jsxs(y,{children:[e.jsx(N,{children:"Password"}),e.jsx(C,{children:e.jsx(L,{type:"password",placeholder:"••••••••",...m})}),e.jsx(S,{})]})}),e.jsx(x,{type:"submit",className:"w-full",children:"Sign in"})]})}),e.jsxs("div",{className:"mt-4 flex justify-between text-sm",children:[e.jsx(ve,{to:"/auth/forgot",className:"underline",children:"Forgot password?"}),e.jsx(ve,{to:"/auth/register",className:"underline",children:"Create an account"})]})]})]})})}function br(){const[s,t]=c.useState(null),a=Fe();c.useEffect(()=>{(async()=>{try{const m=await ue.me();t(m)}catch(m){O.error(m.message||"Failed to load profile")}})()},[]);async function n(){await ue.logout(),a("/auth/login")}return e.jsx("div",{className:"mx-auto max-w-xl",children:e.jsxs(oe,{children:[e.jsx(de,{children:e.jsx(he,{children:"My Account"})}),e.jsxs(ce,{className:"space-y-3",children:[s?e.jsx("pre",{className:"bg-muted overflow-auto rounded p-3 text-sm",children:JSON.stringify(s,null,2)}):e.jsx("p",{children:"Loading…"}),e.jsx(x,{onClick:n,children:"Sign out"})]})]})})}const wr=J({name:R().min(2),email:Se(),password:R().min(6)});function yr(){const s=Fe(),t=B({resolver:K(wr),defaultValues:{name:"",email:"",password:""}});async function a(n){try{await ue.register(n.name,n.email,n.password),O.success("Account created! Check your email to verify."),s("/auth/login")}catch(m){O.error(m.message||"Registration failed")}}return e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(oe,{children:[e.jsx(de,{children:e.jsx(he,{children:"Create account"})}),e.jsxs(ce,{children:[e.jsx(G,{...t,children:e.jsxs("form",{onSubmit:t.handleSubmit(a),className:"space-y-4",children:[e.jsx(w,{name:"name",control:t.control,render:({field:n})=>e.jsxs(y,{children:[e.jsx(N,{children:"Name"}),e.jsx(C,{children:e.jsx(L,{placeholder:"Jane Doe",...n})}),e.jsx(S,{})]})}),e.jsx(w,{name:"email",control:t.control,render:({field:n})=>e.jsxs(y,{children:[e.jsx(N,{children:"Email"}),e.jsx(C,{children:e.jsx(L,{placeholder:"you@example.com",...n})}),e.jsx(S,{})]})}),e.jsx(w,{name:"password",control:t.control,render:({field:n})=>e.jsxs(y,{children:[e.jsx(N,{children:"Password"}),e.jsx(C,{children:e.jsx(L,{type:"password",placeholder:"••••••••",...n})}),e.jsx(S,{})]})}),e.jsx(x,{type:"submit",className:"w-full",children:"Create account"})]})}),e.jsxs("div",{className:"mt-4 text-sm",children:["Already have an account?"," ",e.jsx(ve,{to:"/auth/login",className:"underline",children:"Sign in"})]})]})]})})}const Nr=J({new_password:R().min(6)});function Sr(){const[s]=Hs(),t=s.get("token"),a=B({resolver:K(Nr),defaultValues:{new_password:""}}),n=Fe();async function m(u){if(!t){O.error("Missing token");return}try{await ue.reset(t,u.new_password),O.success("Password updated. Please sign in."),n("/auth/login")}catch(g){O.error(g.message||"Reset failed")}}return e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(oe,{children:[e.jsx(de,{children:e.jsx(he,{children:"Reset password"})}),e.jsxs(ce,{children:[e.jsx(G,{...a,children:e.jsxs("form",{onSubmit:a.handleSubmit(m),className:"space-y-4",children:[e.jsx(w,{name:"new_password",control:a.control,render:({field:u})=>e.jsxs(y,{children:[e.jsx(N,{children:"New password"}),e.jsx(C,{children:e.jsx(L,{type:"password",placeholder:"••••••••",...u})}),e.jsx(S,{})]})}),e.jsx(x,{type:"submit",className:"w-full",children:"Update password"})]})}),e.jsx("div",{className:"mt-4 text-sm",children:e.jsx(ve,{to:"/auth/login",className:"underline",children:"Back to sign in"})})]})]})})}function Cr(){const[s]=Hs(),t=s.get("token"),[a,n]=c.useState("idle");return c.useEffect(()=>{async function m(){if(!t){n("error");return}try{await ue.verify(t),n("ok")}catch(u){O.error(u.message||"Verification failed"),n("error")}}m()},[t]),e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(oe,{children:[e.jsx(de,{children:e.jsx(he,{children:"Email verification"})}),e.jsxs(ce,{className:"space-y-3",children:[a==="idle"&&e.jsx("p",{children:"Verifying…"}),a==="ok"&&e.jsxs("div",{children:[e.jsx("p",{children:"Your email has been verified. You can now sign in."}),e.jsx(x,{asChild:!0,className:"mt-3",children:e.jsx(ve,{to:"/auth/login",children:"Go to sign in"})})]}),a==="error"&&e.jsxs("div",{children:[e.jsx("p",{children:"Verification failed. Please request a new verification email."}),e.jsx(x,{asChild:!0,className:"mt-3",children:e.jsx(ve,{to:"/auth/login",children:"Back to sign in"})})]})]})]})})}const kr=()=>e.jsx("div",{className:"space-y-4 p-6",children:e.jsx("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:e.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Annotations"})})}),_r=()=>e.jsx("div",{className:"space-y-4 p-6",children:e.jsx("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:e.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Clusters"})})});function De({className:s,...t}){return e.jsx("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:e.jsx("table",{"data-slot":"table",className:h("w-full caption-bottom text-sm",s),...t})})}function Te({className:s,...t}){return e.jsx("thead",{"data-slot":"table-header",className:h("[&_tr]:border-b",s),...t})}function $e({className:s,...t}){return e.jsx("tbody",{"data-slot":"table-body",className:h("[&_tr:last-child]:border-0",s),...t})}function W({className:s,...t}){return e.jsx("tr",{"data-slot":"table-row",className:h("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",s),...t})}function P({className:s,...t}){return e.jsx("th",{"data-slot":"table-head",className:h("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",s),...t})}function D({className:s,...t}){return e.jsx("td",{"data-slot":"table-cell",className:h("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",s),...t})}const Ir=J({key:R().min(2),value:R().min(2)}),Er=()=>{const[s,t]=c.useState([]),[a,n]=c.useState(!1),[m,u]=c.useState(null),[g,j]=c.useState(!1);async function b(){n(!0),u(null);try{const p=await z.get("/api/v1/labels");console.log(JSON.stringify(p)),t(p)}catch(p){console.error(p)}finally{n(!1)}}c.useEffect(()=>{b()},[]);const f=B({resolver:K(Ir),defaultValues:{key:"",value:""}}),k=async p=>{const _={key:p.key,value:p.value};await z.post("/api/v1/labels",_),j(!1),f.reset(),await b()};return a?e.jsx("div",{className:"p-6",children:"Loading servers…"}):m?e.jsx("div",{className:"p-6 text-red-500",children:m}):e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[e.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Labels"}),e.jsxs(ae,{open:g,onOpenChange:j,children:[e.jsx(Ue,{asChild:!0,children:e.jsxs(x,{onClick:()=>j(!0),children:[e.jsx(Pe,{className:"mr-2 h-4 w-4"}),"Create Label"]})}),e.jsxs(re,{className:"sm:max-w-lg",children:[e.jsx(ne,{children:e.jsx(le,{children:"Create Label"})}),e.jsx(G,{...f,children:e.jsxs("form",{onSubmit:f.handleSubmit(k),className:"space-y-4",children:[e.jsx(w,{control:f.control,name:"key",render:({field:p})=>e.jsxs(y,{children:[e.jsx(N,{children:"Key"}),e.jsx(C,{children:e.jsx(L,{placeholder:"app.kubernetes.io/managed-by",...p})}),e.jsx(S,{})]})}),e.jsx(w,{control:f.control,name:"value",render:({field:p})=>e.jsxs(y,{children:[e.jsx(N,{children:"Value"}),e.jsx(C,{children:e.jsx(L,{placeholder:"GlueOps",...p})}),e.jsx(S,{})]})}),e.jsxs(ie,{className:"gap-2",children:[e.jsx(x,{type:"button",variant:"outline",onClick:()=>j(!1),children:"Cancel"}),e.jsx(x,{type:"submit",disabled:f.formState.isSubmitting,children:f.formState.isSubmitting?"Creating…":"Create"})]})]})})]})]})]}),e.jsx("div",{className:"bg-background overflow-hidden rounded-2xl border shadow-sm",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs(De,{children:[e.jsx(Te,{children:e.jsxs(W,{children:[e.jsx(P,{children:"Key"}),e.jsx(P,{children:"Values"}),e.jsx(P,{className:"w-[180px] text-right",children:"Actions"})]})}),e.jsx($e,{children:s.map(p=>e.jsxs(W,{children:[e.jsx(D,{children:p.key}),e.jsx(D,{children:p.value}),e.jsx(D,{children:e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsxs(x,{variant:"outline",size:"sm",children:[e.jsx(Je,{className:"mr-2 h-4 w-4"}),"Edit"]}),e.jsxs(x,{variant:"destructive",size:"sm",children:[e.jsx(we,{className:"mr-2 h-4 w-4"}),"Delete"]})]})})]},p.id))})]})})})]})},zr=ss("inline-flex items-center justify-center rounded-md 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 Be({className:s,variant:t,asChild:a=!1,...n}){const m=a?Me:"span";return e.jsx(m,{"data-slot":"badge",className:h(zr({variant:t}),s),...n})}function Ss({className:s,...t}){return e.jsx(Kt,{"data-slot":"checkbox",className:h("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",s),...t,children:e.jsx(Gt,{"data-slot":"checkbox-indicator",className:"flex items-center justify-center text-current transition-none",children:e.jsx(Ee,{className:"size-3.5"})})})}const Or=J({name:R().trim().min(1,"Name is required").max(120,"Max 120 chars"),server_ids:zs(ts()).optional().default([])}),Lr=J({name:R().trim().min(1,"Name is required").max(120,"Max 120 chars")}),Ar=J({server_ids:zs(ts()).min(1,"Pick at least one server")});function Cs({status:s}){const t=s==="ready"?"default":s==="provisioning"?"secondary":s==="failed"?"destructive":"outline";return e.jsx(Be,{variant:t,className:"capitalize",children:s||"unknown"})}function Ke(s,t=12){return!s||s.length<=t*2+3?s:`${s.slice(0,t)}…${s.slice(-t)}`}function ks(s){const t=s.ip||s.ip_address,a=s.hostname||t||s.id,n=s.role?` · ${s.role}`:"";return`${a}${n}`}const Dr=()=>{const[s,t]=c.useState(!0),[a,n]=c.useState([]),[m,u]=c.useState([]),[g,j]=c.useState(null),[b,f]=c.useState(""),[k,p]=c.useState(!1),[_,I]=c.useState(null),[$,M]=c.useState(null);async function F(){t(!0),j(null);try{const[r,E]=await Promise.all([z.get("/api/v1/node-pools?include=servers"),z.get("/api/v1/servers")]);if(n(r||[]),u(E||[]),$){const X=(r||[]).find(ge=>ge.id===$.id)||null;M(X)}if(_){const X=(r||[]).find(ge=>ge.id===_.id)||null;I(X)}}catch(r){console.error(r);const E=r instanceof Y?r.message:"Failed to load node pools or servers";j(E)}finally{t(!1)}}c.useEffect(()=>{F()},[]);const o=c.useMemo(()=>{const r=b.trim().toLowerCase();return r?a.filter(E=>E.name.toLowerCase().includes(r)||(E.servers||[]).some(X=>(X.hostname||"").toLowerCase().includes(r)||(X.ip||X.ip_address||"").toLowerCase().includes(r)||(X.role||"").toLowerCase().includes(r))):a},[a,b]);async function d(r){confirm("Delete this node pool? This cannot be undone.")&&(await z.delete(`/api/v1/node-pools/${r}`),await F())}const l=B({resolver:K(Or),defaultValues:{name:"",server_ids:[]}}),v=async r=>{const E={name:r.name.trim()};r.server_ids&&r.server_ids.length>0&&(E.server_ids=r.server_ids),await z.post("/api/v1/node-pools",E),p(!1),l.reset({name:"",server_ids:[]}),await F()},A=B({resolver:K(Lr),defaultValues:{name:""}});function H(r){I(r),A.reset({name:r.name})}const V=async r=>{_&&(await z.patch(`/api/v1/node-pools/${_.id}`,{name:r.name.trim()}),I(null),await F())},Q=B({resolver:K(Ar),defaultValues:{server_ids:[]}});function U(r){M(r),Q.reset({server_ids:[]})}const ye=async r=>{$&&(await z.post(`/api/v1/node-pools/${$.id}/servers`,{server_ids:r.server_ids}),Q.reset({server_ids:[]}),await F())};async function xe(r){$&&confirm("Detach this server from the pool?")&&(await z.delete(`/api/v1/node-pools/${$.id}/servers/${r}`),await F())}const i=c.useMemo(()=>{if(!$)return[];const r=new Set(($.servers||[]).map(E=>E.id));return m.filter(E=>!r.has(E.id))},[$,m]);return s?e.jsx("div",{className:"p-6",children:"Loading node pools…"}):g?e.jsx("div",{className:"p-6 text-red-500",children:g}):e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[e.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Node Pools"}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("div",{className:"relative",children:[e.jsx(Rs,{className:"absolute top-2.5 left-2 h-4 w-4 opacity-60"}),e.jsx(L,{value:b,onChange:r=>f(r.target.value),placeholder:"Search pools or servers…",className:"w-72 pl-8"})]}),e.jsxs(x,{variant:"outline",onClick:F,children:[e.jsx(Vs,{className:"mr-2 h-4 w-4"})," Refresh"]}),e.jsxs(ae,{open:k,onOpenChange:p,children:[e.jsx(Ue,{asChild:!0,children:e.jsxs(x,{onClick:()=>p(!0),children:[e.jsx(Pe,{className:"mr-2 h-4 w-4"})," Create Pool"]})}),e.jsxs(re,{className:"sm:max-w-lg",children:[e.jsx(ne,{children:e.jsx(le,{children:"Create node pool"})}),e.jsx(G,{...l,children:e.jsxs("form",{onSubmit:l.handleSubmit(v),className:"space-y-4",children:[e.jsx(w,{control:l.control,name:"name",render:({field:r})=>e.jsxs(y,{children:[e.jsx(N,{children:"Name"}),e.jsx(C,{children:e.jsx(L,{placeholder:"pool-workers-a",...r})}),e.jsx(S,{})]})}),e.jsx(w,{control:l.control,name:"server_ids",render:({field:r})=>e.jsxs(y,{children:[e.jsx(N,{children:"Initial servers (optional)"}),e.jsxs("div",{className:"max-h-56 space-y-2 overflow-auto rounded-xl border p-2",children:[m.length===0&&e.jsx("div",{className:"text-muted-foreground p-2 text-sm",children:"No servers available"}),m.map(E=>{const X=r.value?.includes(E.id)||!1;return e.jsxs("label",{className:"hover:bg-accent flex cursor-pointer items-start gap-2 rounded p-1",children:[e.jsx(Ss,{checked:X,onCheckedChange:ge=>{const pe=new Set(r.value||[]);ge===!0?pe.add(E.id):pe.delete(E.id),r.onChange(Array.from(pe))}}),e.jsxs("div",{className:"leading-tight",children:[e.jsx("div",{className:"text-sm font-medium",children:ks(E)}),e.jsx("div",{className:"text-muted-foreground text-xs",children:Ke(E.id,8)})]})]},E.id)})]}),e.jsx(S,{})]})}),e.jsxs(ie,{className:"gap-2",children:[e.jsx(x,{type:"button",variant:"outline",onClick:()=>p(!1),children:"Cancel"}),e.jsx(x,{type:"submit",disabled:l.formState.isSubmitting,children:l.formState.isSubmitting?"Creating…":"Create"})]})]})})]})]})]})]}),e.jsx("div",{className:"bg-background overflow-hidden rounded-2xl border shadow-sm",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs(De,{children:[e.jsx(Te,{children:e.jsxs(W,{children:[e.jsx(P,{children:"Name"}),e.jsx(P,{children:"Servers"}),e.jsx(P,{children:"Annotations"}),e.jsx(P,{children:"Labels"}),e.jsx(P,{children:"Taints"}),e.jsx(P,{className:"w-[180px] text-right",children:"Actions"})]})}),e.jsxs($e,{children:[o.map(r=>e.jsxs(W,{children:[e.jsx(D,{className:"font-medium",children:r.name}),e.jsxs(D,{children:[e.jsxs("div",{className:"flex flex-wrap gap-2",children:[(r.servers||[]).slice(0,6).map(E=>e.jsxs(Be,{variant:"secondary",className:"gap-1",children:[e.jsx(Fs,{className:"h-3 w-3"})," ",E.hostname||E.ip||E.ip_address||Ke(E.id,6),E.status&&e.jsx("span",{className:"ml-1",children:e.jsx(Cs,{status:E.status})})]},E.id)),(r.servers||[]).length===0&&e.jsx("span",{className:"text-muted-foreground",children:"No servers"}),(r.servers||[]).length>6&&e.jsxs("span",{className:"text-muted-foreground",children:["+",(r.servers||[]).length-6," more"]})]}),e.jsxs(x,{variant:"outline",size:"sm",onClick:()=>U(r),children:[e.jsx(Ce,{className:"mr-2 h-4 w-4"})," Manage servers"]})]}),e.jsxs(D,{children:[e.jsx("div",{className:"flex flex-wrap gap-2",children:"Annotations"}),e.jsxs(x,{variant:"outline",size:"sm",children:[e.jsx(Ce,{className:"mr-2 h-4 w-4"})," Manage Annotations"]})]}),e.jsxs(D,{children:[e.jsx("div",{className:"flex flex-wrap gap-2",children:"Labels"}),e.jsxs(x,{variant:"outline",size:"sm",children:[e.jsx(Ce,{className:"mr-2 h-4 w-4"})," Manage Labels"]})]}),e.jsxs(D,{children:[e.jsx("div",{className:"flex flex-wrap gap-2",children:"Taints"}),e.jsxs(x,{variant:"outline",size:"sm",children:[e.jsx(Ce,{className:"mr-2 h-4 w-4"})," Manage Taints"]})]}),e.jsx(D,{children:e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsxs(x,{variant:"outline",size:"sm",onClick:()=>H(r),children:[e.jsx(Je,{className:"mr-2 h-4 w-4"})," Edit"]}),e.jsxs(Re,{children:[e.jsx(Ve,{asChild:!0,children:e.jsxs(x,{variant:"destructive",size:"sm",children:[e.jsx(we,{className:"mr-2 h-4 w-4"})," Delete"]})}),e.jsx(He,{align:"end",children:e.jsx(me,{onClick:()=>d(r.id),children:"Confirm delete"})})]})]})})]},r.id)),o.length===0&&e.jsx(W,{children:e.jsx(D,{colSpan:3,className:"text-muted-foreground py-10 text-center",children:"No node pools match your search."})})]})]})})}),e.jsx(ae,{open:!!_,onOpenChange:r=>!r&&I(null),children:e.jsxs(re,{className:"sm:max-w-md",children:[e.jsx(ne,{children:e.jsx(le,{children:"Edit node pool"})}),e.jsx(G,{...A,children:e.jsxs("form",{onSubmit:A.handleSubmit(V),className:"space-y-4",children:[e.jsx(w,{control:A.control,name:"name",render:({field:r})=>e.jsxs(y,{children:[e.jsx(N,{children:"Name"}),e.jsx(C,{children:e.jsx(L,{placeholder:"pool-workers-a",...r})}),e.jsx(S,{})]})}),e.jsxs(ie,{className:"gap-2",children:[e.jsx(x,{type:"button",variant:"outline",onClick:()=>I(null),children:"Cancel"}),e.jsx(x,{type:"submit",disabled:A.formState.isSubmitting,children:A.formState.isSubmitting?"Saving…":"Save changes"})]})]})})]})}),e.jsx(ae,{open:!!$,onOpenChange:r=>!r&&M(null),children:e.jsxs(re,{className:"sm:max-w-2xl",children:[e.jsx(ne,{children:e.jsxs(le,{children:["Manage servers for ",e.jsx("span",{className:"font-mono",children:$?.name})]})}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"text-sm font-medium",children:"Attached servers"}),e.jsx("div",{className:"overflow-hidden rounded-xl border",children:e.jsxs(De,{children:[e.jsx(Te,{children:e.jsxs(W,{children:[e.jsx(P,{children:"Server"}),e.jsx(P,{children:"IP"}),e.jsx(P,{children:"Role"}),e.jsx(P,{children:"Status"}),e.jsx(P,{className:"w-[120px] text-right",children:"Detach"})]})}),e.jsxs($e,{children:[($?.servers||[]).map(r=>e.jsxs(W,{children:[e.jsx(D,{className:"font-medium",children:r.hostname||Ke(r.id,8)}),e.jsx(D,{children:e.jsx("code",{className:"font-mono text-sm",children:r.ip||r.ip_address||"—"})}),e.jsx(D,{className:"capitalize",children:r.role||"—"}),e.jsx(D,{children:e.jsx(Cs,{status:r.status})}),e.jsx(D,{children:e.jsx("div",{className:"flex justify-end",children:e.jsxs(x,{variant:"destructive",size:"sm",onClick:()=>xe(r.id),children:[e.jsx(xa,{className:"mr-2 h-4 w-4"})," Detach"]})})})]},r.id)),($?.servers||[]).length===0&&e.jsx(W,{children:e.jsx(D,{colSpan:5,className:"text-muted-foreground py-8 text-center",children:"No servers attached yet."})})]})]})})]}),e.jsx("div",{className:"pt-4",children:e.jsx(G,{...Q,children:e.jsxs("form",{onSubmit:Q.handleSubmit(ye),className:"space-y-3",children:[e.jsx(w,{control:Q.control,name:"server_ids",render:({field:r})=>e.jsxs(y,{children:[e.jsx(N,{children:"Attach more servers"}),e.jsxs("div",{className:"grid max-h-64 grid-cols-1 gap-2 overflow-auto rounded-xl border p-2 md:grid-cols-2",children:[i.length===0&&e.jsx("div",{className:"text-muted-foreground p-2 text-sm",children:"No more servers available to attach"}),i.map(E=>{const X=r.value?.includes(E.id)||!1;return e.jsxs("label",{className:"hover:bg-accent flex cursor-pointer items-start gap-2 rounded p-1",children:[e.jsx(Ss,{checked:X,onCheckedChange:ge=>{const pe=new Set(r.value||[]);ge===!0?pe.add(E.id):pe.delete(E.id),r.onChange(Array.from(pe))}}),e.jsxs("div",{className:"leading-tight",children:[e.jsx("div",{className:"text-sm font-medium",children:ks(E)}),e.jsx("div",{className:"text-muted-foreground text-xs",children:Ke(E.id,8)})]})]},E.id)})]}),e.jsx(S,{})]})}),e.jsx(ie,{className:"gap-2",children:e.jsxs(x,{type:"submit",disabled:Q.formState.isSubmitting,children:[e.jsx(Ce,{className:"mr-2 h-4 w-4"})," ",Q.formState.isSubmitting?"Attaching…":"Attach selected"]})})]})})})]})})]})},_e=["pending","provisioning","ready","failed"],Ie=["master","worker","bastion"],Ys=J({hostname:R().trim().max(120,"Max 120 chars").optional(),ip_address:R().trim().min(1,"IP address is required"),role:Ne(Ie),ssh_key_id:ts("Pick a valid SSH key"),ssh_user:R().trim().min(1,"SSH user is required"),status:Ne(_e).default("pending")}),Tr=Ys.partial();function $r({status:s}){const t=s==="ready"?"default":s==="provisioning"?"secondary":s==="failed"?"destructive":"outline";return e.jsx(Be,{variant:t,className:"capitalize",children:s})}function Ze(s,t=16){return!s||s.length<=t*2+3?s:`${s.slice(0,t)}…${s.slice(-t)}`}const Mr=()=>{const[s,t]=c.useState([]),[a,n]=c.useState([]),[m,u]=c.useState(!1),[g,j]=c.useState(null),[b,f]=c.useState(""),[k,p]=c.useState(""),[_,I]=c.useState(""),[$,M]=c.useState(!1),[F,o]=c.useState(null);function d(){const i=new URLSearchParams;return k&&i.set("status",k),_&&i.set("role",_),`/api/v1/servers${i.toString()?`?${i.toString()}`:""}`}async function l(){u(!0),j(null);try{const[i,r]=await Promise.all([z.get(d()),z.get("/api/v1/ssh")]);t(i??[]),n(r??[])}catch(i){console.error(i),j("Failed to load servers or SSH keys")}finally{u(!1)}}c.useEffect(()=>{l();const i=r=>{r.key==="active_org_id"&&l()};return window.addEventListener("storage",i),()=>window.removeEventListener("storage",i)},[]),c.useEffect(()=>{l()},[k,_]);const v=c.useMemo(()=>{const i=new Map;return a.forEach(r=>i.set(r.id,r)),i},[a]),A=c.useMemo(()=>{const i=b.trim().toLowerCase();return i?s.filter(r=>(r.hostname??"").toLowerCase().includes(i)||r.ip_address.toLowerCase().includes(i)||r.role.toLowerCase().includes(i)||r.ssh_user.toLowerCase().includes(i)):s},[s,b]);async function H(i){confirm("Delete this server? This cannot be undone.")&&(await z.delete(`/api/v1/servers/${encodeURIComponent(i)}`),await l())}const V=B({resolver:K(Ys),defaultValues:{hostname:"",ip_address:"",role:"worker",ssh_key_id:"",ssh_user:"ubuntu",status:"pending"}}),Q=async i=>{const r={ip_address:i.ip_address.trim(),role:i.role,ssh_key_id:i.ssh_key_id,ssh_user:i.ssh_user.trim(),status:i.status};i.hostname&&i.hostname.trim()&&(r.hostname=i.hostname.trim()),await z.post("/api/v1/servers",r),M(!1),V.reset(),await l()},U=B({resolver:K(Tr),defaultValues:{}});function ye(i){o(i),U.reset({hostname:i.hostname??"",ip_address:i.ip_address,role:Ie.includes(i.role)?i.role:"worker",ssh_key_id:i.ssh_key_id,ssh_user:i.ssh_user,status:_e.includes(i.status)?i.status:"pending"})}const xe=async i=>{if(!F)return;const r={};i.hostname!==void 0&&(r.hostname=i.hostname?.trim()||""),i.ip_address!==void 0&&(r.ip_address=i.ip_address.trim()),i.role!==void 0&&(r.role=i.role),i.ssh_key_id!==void 0&&(r.ssh_key_id=i.ssh_key_id),i.ssh_user!==void 0&&(r.ssh_user=i.ssh_user.trim()),i.status!==void 0&&(r.status=i.status),await z.patch(`/api/v1/servers/${encodeURIComponent(F.id)}`,r),o(null),await l()};return m?e.jsx("div",{className:"p-6",children:"Loading servers…"}):g?e.jsx("div",{className:"p-6 text-red-500",children:g}):e.jsxs(Ye,{children:[e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[e.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Servers"}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("div",{className:"relative",children:[e.jsx(Rs,{className:"absolute top-2.5 left-2 h-4 w-4 opacity-60"}),e.jsx(L,{value:b,onChange:i=>f(i.target.value),placeholder:"Search hostname, IP, role, user…",className:"w-64 pl-8"})]}),e.jsxs(Z,{value:_,onValueChange:i=>I(i),children:[e.jsx(se,{className:"w-36",children:e.jsx(ee,{placeholder:"Role (all)"})}),e.jsx(te,{children:Ie.map(i=>e.jsx(q,{value:i,children:i},i))})]}),e.jsxs(Z,{value:k,onValueChange:i=>p(i),children:[e.jsx(se,{className:"w-40",children:e.jsx(ee,{placeholder:"Status (all)"})}),e.jsx(te,{children:_e.map(i=>e.jsx(q,{value:i,children:i},i))})]}),e.jsxs(x,{variant:"outline",onClick:l,children:[e.jsx(Vs,{className:"mr-2 h-4 w-4"}),"Refresh"]}),e.jsxs(ae,{open:$,onOpenChange:M,children:[e.jsx(Ue,{asChild:!0,children:e.jsxs(x,{onClick:()=>M(!0),children:[e.jsx(Pe,{className:"mr-2 h-4 w-4"}),"Create Server"]})}),e.jsxs(re,{className:"sm:max-w-lg",children:[e.jsx(ne,{children:e.jsx(le,{children:"Create server"})}),e.jsx(G,{...V,children:e.jsxs("form",{onSubmit:V.handleSubmit(Q),className:"space-y-4",children:[e.jsx(w,{control:V.control,name:"hostname",render:({field:i})=>e.jsxs(y,{children:[e.jsx(N,{children:"Hostname"}),e.jsx(C,{children:e.jsx(L,{placeholder:"worker-01",...i})}),e.jsx(S,{})]})}),e.jsx(w,{control:V.control,name:"ip_address",render:({field:i})=>e.jsxs(y,{children:[e.jsx(N,{children:"IP address"}),e.jsx(C,{children:e.jsx(L,{placeholder:"10.0.1.23",...i})}),e.jsx(S,{})]})}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[e.jsx(w,{control:V.control,name:"role",render:({field:i})=>e.jsxs(y,{children:[e.jsx(N,{children:"Role"}),e.jsxs(Z,{onValueChange:i.onChange,value:i.value,children:[e.jsx(C,{children:e.jsx(se,{children:e.jsx(ee,{placeholder:"Select role"})})}),e.jsx(te,{children:Ie.map(r=>e.jsx(q,{value:r,children:r},r))})]}),e.jsx(S,{})]})}),e.jsx(w,{control:V.control,name:"ssh_user",render:({field:i})=>e.jsxs(y,{children:[e.jsx(N,{children:"SSH user"}),e.jsx(C,{children:e.jsx(L,{placeholder:"ubuntu",...i})}),e.jsx(S,{})]})})]}),e.jsx(w,{control:V.control,name:"ssh_key_id",render:({field:i})=>e.jsxs(y,{children:[e.jsx(N,{children:"SSH key"}),e.jsxs(Z,{onValueChange:i.onChange,value:i.value,children:[e.jsx(C,{children:e.jsx(se,{children:e.jsx(ee,{placeholder:a.length?"Select SSH key":"No SSH keys found"})})}),e.jsx(te,{children:a.map(r=>e.jsxs(q,{value:r.id,children:[r.name?r.name:"Unnamed key"," —"," ",Ze(r.fingerprint,8)]},r.id))})]}),e.jsx(S,{})]})}),e.jsx(w,{control:V.control,name:"status",render:({field:i})=>e.jsxs(y,{children:[e.jsx(N,{children:"Initial status"}),e.jsxs(Z,{onValueChange:i.onChange,value:i.value,children:[e.jsx(C,{children:e.jsx(se,{children:e.jsx(ee,{placeholder:"pending"})})}),e.jsx(te,{children:_e.map(r=>e.jsx(q,{value:r,children:r},r))})]}),e.jsx(S,{})]})}),e.jsxs(ie,{className:"gap-2",children:[e.jsx(x,{type:"button",variant:"outline",onClick:()=>M(!1),children:"Cancel"}),e.jsx(x,{type:"submit",disabled:V.formState.isSubmitting,children:V.formState.isSubmitting?"Creating…":"Create"})]})]})})]})]})]})]}),e.jsx("div",{className:"bg-background overflow-hidden rounded-2xl border shadow-sm",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs(De,{children:[e.jsx(Te,{children:e.jsxs(W,{children:[e.jsx(P,{children:"Hostname"}),e.jsx(P,{children:"IP address"}),e.jsx(P,{children:"Role"}),e.jsx(P,{children:"SSH user"}),e.jsx(P,{children:"SSH key"}),e.jsx(P,{children:"Status"}),e.jsx(P,{children:"Created"}),e.jsx(P,{className:"w-[180px] text-right",children:"Actions"})]})}),e.jsxs($e,{children:[A.map(i=>{const r=v.get(i.ssh_key_id);return e.jsxs(W,{children:[e.jsx(D,{className:"font-medium",children:i.hostname||"—"}),e.jsx(D,{children:e.jsx("code",{className:"font-mono text-sm",children:i.ip_address})}),e.jsx(D,{className:"capitalize",children:i.role}),e.jsx(D,{children:e.jsx("code",{className:"font-mono text-sm",children:i.ssh_user})}),e.jsx(D,{children:r?e.jsxs(ls,{children:[e.jsx(os,{asChild:!0,children:e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx(Be,{variant:"secondary",children:r.name||"SSH key"}),e.jsx("code",{className:"font-mono text-xs",children:Ze(r.fingerprint,8)})]})}),e.jsx(ds,{className:"max-w-[70vw]",children:e.jsx("p",{className:"font-mono text-xs break-all",children:r.public_keys})})]}):e.jsx("span",{className:"text-muted-foreground",children:"Unknown"})}),e.jsx(D,{children:e.jsx($r,{status:i.status})}),e.jsx(D,{children:new Date(i.created_at).toLocaleString()}),e.jsx(D,{children:e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsxs(x,{variant:"outline",size:"sm",onClick:()=>ye(i),children:[e.jsx(Je,{className:"mr-2 h-4 w-4"})," Edit"]}),e.jsxs(Re,{children:[e.jsx(Ve,{asChild:!0,children:e.jsxs(x,{variant:"destructive",size:"sm",children:[e.jsx(we,{className:"mr-2 h-4 w-4"})," Delete"]})}),e.jsx(He,{align:"end",children:e.jsx(me,{onClick:()=>H(i.id),children:"Confirm delete"})})]})]})})]},i.id)}),A.length===0&&e.jsx(W,{children:e.jsx(D,{colSpan:8,className:"text-muted-foreground py-10 text-center",children:"No servers match your filters."})})]})]})})})]}),e.jsx(ae,{open:!!F,onOpenChange:i=>!i&&o(null),children:e.jsxs(re,{className:"sm:max-w-lg",children:[e.jsx(ne,{children:e.jsx(le,{children:"Edit server"})}),e.jsx(G,{...U,children:e.jsxs("form",{onSubmit:U.handleSubmit(xe),className:"space-y-4",children:[e.jsx(w,{control:U.control,name:"hostname",render:({field:i})=>e.jsxs(y,{children:[e.jsx(N,{children:"Hostname"}),e.jsx(C,{children:e.jsx(L,{placeholder:"worker-01",...i})}),e.jsx(S,{})]})}),e.jsx(w,{control:U.control,name:"ip_address",render:({field:i})=>e.jsxs(y,{children:[e.jsx(N,{children:"IP address"}),e.jsx(C,{children:e.jsx(L,{placeholder:"10.0.1.23",...i})}),e.jsx(S,{})]})}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[e.jsx(w,{control:U.control,name:"role",render:({field:i})=>e.jsxs(y,{children:[e.jsx(N,{children:"Role"}),e.jsxs(Z,{onValueChange:i.onChange,value:i.value,children:[e.jsx(C,{children:e.jsx(se,{children:e.jsx(ee,{placeholder:"Select role"})})}),e.jsx(te,{children:Ie.map(r=>e.jsx(q,{value:r,children:r},r))})]}),e.jsx(S,{})]})}),e.jsx(w,{control:U.control,name:"ssh_user",render:({field:i})=>e.jsxs(y,{children:[e.jsx(N,{children:"SSH user"}),e.jsx(C,{children:e.jsx(L,{placeholder:"ubuntu",...i})}),e.jsx(S,{})]})})]}),e.jsx(w,{control:U.control,name:"ssh_key_id",render:({field:i})=>e.jsxs(y,{children:[e.jsx(N,{children:"SSH key"}),e.jsxs(Z,{onValueChange:i.onChange,value:i.value,children:[e.jsx(C,{children:e.jsx(se,{children:e.jsx(ee,{placeholder:a.length?"Select SSH key":"No SSH keys found"})})}),e.jsx(te,{children:a.map(r=>e.jsxs(q,{value:r.id,children:[r.name?r.name:"SSH key"," — ",Ze(r.fingerprint,8)]},r.id))})]}),e.jsx(S,{})]})}),e.jsx(w,{control:U.control,name:"status",render:({field:i})=>e.jsxs(y,{children:[e.jsx(N,{children:"Status"}),e.jsxs(Z,{onValueChange:i.onChange,value:i.value,children:[e.jsx(C,{children:e.jsx(se,{children:e.jsx(ee,{placeholder:"pending"})})}),e.jsx(te,{children:_e.map(r=>e.jsx(q,{value:r,children:r},r))})]}),e.jsx(S,{})]})}),e.jsxs(ie,{className:"gap-2",children:[e.jsx(x,{type:"button",variant:"outline",onClick:()=>o(null),children:"Cancel"}),e.jsx(x,{type:"submit",disabled:U.formState.isSubmitting,children:U.formState.isSubmitting?"Saving…":"Save changes"})]})]})})]})})]})},Pr=()=>e.jsx("div",{className:"space-y-4 p-6",children:e.jsx("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:e.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Taints"})})});function _s(){return e.jsxs("div",{className:"p-6",children:[e.jsx("h1",{className:"text-2xl font-bold",children:"403 — Forbidden"}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"You don’t have access to this area."})]})}const Is=()=>{const s=Fe();return e.jsxs("div",{className:"bg-background text-foreground flex min-h-screen flex-col items-center justify-center",children:[e.jsx("h1",{className:"mb-4 text-6xl font-bold",children:"404"}),e.jsx("p",{className:"mb-8 text-2xl",children:"Oops! Page not found"}),e.jsx(x,{onClick:()=>s("/dashboard"),children:"Go back to Dashboard"})]})},Fr=J({name:R().min(1,"Name is required").max(100,"Max 100 characters"),comment:R().trim().max(100,"Max 100 characters").default(""),bits:Ne(["2048","3072","4096"])});function Rr(s,t="download.bin"){if(!s)return t;const a=/filename\*=UTF-8''([^;]+)/i.exec(s);return a?.[1]?decodeURIComponent(a[1]):/filename="?([^"]+)"?/i.exec(s)?.[1]??t}function Vr(s,t=24){return!s||s.length<=t*2+3?s:`${s.slice(0,t)}…${s.slice(-t)}`}function Hr(s){return s?.split(/\s+/)?.[0]??"ssh-key"}async function Ur(s){try{await navigator.clipboard.writeText(s)}catch{const t=document.createElement("textarea");t.value=s,t.setAttribute("readonly",""),t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}}const Br=()=>{const[s,t]=c.useState([]),[a,n]=c.useState(null),[m,u]=c.useState(!0),[g,j]=c.useState(""),[b,f]=c.useState(!1),k=c.useMemo(()=>!!localStorage.getItem("active_org_id"),[]);async function p(){u(!0),n(null);try{if(!k){t([]),n("Select an organization first.");return}const o=await z.get("/api/v1/ssh");t(o??[])}catch(o){console.error(o),n("Failed to fetch SSH keys")}finally{u(!1)}}c.useEffect(()=>{p();const o=d=>{d.key==="active_org_id"&&p()};return window.addEventListener("storage",o),()=>window.removeEventListener("storage",o)},[]);const _=s.filter(o=>`${o.name} ${o.public_keys} ${o.fingerprint}`.toLowerCase().includes(g.toLowerCase()));async function I(o,d="both"){const l=localStorage.getItem("access_token"),v=localStorage.getItem("active_org_id"),A=`${Ge}/api/v1/ssh/${encodeURIComponent(o)}/download?part=${encodeURIComponent(d)}`;try{const H=await fetch(A,{method:"GET",headers:{...l?{Authorization:`Bearer ${l}`}:{},...v?{"X-Org-ID":v}:{}}});if(!H.ok){const i=await H.text().catch(()=>"");throw new Error(i||`HTTP ${H.status}`)}const V=await H.blob(),Q=d==="both"?`ssh_key_${o}.zip`:d==="public"?`id_rsa_${o}.pub`:`id_rsa_${o}.pem`,U=Rr(H.headers.get("content-disposition")??void 0,Q),ye=URL.createObjectURL(V),xe=document.createElement("a");xe.href=ye,xe.download=U,document.body.appendChild(xe),xe.click(),xe.remove(),URL.revokeObjectURL(ye)}catch(H){console.error(H),alert(H instanceof Error?H.message:"Download failed")}}async function $(o){try{await z.delete(`/api/v1/ssh/${encodeURIComponent(o)}`),await p()}catch(d){console.error(d),alert("Failed to delete key")}}const M=B({resolver:K(Fr),defaultValues:{name:"",comment:"deploy@autoglue",bits:"4096"}});async function F(o){try{await z.post("/api/v1/ssh",{bits:Number(o.bits),comment:o.comment?.trim()??"",name:o.name.trim(),download:"none"}),f(!1),M.reset(),await p()}catch(d){console.error(d),alert("Failed to create key")}}return m?e.jsx("div",{className:"p-6",children:"Loading SSH Keys…"}):a?e.jsx("div",{className:"p-6 text-red-500",children:a}):e.jsx(Ye,{children:e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("h1",{className:"text-2xl font-bold",children:"SSH Keys"}),e.jsx("div",{className:"w-full max-w-sm",children:e.jsx(L,{value:g,onChange:o=>j(o.target.value),placeholder:"Search by name, fingerprint or key"})}),e.jsxs(ae,{open:b,onOpenChange:f,children:[e.jsx(Ue,{asChild:!0,children:e.jsxs(x,{onClick:()=>f(!0),children:[e.jsx(Pe,{className:"mr-2 h-4 w-4"}),"Create New Keypair"]})}),e.jsxs(re,{className:"sm:max-w-lg",children:[e.jsx(ne,{children:e.jsx(le,{children:"Create SSH Keypair"})}),e.jsx(G,{...M,children:e.jsxs("form",{onSubmit:M.handleSubmit(F),className:"space-y-4",children:[e.jsx(w,{control:M.control,name:"name",render:({field:o})=>e.jsxs(y,{children:[e.jsx(N,{children:"Name"}),e.jsx(C,{children:e.jsx(L,{placeholder:"e.g., CI deploy key",...o})}),e.jsx(S,{})]})}),e.jsx(w,{control:M.control,name:"comment",render:({field:o})=>e.jsxs(y,{children:[e.jsx(N,{children:"Comment"}),e.jsx(C,{children:e.jsx(L,{placeholder:"e.g., deploy@autoglue",...o})}),e.jsx(S,{})]})}),e.jsx(w,{control:M.control,name:"bits",render:({field:o})=>e.jsxs(y,{children:[e.jsx(N,{children:"Key size"}),e.jsx(C,{children:e.jsxs("select",{className:"bg-background w-full rounded-md border px-3 py-2 text-sm",value:o.value,onChange:o.onChange,children:[e.jsx("option",{value:"2048",children:"2048"}),e.jsx("option",{value:"3072",children:"3072"}),e.jsx("option",{value:"4096",children:"4096"})]})}),e.jsx(S,{})]})}),e.jsxs(ie,{className:"gap-2",children:[e.jsx(x,{type:"button",variant:"outline",onClick:()=>f(!1),children:"Cancel"}),e.jsx(x,{type:"submit",disabled:M.formState.isSubmitting,children:M.formState.isSubmitting?"Creating…":"Create"})]})]})})]})]})]}),e.jsx("div",{className:"bg-background overflow-hidden rounded-2xl border shadow-sm",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs(De,{children:[e.jsx(Te,{children:e.jsxs(W,{children:[e.jsx(P,{children:"Name"}),e.jsx(P,{className:"min-w-[360px]",children:"Public Key"}),e.jsx(P,{children:"Fingerprint"}),e.jsx(P,{children:"Created"}),e.jsx(P,{className:"w-[160px] text-right",children:"Actions"})]})}),e.jsx($e,{children:_.map(o=>{const d=Hr(o.public_keys),l=Vr(o.public_keys,18);return e.jsxs(W,{children:[e.jsx(D,{className:"align-top",children:o.name}),e.jsx(D,{className:"align-top",children:e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(Be,{variant:"secondary",className:"whitespace-nowrap",children:d}),e.jsxs(ls,{children:[e.jsx(os,{asChild:!0,children:e.jsx("code",{className:"font-mono text-sm break-all md:max-w-[48ch] md:truncate md:break-normal",children:l})}),e.jsx(ds,{className:"max-w-[70vw]",children:e.jsx("div",{className:"max-w-full",children:e.jsx("p",{className:"font-mono text-xs break-all",children:o.public_keys})})})]})]})}),e.jsx(D,{className:"align-top",children:e.jsx("code",{className:"font-mono text-sm",children:o.fingerprint})}),e.jsx(D,{className:"align-top",children:new Date(o.created_at).toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"})}),e.jsx(D,{className:"align-top",children:e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsxs(x,{variant:"outline",size:"sm",onClick:()=>Ur(o.public_keys),title:"Copy public key",children:[e.jsx(ha,{className:"mr-2 h-4 w-4"}),"Copy"]}),e.jsxs(Re,{children:[e.jsx(Ve,{asChild:!0,children:e.jsxs(x,{variant:"outline",size:"sm",children:[e.jsx(ja,{className:"mr-2 h-4 w-4"}),"Download"]})}),e.jsxs(He,{align:"end",children:[e.jsx(me,{onClick:()=>I(o.id,"both"),children:"Public + Private (.zip)"}),e.jsx(me,{onClick:()=>I(o.id,"public"),children:"Public only (.pub)"}),e.jsx(me,{onClick:()=>I(o.id,"private"),children:"Private only (.pem)"})]})]}),e.jsxs(x,{variant:"destructive",size:"sm",onClick:()=>$(o.id),children:[e.jsx(we,{className:"mr-2 h-4 w-4"}),"Delete"]})]})})]},o.id)})})]})})})]})})};function Kr(s){const t=s?.user_id??s?.UserID??s?.user?.id??s?.User?.ID??"",a=s?.email??s?.Email??s?.user?.email??s?.User?.Email,n=s?.name??s?.Name??s?.user?.name??s?.User?.Name,m=s?.role??s?.Role??"member",u=s?.created_at??s?.CreatedAt;return{userId:String(t),email:a,name:n,role:String(m),joinedAt:u}}const Gr=J({email:Se("Enter a valid email"),role:Ne(["member","admin"])}),qr=()=>{const[s,t]=c.useState(!0),[a,n]=c.useState([]),[m,u]=c.useState(null),[g,j]=c.useState(!1),[b,f]=c.useState(!1),[k,p]=c.useState(null),_=c.useMemo(()=>je(),[]),I=B({resolver:K(Gr),defaultValues:{email:"",role:"member"},mode:"onChange"});async function $(){try{const d=await z.get("/api/v1/auth/me");u(d)}catch{}}async function M(d){if(!d){n([]),t(!1);return}t(!0);try{const l=await z.get("/api/v1/orgs/members");n((l??[]).map(Kr))}catch(l){const v=l instanceof Y?l.message:"Failed to load members";O.error(v)}finally{t(!1)}}c.useEffect(()=>{$(),M(_)},[_]),c.useEffect(()=>{const d=()=>void M(je()),l=v=>{v.key==="active_org_id"&&d()};return window.addEventListener(be,d),window.addEventListener("storage",l),()=>{window.removeEventListener(be,d),window.removeEventListener("storage",l)}},[]);async function F(d){const l=je();if(!l){O.error("Select an organization first");return}try{f(!0),await z.post("/api/v1/orgs/invite",d),O.success(`Invited ${d.email}`),j(!1),I.reset({email:"",role:"member"}),M(l)}catch(v){const A=v instanceof Y?v.message:"Failed to invite member";O.error(A)}finally{f(!1)}}async function o(d){const l=je();if(!l){O.error("Select an organization first");return}try{p(d),await z.delete(`/api/v1/orgs/members/${d}`,{headers:{"X-Org-ID":l}}),n(v=>v.filter(A=>A.userId!==d)),O.success("Member removed")}catch(v){const A=v instanceof Y?v.message:"Failed to remove member";O.error(A)}finally{p(null)}}return s?e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Members"}),e.jsxs(x,{disabled:!0,children:[e.jsx(bs,{className:"mr-2 h-4 w-4"}),"Invite"]})]}),e.jsx(ze,{}),e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[...Array(6)].map((d,l)=>e.jsxs(oe,{children:[e.jsx(de,{children:e.jsx(fe,{className:"h-5 w-40"})}),e.jsxs(ce,{className:"space-y-2",children:[e.jsx(fe,{className:"h-4 w-56"}),e.jsx(fe,{className:"h-4 w-40"})]}),e.jsx(Ae,{children:e.jsx(fe,{className:"h-9 w-24"})})]},l))})]}):je()?e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Members"}),e.jsxs(ae,{open:g,onOpenChange:j,children:[e.jsx(Ue,{asChild:!0,children:e.jsxs(x,{children:[e.jsx(bs,{className:"mr-2 h-4 w-4"}),"Invite"]})}),e.jsxs(re,{className:"sm:max-w-[520px]",children:[e.jsxs(ne,{children:[e.jsx(le,{children:"Invite member"}),e.jsx(qe,{children:"Send an invite to join this organization."})]}),e.jsx(G,{...I,children:e.jsxs("form",{onSubmit:I.handleSubmit(F),className:"grid gap-4 py-2",children:[e.jsx(w,{control:I.control,name:"email",render:({field:d})=>e.jsxs(y,{children:[e.jsx(N,{children:"Email"}),e.jsx(C,{children:e.jsx(L,{type:"email",placeholder:"jane@example.com",...d})}),e.jsx(S,{})]})}),e.jsx(w,{control:I.control,name:"role",render:({field:d})=>e.jsxs(y,{children:[e.jsx(N,{children:"Role"}),e.jsxs(Z,{onValueChange:d.onChange,defaultValue:d.value,children:[e.jsx(C,{children:e.jsx(se,{className:"w-[200px]",children:e.jsx(ee,{placeholder:"Select role"})})}),e.jsxs(te,{children:[e.jsx(q,{value:"member",children:"Member"}),e.jsx(q,{value:"admin",children:"Admin"})]})]}),e.jsx(S,{})]})}),e.jsxs(ie,{className:"mt-2 flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(x,{type:"button",variant:"outline",onClick:()=>j(!1),children:"Cancel"}),e.jsx(x,{type:"submit",disabled:!I.formState.isValid||b,children:b?"Sending…":"Send invite"})]})]})})]})]})]}),e.jsx(ze,{}),a.length===0?e.jsx("div",{className:"text-muted-foreground text-sm",children:"No members yet."}):e.jsx("div",{className:"grid grid-cols-1 gap-4 pr-2 sm:grid-cols-2 lg:grid-cols-3",children:a.map(d=>{const l=m?.id&&d.userId===m.id;return e.jsxs(oe,{className:"flex flex-col",children:[e.jsx(de,{children:e.jsx(he,{className:"text-base",children:d.name||d.email||d.userId})}),e.jsxs(ce,{className:"text-muted-foreground space-y-1 text-sm",children:[d.email&&e.jsxs("div",{children:["Email: ",d.email]}),e.jsxs("div",{children:["Role: ",d.role]}),d.joinedAt&&e.jsxs("div",{children:["Joined: ",new Date(d.joinedAt).toLocaleString()]})]}),e.jsxs(Ae,{className:"mt-auto w-full flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx("div",{}),e.jsxs(cs,{children:[e.jsx(ms,{asChild:!0,children:e.jsxs(x,{variant:"destructive",disabled:l||k===d.userId,className:"ml-auto",children:[e.jsx(we,{className:"mr-2 h-5 w-5"}),k===d.userId?"Removing…":"Remove"]})}),e.jsxs(us,{children:[e.jsxs(xs,{children:[e.jsx(js,{children:"Remove member?"}),e.jsxs(fs,{children:["This will remove ",e.jsx("b",{children:d.name||d.email||d.userId})," from the organization."]})]}),e.jsxs(hs,{className:"sm:justify-between",children:[e.jsx(ps,{disabled:k===d.userId,children:"Cancel"}),e.jsx(gs,{asChild:!0,disabled:k===d.userId,children:e.jsx(x,{variant:"destructive",onClick:()=>o(d.userId),children:"Confirm remove"})})]})]})]})]})]},d.userId)})})]}):e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx("h1",{className:"text-2xl font-bold",children:"Members"})}),e.jsx(ze,{}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"No organization selected. Choose an organization to manage its members."})]})},Jr=J({name:R().min(2).max(100),slug:R().min(2).max(50).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/,"Use lowercase letters, numbers, and hyphens.")}),Wr=()=>{const[s,t]=c.useState([]),[a,n]=c.useState(!0),[m,u]=c.useState(!1),[g,j]=c.useState(null),[b,f]=c.useState(null),k=c.useRef(!1),p=B({resolver:K(Jr),mode:"onChange",defaultValues:{name:"",slug:""}}),_=p.watch("name");c.useEffect(()=>{k.current||p.setValue("slug",ws(_||""),{shouldValidate:!0})},[_,p]);const I=async()=>{n(!0);try{const o=await z.get("/api/v1/orgs");t(o),u(o.length===0)}catch(o){const d=o instanceof Y?o.message:"Failed to load organizations";O.error(d)}finally{n(!1)}};c.useEffect(()=>{j(je()),I();const o=v=>{v.key==="active_org_id"&&j(v.newValue)};window.addEventListener("storage",o);const d=v=>{const A=v.detail??null;j(A)};window.addEventListener(be,d);const l=()=>void I();return window.addEventListener(Le,l),()=>{window.removeEventListener("storage",o),window.removeEventListener(be,d),window.removeEventListener(Le,l)}},[]);async function $(o){try{const d=await z.post("/api/v1/orgs",o);t(l=>[d,...l]),Oe(d.id),j(d.id),ys(),O.success(`Created ${d.name}`),u(!1),p.reset({name:"",slug:""}),k.current=!1}catch(d){const l=d instanceof Y?d.message:"Failed to create organization";O.error(l)}}function M(o){Oe(o.id),j(o.id),O.success(`Switched to ${o.name}`)}async function F(o){try{f(o.id),await z.delete(`/api/v1/orgs/${o.id}`),t(d=>{const l=d.filter(v=>v.id!==o.id);if(g===o.id){const v=l[0]?.id??null;Oe(v),j(v)}return l}),ys(),O.success(`Deleted ${o.name}`)}catch(d){const l=d instanceof Y?d.message:"Failed to delete organization";O.error(l)}finally{f(null)}}return a?e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsx("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:e.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Organizations"})}),e.jsx("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3",children:[...Array(6)].map((o,d)=>e.jsxs(oe,{children:[e.jsx(de,{children:e.jsx(fe,{className:"h-5 w-40"})}),e.jsxs(ce,{children:[e.jsx(fe,{className:"mb-2 h-4 w-24"}),e.jsx(fe,{className:"h-4 w-48"})]}),e.jsx(Ae,{children:e.jsx(fe,{className:"h-9 w-24"})})]},d))})]}):e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[e.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Organizations"}),e.jsx(x,{onClick:()=>u(!0),children:"New organization"})]}),e.jsx(ze,{}),s.length===0?e.jsx("div",{className:"text-muted-foreground text-sm",children:"No organizations yet."}):e.jsx("div",{className:"grid grid-cols-1 gap-4 pr-2 sm:grid-cols-2 lg:grid-cols-3",children:s.map(o=>e.jsxs(oe,{className:"flex flex-col",children:[e.jsx(de,{children:e.jsx(he,{className:"text-base",children:o.name})}),e.jsxs(ce,{className:"text-muted-foreground text-sm",children:[e.jsxs("div",{children:["Slug: ",o.slug]}),e.jsxs("div",{className:"mt-1",children:["ID: ",o.id]})]}),e.jsxs(Ae,{className:"mt-auto w-full flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(x,{onClick:()=>M(o),children:o.id===g?"Selected":"Select"}),e.jsxs(cs,{children:[e.jsx(ms,{asChild:!0,children:e.jsxs(x,{variant:"destructive",className:"ml-auto",disabled:b===o.id,children:[e.jsx(we,{className:"mr-2 h-5 w-5"}),b===o.id?"Deleting…":"Delete"]})}),e.jsxs(us,{children:[e.jsxs(xs,{children:[e.jsx(js,{children:"Delete organization?"}),e.jsxs(fs,{children:["This will permanently delete ",e.jsx("b",{children:o.name}),". This action cannot be undone."]})]}),e.jsxs(hs,{className:"sm:justify-between",children:[e.jsx(ps,{disabled:b===o.id,children:"Cancel"}),e.jsx(gs,{asChild:!0,disabled:b===o.id,children:e.jsx(x,{variant:"destructive",onClick:()=>F(o),children:"Confirm delete"})})]})]})]})]})]},o.id))}),e.jsx(ae,{open:m,onOpenChange:u,children:e.jsxs(re,{className:"sm:max-w-[480px]",children:[e.jsxs(ne,{children:[e.jsx(le,{children:"Create organization"}),e.jsx(qe,{children:"Set a name and a URL-friendly slug."})]}),e.jsx(G,{...p,children:e.jsxs("form",{onSubmit:p.handleSubmit($),className:"space-y-4",children:[e.jsx(w,{control:p.control,name:"name",render:({field:o})=>e.jsxs(y,{children:[e.jsx(N,{children:"Name"}),e.jsx(C,{children:e.jsx(L,{placeholder:"Acme Inc",autoFocus:!0,...o})}),e.jsx(Ns,{children:"This is your organization’s display name."}),e.jsx(S,{})]})}),e.jsx(w,{control:p.control,name:"slug",render:({field:o})=>e.jsxs(y,{children:[e.jsx(N,{children:"Slug"}),e.jsx(C,{children:e.jsx(L,{placeholder:"acme-inc",...o,onChange:d=>{k.current=!0,o.onChange(d)},onBlur:d=>{const l=ws(d.target.value);p.setValue("slug",l,{shouldValidate:!0}),o.onBlur()}})}),e.jsx(Ns,{children:"Lowercase, numbers and hyphens only."}),e.jsx(S,{})]})}),e.jsxs(ie,{className:"flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(x,{type:"button",variant:"outline",onClick:()=>{p.reset(),u(!1),k.current=!1},children:"Cancel"}),e.jsx(x,{type:"submit",disabled:!p.formState.isValid||p.formState.isSubmitting,children:p.formState.isSubmitting?"Creating...":"Create"})]})]})})]})})]})};function Yr(){return e.jsxs(fa,{children:[e.jsx(T,{path:"/",element:e.jsx(ns,{to:"/auth/login",replace:!0})}),e.jsxs(T,{path:"/auth",children:[e.jsx(T,{path:"login",element:e.jsx(vr,{})}),e.jsx(T,{path:"register",element:e.jsx(yr,{})}),e.jsx(T,{path:"forgot",element:e.jsx(gr,{})}),e.jsx(T,{path:"reset",element:e.jsx(Sr,{})}),e.jsx(T,{path:"verify",element:e.jsx(Cr,{})})]}),e.jsx(T,{element:e.jsx(rr,{}),children:e.jsxs(T,{element:e.jsx(ar,{}),children:[e.jsx(T,{element:e.jsx(nr,{}),children:e.jsx(T,{path:"/admin",children:e.jsx(T,{path:"users",element:e.jsx(jr,{})})})}),e.jsxs(T,{path:"/core",children:[e.jsx(T,{path:"annotations",element:e.jsx(kr,{})}),e.jsx(T,{path:"clusters",element:e.jsx(_r,{})}),e.jsx(T,{path:"labels",element:e.jsx(Er,{})}),e.jsx(T,{path:"nodepools",element:e.jsx(Dr,{})}),e.jsx(T,{path:"servers",element:e.jsx(Mr,{})}),e.jsx(T,{path:"taints",element:e.jsx(Pr,{})})]}),e.jsx(T,{path:"/security",children:e.jsx(T,{path:"ssh",element:e.jsx(Br,{})})}),e.jsxs(T,{path:"/settings",children:[e.jsx(T,{path:"orgs",element:e.jsx(Wr,{})}),e.jsx(T,{path:"members",element:e.jsx(qr,{})}),e.jsx(T,{path:"me",element:e.jsx(br,{})})]}),e.jsx(T,{path:"/403",element:e.jsx(_s,{})}),e.jsx(T,{path:"*",element:e.jsx(Is,{})})]})}),e.jsx(T,{path:"/403",element:e.jsx(_s,{})}),e.jsx(T,{path:"*",element:e.jsx(Is,{})})]})}const Xr=({...s})=>{const{theme:t="system"}=Es();return e.jsx(rt,{theme:t,className:"toaster group",style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)"},...s})};function Qr({children:s,defaultTheme:t="system",storageKey:a="vite-ui-theme"}){return e.jsx(nt,{attribute:"class",defaultTheme:t,enableSystem:!0,storageKey:a,disableTransitionOnChange:!0,children:s})}it.createRoot(document.getElementById("root")).render(e.jsx(c.StrictMode,{children:e.jsx(ga,{children:e.jsxs(Qr,{defaultTheme:"system",storageKey:"dragon-theme",children:[e.jsx(Yr,{}),e.jsx(Xr,{richColors:!0,position:"top-right"})]})})})); diff --git a/internal/ui/dist/assets/index-eleTxiqf.js b/internal/ui/dist/assets/index-eleTxiqf.js deleted file mode 100644 index fb26c56..0000000 --- a/internal/ui/dist/assets/index-eleTxiqf.js +++ /dev/null @@ -1 +0,0 @@ -import{t as Xs,m as Qs,r as c,j as e,n as es,z as Es,F as Zs,C as et,p as st,q as tt,v as W,w as V,_ as ye,x as Ne,y as at,A as q,B as G,D as O,E as ss,G as zs,T as rt,J as nt,H as it}from"./vendor-DBKlM1wc.js";import{S as Le,R as ot,a as Os,C as As,b as Ds,T as Ls,D as Ts,P as $s,O as Ms,c as lt,d as dt,e as ct,f as mt,g as ut,A as xt,h as ht,i as jt,j as ft,k as gt,l as pt,m as vt,n as bt,I as wt,o as yt,p as Nt,q as St,r as Ct,s as kt,t as _t,u as It,v as Et,w as zt,x as Ot,y as At,z as Dt,B as Lt,E as Tt,V as $t,F as Mt,G as Pt,H as Ft,J as Rt,K as Vt,L as Ht,M as Ut,N as Bt,Q as qt,U as Gt}from"./radix-BnAuhYuH.js";import{X as Ps,S as Kt,M as Jt,L as Wt,C as Ee,H as Yt,A as Xt,B as Qt,a as Zt,T as ea,b as sa,c as Fs,d as ta,K as aa,F as ra,e as na,f as ia,g as oa,U as vs,h as la,i as da,j as ca,k as ts,l as ma,m as ua,P as Ge,n as as,o as Se,p as Rs,R as Vs,q as xa,r as ha,s as bs,t as Ce,u as ja}from"./icons-CNkJtX2d.js";import{u as Ke,L as ve,O as rs,N as ns,a as Te,b as Hs,R as fa,c as M,B as ga}from"./router-CQ4G2GmP.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const m of document.querySelectorAll('link[rel="modulepreload"]'))n(m);new MutationObserver(m=>{for(const u of m)if(u.type==="childList")for(const f of u.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&n(f)}).observe(document,{childList:!0,subtree:!0});function a(m){const u={};return m.integrity&&(u.integrity=m.integrity),m.referrerPolicy&&(u.referrerPolicy=m.referrerPolicy),m.crossOrigin==="use-credentials"?u.credentials="include":m.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function n(m){if(m.ep)return;m.ep=!0;const u=a(m);fetch(m.href,u)}})();function x(...s){return Xs(Qs(s))}function ws(s){return s.toLowerCase().trim().replace(/['"]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)+/g,"")}const Xe=768;function pa(){const[s,t]=c.useState(void 0);return c.useEffect(()=>{const a=window.matchMedia(`(max-width: ${Xe-1}px)`),n=()=>{t(window.innerWidtha.removeEventListener("change",n)},[]),!!s}const is=es("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 shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs 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 shadow-xs 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"}},defaultVariants:{variant:"default",size:"default"}});function h({className:s,variant:t,size:a,asChild:n=!1,...m}){const u=n?Le:"button";return e.jsx(u,{"data-slot":"button",className:x(is({variant:t,size:a,className:s})),...m})}function D({className:s,type:t,...a}){return e.jsx("input",{type:t,"data-slot":"input",className:x("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex 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",s),...a})}function ze({className:s,orientation:t="horizontal",decorative:a=!0,...n}){return e.jsx(ot,{"data-slot":"separator",decorative:a,orientation:t,className:x("bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",s),...n})}function va({...s}){return e.jsx(Os,{"data-slot":"sheet",...s})}function ba({...s}){return e.jsx($s,{"data-slot":"sheet-portal",...s})}function wa({className:s,...t}){return e.jsx(Ms,{"data-slot":"sheet-overlay",className:x("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",s),...t})}function ya({className:s,children:t,side:a="right",...n}){return e.jsxs(ba,{children:[e.jsx(wa,{}),e.jsxs(As,{"data-slot":"sheet-content",className:x("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",a==="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",a==="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",a==="top"&&"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",a==="bottom"&&"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",s),...n,children:[t,e.jsxs(Ds,{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:[e.jsx(Ps,{className:"size-4"}),e.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function Na({className:s,...t}){return e.jsx("div",{"data-slot":"sheet-header",className:x("flex flex-col gap-1.5 p-4",s),...t})}function Sa({className:s,...t}){return e.jsx(Ls,{"data-slot":"sheet-title",className:x("text-foreground font-semibold",s),...t})}function Ca({className:s,...t}){return e.jsx(Ts,{"data-slot":"sheet-description",className:x("text-muted-foreground text-sm",s),...t})}function fe({className:s,...t}){return e.jsx("div",{"data-slot":"skeleton",className:x("bg-accent animate-pulse rounded-md",s),...t})}function Je({delayDuration:s=0,...t}){return e.jsx(lt,{"data-slot":"tooltip-provider",delayDuration:s,...t})}function os({...s}){return e.jsx(Je,{children:e.jsx(dt,{"data-slot":"tooltip",...s})})}function ls({...s}){return e.jsx(ct,{"data-slot":"tooltip-trigger",...s})}function ds({className:s,sideOffset:t=0,children:a,...n}){return e.jsx(mt,{children:e.jsxs(ut,{"data-slot":"tooltip-content",sideOffset:t,className:x("bg-primary text-primary-foreground 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",s),...n,children:[a,e.jsx(xt,{className:"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]"})]})})}const ka="sidebar_state",_a=3600*24*7,Ia="16rem",Ea="18rem",za="3rem",Oa="b",Us=c.createContext(null);function Bs(){const s=c.useContext(Us);if(!s)throw new Error("useSidebar must be used within a SidebarProvider.");return s}function Aa({defaultOpen:s=!0,open:t,onOpenChange:a,className:n,style:m,children:u,...f}){const j=pa(),[N,g]=c.useState(!1),[k,E]=c.useState(s),_=t??k,S=c.useCallback(l=>{const d=typeof l=="function"?l(_):l;a?a(d):E(d),document.cookie=`${ka}=${d}; path=/; max-age=${_a}`},[a,_]),L=c.useCallback(()=>j?g(l=>!l):S(l=>!l),[j,S,g]);c.useEffect(()=>{const l=d=>{d.key===Oa&&(d.metaKey||d.ctrlKey)&&(d.preventDefault(),L())};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[L]);const T=_?"expanded":"collapsed",F=c.useMemo(()=>({state:T,open:_,setOpen:S,isMobile:j,openMobile:N,setOpenMobile:g,toggleSidebar:L}),[T,_,S,j,N,g,L]);return e.jsx(Us.Provider,{value:F,children:e.jsx(Je,{delayDuration:0,children:e.jsx("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":Ia,"--sidebar-width-icon":za,...m},className:x("group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full",n),...f,children:u})})})}function Da({side:s="left",variant:t="sidebar",collapsible:a="offcanvas",className:n,children:m,...u}){const{isMobile:f,state:j,openMobile:N,setOpenMobile:g}=Bs();return a==="none"?e.jsx("div",{"data-slot":"sidebar",className:x("bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col",n),...u,children:m}):f?e.jsx(va,{open:N,onOpenChange:g,...u,children:e.jsxs(ya,{"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":Ea},side:s,children:[e.jsxs(Na,{className:"sr-only",children:[e.jsx(Sa,{children:"Sidebar"}),e.jsx(Ca,{children:"Displays the mobile sidebar."})]}),e.jsx("div",{className:"flex h-full w-full flex-col",children:m})]})}):e.jsxs("div",{className:"group peer text-sidebar-foreground hidden md:block","data-state":j,"data-collapsible":j==="collapsed"?a:"","data-variant":t,"data-side":s,"data-slot":"sidebar",children:[e.jsx("div",{"data-slot":"sidebar-gap",className:x("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)")}),e.jsx("div",{"data-slot":"sidebar-container",className:x("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",s==="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",n),...u,children:e.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:m})})]})}function La({className:s,...t}){return e.jsx("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:x("flex flex-col gap-2 p-2",s),...t})}function Ta({className:s,...t}){return e.jsx("div",{"data-slot":"sidebar-footer","data-sidebar":"footer",className:x("flex flex-col gap-2 p-2",s),...t})}function $a({className:s,...t}){return e.jsx("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:x("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",s),...t})}function Ma({className:s,...t}){return e.jsx("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:x("relative flex w-full min-w-0 flex-col p-2",s),...t})}function Pa({className:s,asChild:t=!1,...a}){const n=t?Le:"div";return e.jsx(n,{"data-slot":"sidebar-group-label","data-sidebar":"group-label",className:x("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",s),...a})}function Fa({className:s,...t}){return e.jsx("div",{"data-slot":"sidebar-group-content","data-sidebar":"group-content",className:x("w-full text-sm",s),...t})}function Ra({className:s,...t}){return e.jsx("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:x("flex w-full min-w-0 flex-col gap-1",s),...t})}function Va({className:s,...t}){return e.jsx("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:x("group/menu-item relative",s),...t})}const Ha=es("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 Ua({asChild:s=!1,isActive:t=!1,variant:a="default",size:n="default",tooltip:m,className:u,...f}){const j=s?Le:"button",{isMobile:N,state:g}=Bs(),k=e.jsx(j,{"data-slot":"sidebar-menu-button","data-sidebar":"menu-button","data-size":n,"data-active":t,className:x(Ha({variant:a,size:n}),u),...f});return m?(typeof m=="string"&&(m={children:m}),e.jsxs(os,{children:[e.jsx(ls,{asChild:!0,children:k}),e.jsx(ds,{side:"right",align:"center",hidden:g!=="collapsed"||N,...m})]})):k}const Ve="";class J extends Error{status;body;constructor(t,a,n){super(a),this.status=t,this.body=n}}function Ba(s){const t={};if(!s)return t;if(s instanceof Headers)s.forEach((a,n)=>t[n]=a);else if(Array.isArray(s))for(const[a,n]of s)t[a]=n;else Object.assign(t,s);return t}function qa(){const s={},t=localStorage.getItem("access_token");return t&&(s.Authorization=`Bearer ${t}`),s}function Ga(){const s=localStorage.getItem("active_org_id");return s?{"X-Org-ID":s}:{}}async function ke(s,t,a,n={}){const u={...{"Content-Type":"application/json"},...n.auth===!1?{}:qa(),...Ga(),...Ba(n.headers)},f=await fetch(`${Ve}${s}`,{method:t,headers:u,body:a===void 0?void 0:JSON.stringify(a),...n}),N=(f.headers.get("content-type")||"").includes("application/json"),g=N?await f.json().catch(()=>{}):await f.text().catch(()=>"");if(!f.ok){const k=N&&g&&typeof g=="object"&&"error"in g&&g.error||N&&g&&typeof g=="object"&&"message"in g&&g.message||typeof g=="string"&&g||`HTTP ${f.status}`;throw new J(f.status,String(k),g)}return console.debug("API ->",t,`${Ve}${s}`,u),N?g:void 0}const z={get:(s,t)=>ke(s,"GET",void 0,t),post:(s,t,a)=>ke(s,"POST",t,a),put:(s,t,a)=>ke(s,"PUT",t,a),patch:(s,t,a)=>ke(s,"PATCH",t,a),delete:(s,t)=>ke(s,"DELETE",void 0,t)};function Ka(s){return s&&(s.user||s.user_id)}function qs(s){return Ka(s)?.role==="admin"}function Ja(s){return(s?.org_role??"")==="admin"}const ue={isAuthenticated(){return!!localStorage.getItem("access_token")},async login(s,t){const a=await z.post("/api/v1/auth/login",{email:s,password:t});localStorage.setItem("access_token",a.access_token),localStorage.setItem("refresh_token",a.refresh_token)},async register(s,t,a){await z.post("/api/v1/auth/register",{name:s,email:t,password:a})},async me(){return await z.get("/api/v1/auth/me")},async logout(){const s=localStorage.getItem("refresh_token");if(s)try{await z.post("/api/v1/auth/logout",{refresh_token:s})}catch{}localStorage.removeItem("access_token"),localStorage.removeItem("refresh_token")},async forgot(s){await z.post("/api/v1/auth/password/forgot",{email:s})},async reset(s,t){await z.post("/api/v1/auth/password/reset",{token:s,new_password:t})},async verify(s){const t=await fetch(`${Ve}/api/v1/auth/verify?token=${encodeURIComponent(s)}`);if(!t.ok){const a=await t.text();throw new Error(a)}}};function Wa({...s}){return e.jsx(ht,{"data-slot":"collapsible",...s})}function Ya({...s}){return e.jsx(jt,{"data-slot":"collapsible-trigger",...s})}function Xa({...s}){return e.jsx(ft,{"data-slot":"collapsible-content",...s})}function $e({...s}){return e.jsx(gt,{"data-slot":"dropdown-menu",...s})}function Me({...s}){return e.jsx(pt,{"data-slot":"dropdown-menu-trigger",...s})}function Pe({className:s,sideOffset:t=4,...a}){return e.jsx(vt,{children:e.jsx(bt,{"data-slot":"dropdown-menu-content",sideOffset:t,className:x("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",s),...a})})}function ie({className:s,inset:t,variant:a="default",...n}){return e.jsx(wt,{"data-slot":"dropdown-menu-item","data-inset":t,"data-variant":a,className:x("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",s),...n})}function Qa(){const{setTheme:s,theme:t}=Es();return e.jsxs($e,{children:[e.jsx(Me,{asChild:!0,children:e.jsx(h,{variant:"outline",size:"icon","aria-label":"Toggle theme",children:t==="light"?e.jsx(Kt,{className:"h-5 w-5"}):t==="dark"?e.jsx(Jt,{className:"h-5 w-5"}):e.jsx(Wt,{className:"h-5 w-5"})})}),e.jsxs(Pe,{align:"end",children:[e.jsxs(ie,{onClick:()=>s("light"),children:[t==="light"&&e.jsx(Ee,{}),"Light"]}),e.jsxs(ie,{onClick:()=>s("dark"),children:[t==="dark"&&e.jsx(Ee,{}),"Dark"]}),e.jsxs(ie,{onClick:()=>s("system"),children:[t==="system"&&e.jsx(Ee,{}),"System"]})]})]})}const Ze="active_org_id",be="active-org-changed",Ae="orgs-changed";function je(){return localStorage.getItem(Ze)}function Oe(s){s?localStorage.setItem(Ze,s):localStorage.removeItem(Ze),window.dispatchEvent(new CustomEvent(be,{detail:s}))}function ys(){window.dispatchEvent(new Event(Ae))}const Za=()=>{const[s,t]=c.useState([]),[a,n]=c.useState(null);async function m(){try{const j=await z.get("/api/v1/orgs");t(j),!je()&&j.length>0&&(Oe(j[0].id),n(j[0].id))}catch(j){const N=j instanceof J?j.message:"Failed to load organizations";console.error(N)}}c.useEffect(()=>{n(je()),m();const j=k=>{k.key==="active_org_id"&&n(k.newValue)};window.addEventListener("storage",j);const N=k=>n(k.detail??null),g=()=>void m();return window.addEventListener(be,N),window.addEventListener(Ae,g),()=>{window.removeEventListener("storage",j),window.removeEventListener(be,N),window.removeEventListener(Ae,g)}},[]);const u=j=>{Oe(j),n(j)},f=s.find(j=>j.id===a)?.name??"Select Org";return e.jsxs($e,{children:[e.jsx(Me,{asChild:!0,children:e.jsx(h,{variant:"outline",className:"w-full justify-start",children:f})}),e.jsx(Pe,{className:"w-48",children:s.length===0?e.jsx(ie,{disabled:!0,children:"No organizations"}):s.map(j=>e.jsx(ie,{onClick:()=>u(j.id),className:j.id===a?"font-semibold":void 0,children:j.name},j.id))})]})},er=[{label:"Dashboard",icon:Yt,to:"/dashboard"},{label:"Core",icon:ta,items:[{label:"Cluster",to:"/core/cluster",icon:Xt},{label:"Node Pools",icon:Qt,to:"/core/nodepools"},{label:"Annotations",icon:Zt,to:"/core/annotations"},{label:"Labels",icon:ea,to:"/core/labels"},{label:"Taints",icon:sa,to:"/core/taints"},{label:"Servers",icon:Fs,to:"/core/servers"}]},{label:"Security",icon:na,items:[{label:"Keys & Tokens",icon:aa,to:"/security/keys"},{label:"SSH Keys",to:"/security/ssh",icon:ra}]},{label:"Tasks",icon:ia,items:[]},{label:"Settings",icon:da,items:[{label:"Organizations",to:"/settings/orgs",icon:oa},{label:"Members",to:"/settings/members",icon:vs},{label:"Profile",to:"/settings/me",icon:la}]},{label:"Admin",icon:ca,requiresAdmin:!0,items:[{label:"Users",to:"/admin/users",icon:vs,requiresAdmin:!0}]}];function Gs(s,t,a){return s.filter(n=>!(n.requiresAdmin&&!t||n.requiresOrgAdmin&&!a)).map(n=>({...n,items:n.items?Gs(n.items,t,a):void 0})).filter(n=>!n.items||n.items.length>0)}const Ks=({item:s})=>{const t=Ke(),a=s.icon;return s.to?e.jsxs(ve,{to:s.to,className:`hover:bg-accent hover:text-accent-foreground flex items-center space-x-2 rounded-md px-4 py-2 text-sm ${t.pathname===s.to?"bg-accent text-accent-foreground":""}`,children:[e.jsx(a,{className:"mr-4 h-4 w-4"}),s.label]}):s.items?e.jsx(Wa,{defaultOpen:!0,className:"group/collapsible",children:e.jsxs(Ma,{children:[e.jsx(Pa,{asChild:!0,children:e.jsxs(Ya,{children:[e.jsx(a,{className:"mr-4 h-4 w-4"}),s.label,e.jsx(ts,{className:"ml-auto transition-transform group-data-[state=open]/collapsible:rotate-180"})]})}),e.jsx(Xa,{children:e.jsx(Fa,{children:e.jsx(Ra,{children:s.items.map((n,m)=>e.jsx(Va,{children:e.jsx(Ua,{asChild:!0,children:e.jsx(Ks,{item:n})})},m))})})})]})}):null},sr=()=>{const[s,t]=c.useState(null),[a,n]=c.useState(!0);c.useEffect(()=>{let u=!0;return(async()=>{try{const f=await ue.me();if(!u)return;t(f)}catch{}finally{n(!1)}})(),()=>{u=!1}},[]);const m=c.useMemo(()=>{const u=qs(s),f=Ja(s);return Gs(er,u,f)},[s]);return a?e.jsx("div",{className:"p-6",children:"Loading…"}):e.jsxs(Da,{children:[e.jsx(La,{className:"flex items-center justify-between p-4",children:e.jsx("h1",{className:"text-xl font-bold",children:"AutoGlue"})}),e.jsx($a,{children:m.map((u,f)=>e.jsx(Ks,{item:u},f))}),e.jsxs(Ta,{className:"space-y-2 p-4",children:[e.jsx(Za,{}),e.jsx(Qa,{}),e.jsx(h,{onClick:()=>{localStorage.clear(),window.location.reload()},className:"w-full",children:"Logout"})]})]})};function tr(){return e.jsx("footer",{className:"border-t",children:e.jsxs("div",{className:"container flex flex-col items-center justify-between gap-4 py-10 md:h-24 md:flex-row md:py-0",children:[e.jsx("div",{className:"flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0",children:e.jsxs("p",{className:"text-muted-foreground text-center text-sm leading-loose md:text-left",children:["Built for"," ",e.jsx("a",{href:"https://www.glueops.dev/",target:"_blank",rel:"noreferrer",className:"font-medium underline underline-offset-4",children:"GlueOps"}),". The source code is available on"," ",e.jsx("a",{href:"https://github.com/GlueOps/autoglue",target:"_blank",rel:"noreferrer",className:"font-medium underline underline-offset-4",children:"GitHub"}),"."]})}),e.jsx("div",{className:"flex items-center space-x-4",children:e.jsx("a",{href:"https://github.com/GlueOps/autoglue",target:"_blank",rel:"noreferrer",children:e.jsx(ma,{className:"h-5 w-5"})})})]})})}function ar(){return e.jsx("div",{className:"flex h-screen",children:e.jsxs(Aa,{children:[e.jsx(sr,{}),e.jsxs("div",{className:"flex flex-1 flex-col",children:[e.jsx("main",{className:"flex-1 overflow-auto p-4",children:e.jsx(rs,{})}),e.jsx(tr,{})]})]})})}function rr({children:s}){const t=Ke();return ue.isAuthenticated()?s?e.jsx(e.Fragment,{children:s}):e.jsx(rs,{}):e.jsx(ns,{to:"/auth/login",state:{from:t},replace:!0})}function nr({children:s}){const[t,a]=c.useState(!0),[n,m]=c.useState(!1),u=Ke();return c.useEffect(()=>{let f=!0;return(async()=>{try{const j=await ue.me();if(!f)return;m(qs(j))}catch{if(!f)return;m(!1)}finally{if(a(!1),!f)return}})(),()=>{f=!1}},[]),t?null:n?s?e.jsx(e.Fragment,{children:s}):e.jsx(rs,{}):e.jsx(ns,{to:"/403",replace:!0,state:{from:u}})}function cs({...s}){return e.jsx(yt,{"data-slot":"alert-dialog",...s})}function ms({...s}){return e.jsx(Nt,{"data-slot":"alert-dialog-trigger",...s})}function ir({...s}){return e.jsx(Et,{"data-slot":"alert-dialog-portal",...s})}function or({className:s,...t}){return e.jsx(zt,{"data-slot":"alert-dialog-overlay",className:x("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",s),...t})}function us({className:s,...t}){return e.jsxs(ir,{children:[e.jsx(or,{}),e.jsx(St,{"data-slot":"alert-dialog-content",className:x("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",s),...t})]})}function xs({className:s,...t}){return e.jsx("div",{"data-slot":"alert-dialog-header",className:x("flex flex-col gap-2 text-center sm:text-left",s),...t})}function hs({className:s,...t}){return e.jsx("div",{"data-slot":"alert-dialog-footer",className:x("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",s),...t})}function js({className:s,...t}){return e.jsx(Ct,{"data-slot":"alert-dialog-title",className:x("text-lg font-semibold",s),...t})}function fs({className:s,...t}){return e.jsx(kt,{"data-slot":"alert-dialog-description",className:x("text-muted-foreground text-sm",s),...t})}function gs({className:s,...t}){return e.jsx(It,{className:x(is(),s),...t})}function ps({className:s,...t}){return e.jsx(_t,{className:x(is({variant:"outline"}),s),...t})}function ae({className:s,...t}){return e.jsx("div",{"data-slot":"card",className:x("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",s),...t})}function re({className:s,...t}){return e.jsx("div",{"data-slot":"card-header",className:x("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",s),...t})}function he({className:s,...t}){return e.jsx("div",{"data-slot":"card-title",className:x("leading-none font-semibold",s),...t})}function ne({className:s,...t}){return e.jsx("div",{"data-slot":"card-content",className:x("px-6",s),...t})}function De({className:s,...t}){return e.jsx("div",{"data-slot":"card-footer",className:x("flex items-center px-6 [.border-t]:pt-6",s),...t})}function oe({...s}){return e.jsx(Os,{"data-slot":"dialog",...s})}function We({...s}){return e.jsx(Ot,{"data-slot":"dialog-trigger",...s})}function lr({...s}){return e.jsx($s,{"data-slot":"dialog-portal",...s})}function dr({className:s,...t}){return e.jsx(Ms,{"data-slot":"dialog-overlay",className:x("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",s),...t})}function le({className:s,children:t,showCloseButton:a=!0,...n}){return e.jsxs(lr,{"data-slot":"dialog-portal",children:[e.jsx(dr,{}),e.jsxs(As,{"data-slot":"dialog-content",className:x("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",s),...n,children:[t,a&&e.jsxs(Ds,{"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:[e.jsx(Ps,{}),e.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function de({className:s,...t}){return e.jsx("div",{"data-slot":"dialog-header",className:x("flex flex-col gap-2 text-center sm:text-left",s),...t})}function ce({className:s,...t}){return e.jsx("div",{"data-slot":"dialog-footer",className:x("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",s),...t})}function me({className:s,...t}){return e.jsx(Ls,{"data-slot":"dialog-title",className:x("text-lg leading-none font-semibold",s),...t})}function He({className:s,...t}){return e.jsx(Ts,{"data-slot":"dialog-description",className:x("text-muted-foreground text-sm",s),...t})}function cr({className:s,...t}){return e.jsx(At,{"data-slot":"label",className:x("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",s),...t})}const K=Zs,Js=c.createContext({}),v=({...s})=>e.jsx(Js.Provider,{value:{name:s.name},children:e.jsx(et,{...s})}),Ye=()=>{const s=c.useContext(Js),t=c.useContext(Ws),{getFieldState:a}=st(),n=tt({name:s.name}),m=a(s.name,n);if(!s)throw new Error("useFormField should be used within ");const{id:u}=t;return{id:u,name:s.name,formItemId:`${u}-form-item`,formDescriptionId:`${u}-form-item-description`,formMessageId:`${u}-form-item-message`,...m}},Ws=c.createContext({});function b({className:s,...t}){const a=c.useId();return e.jsx(Ws.Provider,{value:{id:a},children:e.jsx("div",{"data-slot":"form-item",className:x("grid gap-2",s),...t})})}function w({className:s,...t}){const{error:a,formItemId:n}=Ye();return e.jsx(cr,{"data-slot":"form-label","data-error":!!a,className:x("data-[error=true]:text-destructive",s),htmlFor:n,...t})}function C({...s}){const{error:t,formItemId:a,formDescriptionId:n,formMessageId:m}=Ye();return e.jsx(Le,{"data-slot":"form-control",id:a,"aria-describedby":t?`${n} ${m}`:`${n}`,"aria-invalid":!!t,...s})}function Ns({className:s,...t}){const{formDescriptionId:a}=Ye();return e.jsx("p",{"data-slot":"form-description",id:a,className:x("text-muted-foreground text-sm",s),...t})}function y({className:s,...t}){const{error:a,formMessageId:n}=Ye(),m=a?String(a?.message??""):t.children;return m?e.jsx("p",{"data-slot":"form-message",id:n,className:x("text-destructive text-sm",s),...t,children:m}):null}function Q({...s}){return e.jsx(Dt,{"data-slot":"select",...s})}function Z({...s}){return e.jsx($t,{"data-slot":"select-value",...s})}function ee({className:s,size:t="default",children:a,...n}){return e.jsxs(Lt,{"data-slot":"select-trigger","data-size":t,className:x("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",s),...n,children:[a,e.jsx(Tt,{asChild:!0,children:e.jsx(ts,{className:"size-4 opacity-50"})})]})}function se({className:s,children:t,position:a="popper",...n}){return e.jsx(Mt,{children:e.jsxs(Pt,{"data-slot":"select-content",className:x("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",a==="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",s),position:a,...n,children:[e.jsx(mr,{}),e.jsx(Ft,{className:x("p-1",a==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:t}),e.jsx(ur,{})]})})}function B({className:s,children:t,...a}){return e.jsxs(Rt,{"data-slot":"select-item",className:x("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",s),...a,children:[e.jsx("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:e.jsx(Vt,{children:e.jsx(Ee,{className:"size-4"})})}),e.jsx(Ht,{children:t})]})}function mr({className:s,...t}){return e.jsx(Ut,{"data-slot":"select-scroll-up-button",className:x("flex cursor-default items-center justify-center py-1",s),...t,children:e.jsx(ua,{className:"size-4"})})}function ur({className:s,...t}){return e.jsx(Bt,{"data-slot":"select-scroll-down-button",className:x("flex cursor-default items-center justify-center py-1",s),...t,children:e.jsx(ts,{className:"size-4"})})}const xr=W({name:V().min(1,"Name required"),email:Ne("Enter a valid email"),role:ye(["user","admin"]),password:V().min(8,"Min 8 characters")}),hr=W({name:V().min(1,"Name required"),email:Ne("Enter a valid email"),role:ye(["user","admin"]),password:V().min(8,"Min 8 characters").optional().or(at(""))});function jr(){const[s,t]=c.useState([]),[a,n]=c.useState(!0),[m,u]=c.useState(!1),[f,j]=c.useState(!1),[N,g]=c.useState(null),[k,E]=c.useState(null),_=q({resolver:G(xr),mode:"onChange",defaultValues:{name:"",email:"",role:"user",password:""}}),S=q({resolver:G(hr),mode:"onChange",defaultValues:{name:"",email:"",role:"user",password:""}});async function L(){n(!0);try{const o=await z.get("/api/v1/admin/users?page=1&page_size=100");t(o.users??[])}catch(o){O.error(o instanceof J?o.message:"Failed to load users")}finally{n(!1)}}c.useEffect(()=>{L()},[]);async function T(o){try{const p=await z.post("/api/v1/admin/users",o);t(A=>[p,...A]),u(!1),_.reset({name:"",email:"",role:"user",password:""}),O.success(`Created ${p.email}`)}catch(p){O.error(p instanceof J?p.message:"Failed to create user")}}function F(o){g(o),S.reset({name:o.name||"",email:o.email,role:o.role??"user",password:""}),j(!0)}async function l(o){if(!N)return;const p={name:o.name,email:o.email,role:o.role};o.password&&o.password.length>=8&&(p.password=o.password);try{const A=await z.patch(`/api/v1/admin/users/${N.id}`,p);t(H=>H.map(R=>R.id===A.id?A:R)),j(!1),g(null),O.success(`Updated ${A.email}`)}catch(A){O.error(A instanceof J?A.message:"Failed to update user")}}async function d(o){try{E(o),await z.delete(`/api/v1/admin/users/${o}`),t(p=>p.filter(A=>A.id!==o)),O.success("User deleted")}catch(p){O.error(p instanceof J?p.message:"Failed to delete user")}finally{E(null)}}return e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Users"}),e.jsxs(h,{onClick:()=>u(!0),children:[e.jsx(Ge,{className:"mr-2 h-4 w-4"}),"New user"]})]}),e.jsx(ze,{}),a?e.jsx("div",{className:"text-muted-foreground text-sm",children:"Loading…"}):s.length===0?e.jsx("div",{className:"text-muted-foreground text-sm",children:"No users yet."}):e.jsx("div",{className:"grid grid-cols-1 gap-4 pr-2 md:grid-cols-2 lg:grid-cols-3",children:s.map(o=>e.jsxs(ae,{className:"flex flex-col",children:[e.jsx(re,{children:e.jsx(he,{className:"text-base",children:o.name||o.email})}),e.jsxs(ne,{className:"text-muted-foreground space-y-1 text-sm",children:[e.jsxs("div",{children:["Email: ",o.email]}),e.jsxs("div",{children:["Role: ",o.role]}),e.jsxs("div",{children:["Verified: ",o.email_verified?"Yes":"No"]}),e.jsxs("div",{children:["Joined: ",new Date(o.created_at).toLocaleString()]})]}),e.jsxs(De,{className:"mt-auto w-full flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs(h,{variant:"outline",onClick:()=>F(o),children:[e.jsx(as,{className:"mr-2 h-4 w-4"})," Edit"]}),e.jsxs(cs,{children:[e.jsx(ms,{asChild:!0,children:e.jsxs(h,{variant:"destructive",disabled:k===o.id,children:[e.jsx(Se,{className:"mr-2 h-4 w-4"}),k===o.id?"Deleting…":"Delete"]})}),e.jsxs(us,{children:[e.jsxs(xs,{children:[e.jsx(js,{children:"Delete user?"}),e.jsxs(fs,{children:["This will permanently delete ",e.jsx("b",{children:o.email}),"."]})]}),e.jsxs(hs,{className:"sm:justify-between",children:[e.jsx(ps,{disabled:k===o.id,children:"Cancel"}),e.jsx(gs,{asChild:!0,disabled:k===o.id,children:e.jsx(h,{variant:"destructive",onClick:()=>d(o.id),children:"Confirm delete"})})]})]})]})]})]},o.id))}),e.jsx(oe,{open:m,onOpenChange:u,children:e.jsxs(le,{className:"sm:max-w-[520px]",children:[e.jsxs(de,{children:[e.jsx(me,{children:"Create user"}),e.jsx(He,{children:"Add a new user account."})]}),e.jsx(K,{..._,children:e.jsxs("form",{onSubmit:_.handleSubmit(T),className:"grid gap-4 py-2",children:[e.jsx(v,{name:"name",control:_.control,render:({field:o})=>e.jsxs(b,{children:[e.jsx(w,{children:"Name"}),e.jsx(C,{children:e.jsx(D,{...o,placeholder:"Jane Doe"})}),e.jsx(y,{})]})}),e.jsx(v,{name:"email",control:_.control,render:({field:o})=>e.jsxs(b,{children:[e.jsx(w,{children:"Email"}),e.jsx(C,{children:e.jsx(D,{type:"email",...o,placeholder:"jane@example.com"})}),e.jsx(y,{})]})}),e.jsx(v,{name:"role",control:_.control,render:({field:o})=>e.jsxs(b,{children:[e.jsx(w,{children:"Role"}),e.jsxs(Q,{value:o.value,onValueChange:o.onChange,children:[e.jsx(C,{children:e.jsx(ee,{className:"w-[200px]",children:e.jsx(Z,{placeholder:"Select role"})})}),e.jsxs(se,{children:[e.jsx(B,{value:"user",children:"User"}),e.jsx(B,{value:"admin",children:"Admin"})]})]}),e.jsx(y,{})]})}),e.jsx(v,{name:"password",control:_.control,render:({field:o})=>e.jsxs(b,{children:[e.jsx(w,{children:"Password"}),e.jsx(C,{children:e.jsx(D,{type:"password",...o,placeholder:"••••••••"})}),e.jsx(y,{})]})}),e.jsxs(ce,{className:"mt-2 flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(h,{type:"button",variant:"outline",onClick:()=>u(!1),children:"Cancel"}),e.jsx(h,{type:"submit",disabled:!_.formState.isValid||_.formState.isSubmitting,children:_.formState.isSubmitting?"Creating…":"Create"})]})]})})]})}),e.jsx(oe,{open:f,onOpenChange:j,children:e.jsxs(le,{className:"sm:max-w-[520px]",children:[e.jsxs(de,{children:[e.jsx(me,{children:"Edit user"}),e.jsx(He,{children:"Update user details. Leave password blank to keep it unchanged."})]}),e.jsx(K,{...S,children:e.jsxs("form",{onSubmit:S.handleSubmit(l),className:"grid gap-4 py-2",children:[e.jsx(v,{name:"name",control:S.control,render:({field:o})=>e.jsxs(b,{children:[e.jsx(w,{children:"Name"}),e.jsx(C,{children:e.jsx(D,{...o})}),e.jsx(y,{})]})}),e.jsx(v,{name:"email",control:S.control,render:({field:o})=>e.jsxs(b,{children:[e.jsx(w,{children:"Email"}),e.jsx(C,{children:e.jsx(D,{type:"email",...o})}),e.jsx(y,{})]})}),e.jsx(v,{name:"role",control:S.control,render:({field:o})=>e.jsxs(b,{children:[e.jsx(w,{children:"Role"}),e.jsxs(Q,{value:o.value,onValueChange:o.onChange,children:[e.jsx(C,{children:e.jsx(ee,{className:"w-[200px]",children:e.jsx(Z,{placeholder:"Select role"})})}),e.jsxs(se,{children:[e.jsx(B,{value:"user",children:"User"}),e.jsx(B,{value:"admin",children:"Admin"})]})]}),e.jsx(y,{})]})}),e.jsx(v,{name:"password",control:S.control,render:({field:o})=>e.jsxs(b,{children:[e.jsx(w,{children:"New password (optional)"}),e.jsx(C,{children:e.jsx(D,{type:"password",...o,placeholder:"Leave blank to keep"})}),e.jsx(y,{})]})}),e.jsxs(ce,{className:"mt-2 flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(h,{type:"button",variant:"outline",onClick:()=>j(!1),children:"Cancel"}),e.jsx(h,{type:"submit",disabled:!S.formState.isValid||S.formState.isSubmitting,children:S.formState.isSubmitting?"Saving…":"Save changes"})]})]})})]})})]})}const fr=W({email:Ne()});function gr(){const s=q({resolver:G(fr),defaultValues:{email:""}});async function t(a){try{await ue.forgot(a.email),O.success("If that email exists, we've sent instructions.")}catch(n){O.error(n.message||"Something went wrong")}}return e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(ae,{children:[e.jsx(re,{children:e.jsx(he,{children:"Forgot password"})}),e.jsx(ne,{children:e.jsx(K,{...s,children:e.jsxs("form",{onSubmit:s.handleSubmit(t),className:"space-y-4",children:[e.jsx(v,{name:"email",control:s.control,render:({field:a})=>e.jsxs(b,{children:[e.jsx(w,{children:"Email"}),e.jsx(C,{children:e.jsx(D,{placeholder:"you@example.com",...a})}),e.jsx(y,{})]})}),e.jsx(h,{type:"submit",className:"w-full",children:"Send reset link"})]})})})]})})}const pr=W({email:Ne(),password:V().min(6)});function vr(){const s=Te(),t=Ke(),a=q({resolver:G(pr),defaultValues:{email:"",password:""}});async function n(m){try{await ue.login(m.email,m.password),O.success("Welcome back!");const u=t.state?.from?.pathname??"/settings/me";s(u,{replace:!0})}catch(u){O.error(u.message||"Login failed")}}return e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(ae,{children:[e.jsx(re,{children:e.jsx(he,{children:"Sign in"})}),e.jsxs(ne,{children:[e.jsx(K,{...a,children:e.jsxs("form",{onSubmit:a.handleSubmit(n),className:"space-y-4",children:[e.jsx(v,{name:"email",control:a.control,render:({field:m})=>e.jsxs(b,{children:[e.jsx(w,{children:"Email"}),e.jsx(C,{children:e.jsx(D,{placeholder:"you@example.com",...m})}),e.jsx(y,{})]})}),e.jsx(v,{name:"password",control:a.control,render:({field:m})=>e.jsxs(b,{children:[e.jsx(w,{children:"Password"}),e.jsx(C,{children:e.jsx(D,{type:"password",placeholder:"••••••••",...m})}),e.jsx(y,{})]})}),e.jsx(h,{type:"submit",className:"w-full",children:"Sign in"})]})}),e.jsxs("div",{className:"mt-4 flex justify-between text-sm",children:[e.jsx(ve,{to:"/auth/forgot",className:"underline",children:"Forgot password?"}),e.jsx(ve,{to:"/auth/register",className:"underline",children:"Create an account"})]})]})]})})}function br(){const[s,t]=c.useState(null),a=Te();c.useEffect(()=>{(async()=>{try{const m=await ue.me();t(m)}catch(m){O.error(m.message||"Failed to load profile")}})()},[]);async function n(){await ue.logout(),a("/auth/login")}return e.jsx("div",{className:"mx-auto max-w-xl",children:e.jsxs(ae,{children:[e.jsx(re,{children:e.jsx(he,{children:"My Account"})}),e.jsxs(ne,{className:"space-y-3",children:[s?e.jsx("pre",{className:"bg-muted overflow-auto rounded p-3 text-sm",children:JSON.stringify(s,null,2)}):e.jsx("p",{children:"Loading…"}),e.jsx(h,{onClick:n,children:"Sign out"})]})]})})}const wr=W({name:V().min(2),email:Ne(),password:V().min(6)});function yr(){const s=Te(),t=q({resolver:G(wr),defaultValues:{name:"",email:"",password:""}});async function a(n){try{await ue.register(n.name,n.email,n.password),O.success("Account created! Check your email to verify."),s("/auth/login")}catch(m){O.error(m.message||"Registration failed")}}return e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(ae,{children:[e.jsx(re,{children:e.jsx(he,{children:"Create account"})}),e.jsxs(ne,{children:[e.jsx(K,{...t,children:e.jsxs("form",{onSubmit:t.handleSubmit(a),className:"space-y-4",children:[e.jsx(v,{name:"name",control:t.control,render:({field:n})=>e.jsxs(b,{children:[e.jsx(w,{children:"Name"}),e.jsx(C,{children:e.jsx(D,{placeholder:"Jane Doe",...n})}),e.jsx(y,{})]})}),e.jsx(v,{name:"email",control:t.control,render:({field:n})=>e.jsxs(b,{children:[e.jsx(w,{children:"Email"}),e.jsx(C,{children:e.jsx(D,{placeholder:"you@example.com",...n})}),e.jsx(y,{})]})}),e.jsx(v,{name:"password",control:t.control,render:({field:n})=>e.jsxs(b,{children:[e.jsx(w,{children:"Password"}),e.jsx(C,{children:e.jsx(D,{type:"password",placeholder:"••••••••",...n})}),e.jsx(y,{})]})}),e.jsx(h,{type:"submit",className:"w-full",children:"Create account"})]})}),e.jsxs("div",{className:"mt-4 text-sm",children:["Already have an account?"," ",e.jsx(ve,{to:"/auth/login",className:"underline",children:"Sign in"})]})]})]})})}const Nr=W({new_password:V().min(6)});function Sr(){const[s]=Hs(),t=s.get("token"),a=q({resolver:G(Nr),defaultValues:{new_password:""}}),n=Te();async function m(u){if(!t){O.error("Missing token");return}try{await ue.reset(t,u.new_password),O.success("Password updated. Please sign in."),n("/auth/login")}catch(f){O.error(f.message||"Reset failed")}}return e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(ae,{children:[e.jsx(re,{children:e.jsx(he,{children:"Reset password"})}),e.jsxs(ne,{children:[e.jsx(K,{...a,children:e.jsxs("form",{onSubmit:a.handleSubmit(m),className:"space-y-4",children:[e.jsx(v,{name:"new_password",control:a.control,render:({field:u})=>e.jsxs(b,{children:[e.jsx(w,{children:"New password"}),e.jsx(C,{children:e.jsx(D,{type:"password",placeholder:"••••••••",...u})}),e.jsx(y,{})]})}),e.jsx(h,{type:"submit",className:"w-full",children:"Update password"})]})}),e.jsx("div",{className:"mt-4 text-sm",children:e.jsx(ve,{to:"/auth/login",className:"underline",children:"Back to sign in"})})]})]})})}function Cr(){const[s]=Hs(),t=s.get("token"),[a,n]=c.useState("idle");return c.useEffect(()=>{async function m(){if(!t){n("error");return}try{await ue.verify(t),n("ok")}catch(u){O.error(u.message||"Verification failed"),n("error")}}m()},[t]),e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(ae,{children:[e.jsx(re,{children:e.jsx(he,{children:"Email verification"})}),e.jsxs(ne,{className:"space-y-3",children:[a==="idle"&&e.jsx("p",{children:"Verifying…"}),a==="ok"&&e.jsxs("div",{children:[e.jsx("p",{children:"Your email has been verified. You can now sign in."}),e.jsx(h,{asChild:!0,className:"mt-3",children:e.jsx(ve,{to:"/auth/login",children:"Go to sign in"})})]}),a==="error"&&e.jsxs("div",{children:[e.jsx("p",{children:"Verification failed. Please request a new verification email."}),e.jsx(h,{asChild:!0,className:"mt-3",children:e.jsx(ve,{to:"/auth/login",children:"Back to sign in"})})]})]})]})})}const kr=es("inline-flex items-center justify-center rounded-md 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 Fe({className:s,variant:t,asChild:a=!1,...n}){const m=a?Le:"span";return e.jsx(m,{"data-slot":"badge",className:x(kr({variant:t}),s),...n})}function Ue({className:s,...t}){return e.jsx("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:e.jsx("table",{"data-slot":"table",className:x("w-full caption-bottom text-sm",s),...t})})}function Be({className:s,...t}){return e.jsx("thead",{"data-slot":"table-header",className:x("[&_tr]:border-b",s),...t})}function qe({className:s,...t}){return e.jsx("tbody",{"data-slot":"table-body",className:x("[&_tr:last-child]:border-0",s),...t})}function te({className:s,...t}){return e.jsx("tr",{"data-slot":"table-row",className:x("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",s),...t})}function P({className:s,...t}){return e.jsx("th",{"data-slot":"table-head",className:x("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",s),...t})}function $({className:s,...t}){return e.jsx("td",{"data-slot":"table-cell",className:x("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",s),...t})}const _e=["pending","provisioning","ready","failed"],Ie=["master","worker","bastion"],Ys=W({hostname:V().trim().max(120,"Max 120 chars").optional(),ip_address:V().trim().min(1,"IP address is required"),role:ye(Ie),ssh_key_id:ss("Pick a valid SSH key"),ssh_user:V().trim().min(1,"SSH user is required"),status:ye(_e).default("pending")}),_r=Ys.partial();function Ir({status:s}){const t=s==="ready"?"default":s==="provisioning"?"secondary":s==="failed"?"destructive":"outline";return e.jsx(Fe,{variant:t,className:"capitalize",children:s})}function Qe(s,t=16){return!s||s.length<=t*2+3?s:`${s.slice(0,t)}…${s.slice(-t)}`}const Er=()=>{const[s,t]=c.useState([]),[a,n]=c.useState([]),[m,u]=c.useState(!1),[f,j]=c.useState(null),[N,g]=c.useState(""),[k,E]=c.useState(""),[_,S]=c.useState(""),[L,T]=c.useState(!1),[F,l]=c.useState(null);function d(){const i=new URLSearchParams;return k&&i.set("status",k),_&&i.set("role",_),`/api/v1/servers${i.toString()?`?${i.toString()}`:""}`}async function o(){u(!0),j(null);try{const[i,r]=await Promise.all([z.get(d()),z.get("/api/v1/ssh")]);t(i??[]),n(r??[])}catch(i){console.error(i),j("Failed to load servers or SSH keys")}finally{u(!1)}}c.useEffect(()=>{o();const i=r=>{r.key==="active_org_id"&&o()};return window.addEventListener("storage",i),()=>window.removeEventListener("storage",i)},[]),c.useEffect(()=>{o()},[k,_]);const p=c.useMemo(()=>{const i=new Map;return a.forEach(r=>i.set(r.id,r)),i},[a]),A=c.useMemo(()=>{const i=N.trim().toLowerCase();return i?s.filter(r=>(r.hostname??"").toLowerCase().includes(i)||r.ip_address.toLowerCase().includes(i)||r.role.toLowerCase().includes(i)||r.ssh_user.toLowerCase().includes(i)):s},[s,N]);async function H(i){confirm("Delete this server? This cannot be undone.")&&(await z.delete(`/api/v1/servers/${encodeURIComponent(i)}`),await o())}const R=q({resolver:G(Ys),defaultValues:{hostname:"",ip_address:"",role:"worker",ssh_key_id:"",ssh_user:"ubuntu",status:"pending"}}),X=async i=>{const r={ip_address:i.ip_address.trim(),role:i.role,ssh_key_id:i.ssh_key_id,ssh_user:i.ssh_user.trim(),status:i.status};i.hostname&&i.hostname.trim()&&(r.hostname=i.hostname.trim()),await z.post("/api/v1/servers",r),T(!1),R.reset(),await o()},U=q({resolver:G(_r),defaultValues:{}});function we(i){l(i),U.reset({hostname:i.hostname??"",ip_address:i.ip_address,role:Ie.includes(i.role)?i.role:"worker",ssh_key_id:i.ssh_key_id,ssh_user:i.ssh_user,status:_e.includes(i.status)?i.status:"pending"})}const xe=async i=>{if(!F)return;const r={};i.hostname!==void 0&&(r.hostname=i.hostname?.trim()||""),i.ip_address!==void 0&&(r.ip_address=i.ip_address.trim()),i.role!==void 0&&(r.role=i.role),i.ssh_key_id!==void 0&&(r.ssh_key_id=i.ssh_key_id),i.ssh_user!==void 0&&(r.ssh_user=i.ssh_user.trim()),i.status!==void 0&&(r.status=i.status),await z.patch(`/api/v1/servers/${encodeURIComponent(F.id)}`,r),l(null),await o()};return m?e.jsx("div",{className:"p-6",children:"Loading servers…"}):f?e.jsx("div",{className:"p-6 text-red-500",children:f}):e.jsxs(Je,{children:[e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[e.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Servers"}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("div",{className:"relative",children:[e.jsx(Rs,{className:"absolute top-2.5 left-2 h-4 w-4 opacity-60"}),e.jsx(D,{value:N,onChange:i=>g(i.target.value),placeholder:"Search hostname, IP, role, user…",className:"w-64 pl-8"})]}),e.jsxs(Q,{value:_,onValueChange:i=>S(i),children:[e.jsx(ee,{className:"w-36",children:e.jsx(Z,{placeholder:"Role (all)"})}),e.jsx(se,{children:Ie.map(i=>e.jsx(B,{value:i,children:i},i))})]}),e.jsxs(Q,{value:k,onValueChange:i=>E(i),children:[e.jsx(ee,{className:"w-40",children:e.jsx(Z,{placeholder:"Status (all)"})}),e.jsx(se,{children:_e.map(i=>e.jsx(B,{value:i,children:i},i))})]}),e.jsxs(h,{variant:"outline",onClick:o,children:[e.jsx(Vs,{className:"mr-2 h-4 w-4"}),"Refresh"]}),e.jsxs(oe,{open:L,onOpenChange:T,children:[e.jsx(We,{asChild:!0,children:e.jsxs(h,{onClick:()=>T(!0),children:[e.jsx(Ge,{className:"mr-2 h-4 w-4"}),"Create Server"]})}),e.jsxs(le,{className:"sm:max-w-lg",children:[e.jsx(de,{children:e.jsx(me,{children:"Create server"})}),e.jsx(K,{...R,children:e.jsxs("form",{onSubmit:R.handleSubmit(X),className:"space-y-4",children:[e.jsx(v,{control:R.control,name:"hostname",render:({field:i})=>e.jsxs(b,{children:[e.jsx(w,{children:"Hostname"}),e.jsx(C,{children:e.jsx(D,{placeholder:"worker-01",...i})}),e.jsx(y,{})]})}),e.jsx(v,{control:R.control,name:"ip_address",render:({field:i})=>e.jsxs(b,{children:[e.jsx(w,{children:"IP address"}),e.jsx(C,{children:e.jsx(D,{placeholder:"10.0.1.23",...i})}),e.jsx(y,{})]})}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[e.jsx(v,{control:R.control,name:"role",render:({field:i})=>e.jsxs(b,{children:[e.jsx(w,{children:"Role"}),e.jsxs(Q,{onValueChange:i.onChange,value:i.value,children:[e.jsx(C,{children:e.jsx(ee,{children:e.jsx(Z,{placeholder:"Select role"})})}),e.jsx(se,{children:Ie.map(r=>e.jsx(B,{value:r,children:r},r))})]}),e.jsx(y,{})]})}),e.jsx(v,{control:R.control,name:"ssh_user",render:({field:i})=>e.jsxs(b,{children:[e.jsx(w,{children:"SSH user"}),e.jsx(C,{children:e.jsx(D,{placeholder:"ubuntu",...i})}),e.jsx(y,{})]})})]}),e.jsx(v,{control:R.control,name:"ssh_key_id",render:({field:i})=>e.jsxs(b,{children:[e.jsx(w,{children:"SSH key"}),e.jsxs(Q,{onValueChange:i.onChange,value:i.value,children:[e.jsx(C,{children:e.jsx(ee,{children:e.jsx(Z,{placeholder:a.length?"Select SSH key":"No SSH keys found"})})}),e.jsx(se,{children:a.map(r=>e.jsxs(B,{value:r.id,children:[r.name?r.name:"Unnamed key"," —"," ",Qe(r.fingerprint,8)]},r.id))})]}),e.jsx(y,{})]})}),e.jsx(v,{control:R.control,name:"status",render:({field:i})=>e.jsxs(b,{children:[e.jsx(w,{children:"Initial status"}),e.jsxs(Q,{onValueChange:i.onChange,value:i.value,children:[e.jsx(C,{children:e.jsx(ee,{children:e.jsx(Z,{placeholder:"pending"})})}),e.jsx(se,{children:_e.map(r=>e.jsx(B,{value:r,children:r},r))})]}),e.jsx(y,{})]})}),e.jsxs(ce,{className:"gap-2",children:[e.jsx(h,{type:"button",variant:"outline",onClick:()=>T(!1),children:"Cancel"}),e.jsx(h,{type:"submit",disabled:R.formState.isSubmitting,children:R.formState.isSubmitting?"Creating…":"Create"})]})]})})]})]})]})]}),e.jsx("div",{className:"bg-background overflow-hidden rounded-2xl border shadow-sm",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs(Ue,{children:[e.jsx(Be,{children:e.jsxs(te,{children:[e.jsx(P,{children:"Hostname"}),e.jsx(P,{children:"IP address"}),e.jsx(P,{children:"Role"}),e.jsx(P,{children:"SSH user"}),e.jsx(P,{children:"SSH key"}),e.jsx(P,{children:"Status"}),e.jsx(P,{children:"Created"}),e.jsx(P,{className:"w-[180px] text-right",children:"Actions"})]})}),e.jsxs(qe,{children:[A.map(i=>{const r=p.get(i.ssh_key_id);return e.jsxs(te,{children:[e.jsx($,{className:"font-medium",children:i.hostname||"—"}),e.jsx($,{children:e.jsx("code",{className:"font-mono text-sm",children:i.ip_address})}),e.jsx($,{className:"capitalize",children:i.role}),e.jsx($,{children:e.jsx("code",{className:"font-mono text-sm",children:i.ssh_user})}),e.jsx($,{children:r?e.jsxs(os,{children:[e.jsx(ls,{asChild:!0,children:e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx(Fe,{variant:"secondary",children:r.name||"SSH key"}),e.jsx("code",{className:"font-mono text-xs",children:Qe(r.fingerprint,8)})]})}),e.jsx(ds,{className:"max-w-[70vw]",children:e.jsx("p",{className:"font-mono text-xs break-all",children:r.public_keys})})]}):e.jsx("span",{className:"text-muted-foreground",children:"Unknown"})}),e.jsx($,{children:e.jsx(Ir,{status:i.status})}),e.jsx($,{children:new Date(i.created_at).toLocaleString()}),e.jsx($,{children:e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsxs(h,{variant:"outline",size:"sm",onClick:()=>we(i),children:[e.jsx(as,{className:"mr-2 h-4 w-4"})," Edit"]}),e.jsxs($e,{children:[e.jsx(Me,{asChild:!0,children:e.jsxs(h,{variant:"destructive",size:"sm",children:[e.jsx(Se,{className:"mr-2 h-4 w-4"})," Delete"]})}),e.jsx(Pe,{align:"end",children:e.jsx(ie,{onClick:()=>H(i.id),children:"Confirm delete"})})]})]})})]},i.id)}),A.length===0&&e.jsx(te,{children:e.jsx($,{colSpan:8,className:"text-muted-foreground py-10 text-center",children:"No servers match your filters."})})]})]})})})]}),e.jsx(oe,{open:!!F,onOpenChange:i=>!i&&l(null),children:e.jsxs(le,{className:"sm:max-w-lg",children:[e.jsx(de,{children:e.jsx(me,{children:"Edit server"})}),e.jsx(K,{...U,children:e.jsxs("form",{onSubmit:U.handleSubmit(xe),className:"space-y-4",children:[e.jsx(v,{control:U.control,name:"hostname",render:({field:i})=>e.jsxs(b,{children:[e.jsx(w,{children:"Hostname"}),e.jsx(C,{children:e.jsx(D,{placeholder:"worker-01",...i})}),e.jsx(y,{})]})}),e.jsx(v,{control:U.control,name:"ip_address",render:({field:i})=>e.jsxs(b,{children:[e.jsx(w,{children:"IP address"}),e.jsx(C,{children:e.jsx(D,{placeholder:"10.0.1.23",...i})}),e.jsx(y,{})]})}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[e.jsx(v,{control:U.control,name:"role",render:({field:i})=>e.jsxs(b,{children:[e.jsx(w,{children:"Role"}),e.jsxs(Q,{onValueChange:i.onChange,value:i.value,children:[e.jsx(C,{children:e.jsx(ee,{children:e.jsx(Z,{placeholder:"Select role"})})}),e.jsx(se,{children:Ie.map(r=>e.jsx(B,{value:r,children:r},r))})]}),e.jsx(y,{})]})}),e.jsx(v,{control:U.control,name:"ssh_user",render:({field:i})=>e.jsxs(b,{children:[e.jsx(w,{children:"SSH user"}),e.jsx(C,{children:e.jsx(D,{placeholder:"ubuntu",...i})}),e.jsx(y,{})]})})]}),e.jsx(v,{control:U.control,name:"ssh_key_id",render:({field:i})=>e.jsxs(b,{children:[e.jsx(w,{children:"SSH key"}),e.jsxs(Q,{onValueChange:i.onChange,value:i.value,children:[e.jsx(C,{children:e.jsx(ee,{children:e.jsx(Z,{placeholder:a.length?"Select SSH key":"No SSH keys found"})})}),e.jsx(se,{children:a.map(r=>e.jsxs(B,{value:r.id,children:[r.name?r.name:"SSH key"," — ",Qe(r.fingerprint,8)]},r.id))})]}),e.jsx(y,{})]})}),e.jsx(v,{control:U.control,name:"status",render:({field:i})=>e.jsxs(b,{children:[e.jsx(w,{children:"Status"}),e.jsxs(Q,{onValueChange:i.onChange,value:i.value,children:[e.jsx(C,{children:e.jsx(ee,{children:e.jsx(Z,{placeholder:"pending"})})}),e.jsx(se,{children:_e.map(r=>e.jsx(B,{value:r,children:r},r))})]}),e.jsx(y,{})]})}),e.jsxs(ce,{className:"gap-2",children:[e.jsx(h,{type:"button",variant:"outline",onClick:()=>l(null),children:"Cancel"}),e.jsx(h,{type:"submit",disabled:U.formState.isSubmitting,children:U.formState.isSubmitting?"Saving…":"Save changes"})]})]})})]})})]})};function Ss(){return e.jsxs("div",{className:"p-6",children:[e.jsx("h1",{className:"text-2xl font-bold",children:"403 — Forbidden"}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"You don’t have access to this area."})]})}const Cs=()=>{const s=Te();return e.jsxs("div",{className:"bg-background text-foreground flex min-h-screen flex-col items-center justify-center",children:[e.jsx("h1",{className:"mb-4 text-6xl font-bold",children:"404"}),e.jsx("p",{className:"mb-8 text-2xl",children:"Oops! Page not found"}),e.jsx(h,{onClick:()=>s("/dashboard"),children:"Go back to Dashboard"})]})},zr=W({name:V().min(1,"Name is required").max(100,"Max 100 characters"),comment:V().trim().max(100,"Max 100 characters").default(""),bits:ye(["2048","3072","4096"])});function Or(s,t="download.bin"){if(!s)return t;const a=/filename\*=UTF-8''([^;]+)/i.exec(s);return a?.[1]?decodeURIComponent(a[1]):/filename="?([^"]+)"?/i.exec(s)?.[1]??t}function Ar(s,t=24){return!s||s.length<=t*2+3?s:`${s.slice(0,t)}…${s.slice(-t)}`}function Dr(s){return s?.split(/\s+/)?.[0]??"ssh-key"}async function Lr(s){try{await navigator.clipboard.writeText(s)}catch{const t=document.createElement("textarea");t.value=s,t.setAttribute("readonly",""),t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}}const Tr=()=>{const[s,t]=c.useState([]),[a,n]=c.useState(null),[m,u]=c.useState(!0),[f,j]=c.useState(""),[N,g]=c.useState(!1),k=c.useMemo(()=>!!localStorage.getItem("active_org_id"),[]);async function E(){u(!0),n(null);try{if(!k){t([]),n("Select an organization first.");return}const l=await z.get("/api/v1/ssh");t(l??[])}catch(l){console.error(l),n("Failed to fetch SSH keys")}finally{u(!1)}}c.useEffect(()=>{E();const l=d=>{d.key==="active_org_id"&&E()};return window.addEventListener("storage",l),()=>window.removeEventListener("storage",l)},[]);const _=s.filter(l=>`${l.name} ${l.public_keys} ${l.fingerprint}`.toLowerCase().includes(f.toLowerCase()));async function S(l,d="both"){const o=localStorage.getItem("access_token"),p=localStorage.getItem("active_org_id"),A=`${Ve}/api/v1/ssh/${encodeURIComponent(l)}/download?part=${encodeURIComponent(d)}`;try{const H=await fetch(A,{method:"GET",headers:{...o?{Authorization:`Bearer ${o}`}:{},...p?{"X-Org-ID":p}:{}}});if(!H.ok){const i=await H.text().catch(()=>"");throw new Error(i||`HTTP ${H.status}`)}const R=await H.blob(),X=d==="both"?`ssh_key_${l}.zip`:d==="public"?`id_rsa_${l}.pub`:`id_rsa_${l}.pem`,U=Or(H.headers.get("content-disposition")??void 0,X),we=URL.createObjectURL(R),xe=document.createElement("a");xe.href=we,xe.download=U,document.body.appendChild(xe),xe.click(),xe.remove(),URL.revokeObjectURL(we)}catch(H){console.error(H),alert(H instanceof Error?H.message:"Download failed")}}async function L(l){try{await z.delete(`/api/v1/ssh/${encodeURIComponent(l)}`),await E()}catch(d){console.error(d),alert("Failed to delete key")}}const T=q({resolver:G(zr),defaultValues:{name:"",comment:"deploy@autoglue",bits:"4096"}});async function F(l){try{await z.post("/api/v1/ssh",{bits:Number(l.bits),comment:l.comment?.trim()??"",name:l.name.trim(),download:"none"}),g(!1),T.reset(),await E()}catch(d){console.error(d),alert("Failed to create key")}}return m?e.jsx("div",{className:"p-6",children:"Loading SSH Keys…"}):a?e.jsx("div",{className:"p-6 text-red-500",children:a}):e.jsx(Je,{children:e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("h1",{className:"text-2xl font-bold",children:"SSH Keys"}),e.jsx("div",{className:"w-full max-w-sm",children:e.jsx(D,{value:f,onChange:l=>j(l.target.value),placeholder:"Search by name, fingerprint or key"})}),e.jsxs(oe,{open:N,onOpenChange:g,children:[e.jsx(We,{asChild:!0,children:e.jsxs(h,{onClick:()=>g(!0),children:[e.jsx(Ge,{className:"mr-2 h-4 w-4"}),"Create New Keypair"]})}),e.jsxs(le,{className:"sm:max-w-lg",children:[e.jsx(de,{children:e.jsx(me,{children:"Create SSH Keypair"})}),e.jsx(K,{...T,children:e.jsxs("form",{onSubmit:T.handleSubmit(F),className:"space-y-4",children:[e.jsx(v,{control:T.control,name:"name",render:({field:l})=>e.jsxs(b,{children:[e.jsx(w,{children:"Name"}),e.jsx(C,{children:e.jsx(D,{placeholder:"e.g., CI deploy key",...l})}),e.jsx(y,{})]})}),e.jsx(v,{control:T.control,name:"comment",render:({field:l})=>e.jsxs(b,{children:[e.jsx(w,{children:"Comment"}),e.jsx(C,{children:e.jsx(D,{placeholder:"e.g., deploy@autoglue",...l})}),e.jsx(y,{})]})}),e.jsx(v,{control:T.control,name:"bits",render:({field:l})=>e.jsxs(b,{children:[e.jsx(w,{children:"Key size"}),e.jsx(C,{children:e.jsxs("select",{className:"bg-background w-full rounded-md border px-3 py-2 text-sm",value:l.value,onChange:l.onChange,children:[e.jsx("option",{value:"2048",children:"2048"}),e.jsx("option",{value:"3072",children:"3072"}),e.jsx("option",{value:"4096",children:"4096"})]})}),e.jsx(y,{})]})}),e.jsxs(ce,{className:"gap-2",children:[e.jsx(h,{type:"button",variant:"outline",onClick:()=>g(!1),children:"Cancel"}),e.jsx(h,{type:"submit",disabled:T.formState.isSubmitting,children:T.formState.isSubmitting?"Creating…":"Create"})]})]})})]})]})]}),e.jsx("div",{className:"bg-background overflow-hidden rounded-2xl border shadow-sm",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs(Ue,{children:[e.jsx(Be,{children:e.jsxs(te,{children:[e.jsx(P,{children:"Name"}),e.jsx(P,{className:"min-w-[360px]",children:"Public Key"}),e.jsx(P,{children:"Fingerprint"}),e.jsx(P,{children:"Created"}),e.jsx(P,{className:"w-[160px] text-right",children:"Actions"})]})}),e.jsx(qe,{children:_.map(l=>{const d=Dr(l.public_keys),o=Ar(l.public_keys,18);return e.jsxs(te,{children:[e.jsx($,{className:"align-top",children:l.name}),e.jsx($,{className:"align-top",children:e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(Fe,{variant:"secondary",className:"whitespace-nowrap",children:d}),e.jsxs(os,{children:[e.jsx(ls,{asChild:!0,children:e.jsx("code",{className:"font-mono text-sm break-all md:max-w-[48ch] md:truncate md:break-normal",children:o})}),e.jsx(ds,{className:"max-w-[70vw]",children:e.jsx("div",{className:"max-w-full",children:e.jsx("p",{className:"font-mono text-xs break-all",children:l.public_keys})})})]})]})}),e.jsx($,{className:"align-top",children:e.jsx("code",{className:"font-mono text-sm",children:l.fingerprint})}),e.jsx($,{className:"align-top",children:new Date(l.created_at).toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"})}),e.jsx($,{className:"align-top",children:e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsxs(h,{variant:"outline",size:"sm",onClick:()=>Lr(l.public_keys),title:"Copy public key",children:[e.jsx(xa,{className:"mr-2 h-4 w-4"}),"Copy"]}),e.jsxs($e,{children:[e.jsx(Me,{asChild:!0,children:e.jsxs(h,{variant:"outline",size:"sm",children:[e.jsx(ha,{className:"mr-2 h-4 w-4"}),"Download"]})}),e.jsxs(Pe,{align:"end",children:[e.jsx(ie,{onClick:()=>S(l.id,"both"),children:"Public + Private (.zip)"}),e.jsx(ie,{onClick:()=>S(l.id,"public"),children:"Public only (.pub)"}),e.jsx(ie,{onClick:()=>S(l.id,"private"),children:"Private only (.pem)"})]})]}),e.jsxs(h,{variant:"destructive",size:"sm",onClick:()=>L(l.id),children:[e.jsx(Se,{className:"mr-2 h-4 w-4"}),"Delete"]})]})})]},l.id)})})]})})})]})})};function $r(s){const t=s?.user_id??s?.UserID??s?.user?.id??s?.User?.ID??"",a=s?.email??s?.Email??s?.user?.email??s?.User?.Email,n=s?.name??s?.Name??s?.user?.name??s?.User?.Name,m=s?.role??s?.Role??"member",u=s?.created_at??s?.CreatedAt;return{userId:String(t),email:a,name:n,role:String(m),joinedAt:u}}const Mr=W({email:Ne("Enter a valid email"),role:ye(["member","admin"])}),Pr=()=>{const[s,t]=c.useState(!0),[a,n]=c.useState([]),[m,u]=c.useState(null),[f,j]=c.useState(!1),[N,g]=c.useState(!1),[k,E]=c.useState(null),_=c.useMemo(()=>je(),[]),S=q({resolver:G(Mr),defaultValues:{email:"",role:"member"},mode:"onChange"});async function L(){try{const d=await z.get("/api/v1/auth/me");u(d)}catch{}}async function T(d){if(!d){n([]),t(!1);return}t(!0);try{const o=await z.get("/api/v1/orgs/members");n((o??[]).map($r))}catch(o){const p=o instanceof J?o.message:"Failed to load members";O.error(p)}finally{t(!1)}}c.useEffect(()=>{L(),T(_)},[_]),c.useEffect(()=>{const d=()=>void T(je()),o=p=>{p.key==="active_org_id"&&d()};return window.addEventListener(be,d),window.addEventListener("storage",o),()=>{window.removeEventListener(be,d),window.removeEventListener("storage",o)}},[]);async function F(d){const o=je();if(!o){O.error("Select an organization first");return}try{g(!0),await z.post("/api/v1/orgs/invite",d),O.success(`Invited ${d.email}`),j(!1),S.reset({email:"",role:"member"}),T(o)}catch(p){const A=p instanceof J?p.message:"Failed to invite member";O.error(A)}finally{g(!1)}}async function l(d){const o=je();if(!o){O.error("Select an organization first");return}try{E(d),await z.delete(`/api/v1/orgs/members/${d}`,{headers:{"X-Org-ID":o}}),n(p=>p.filter(A=>A.userId!==d)),O.success("Member removed")}catch(p){const A=p instanceof J?p.message:"Failed to remove member";O.error(A)}finally{E(null)}}return s?e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Members"}),e.jsxs(h,{disabled:!0,children:[e.jsx(bs,{className:"mr-2 h-4 w-4"}),"Invite"]})]}),e.jsx(ze,{}),e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[...Array(6)].map((d,o)=>e.jsxs(ae,{children:[e.jsx(re,{children:e.jsx(fe,{className:"h-5 w-40"})}),e.jsxs(ne,{className:"space-y-2",children:[e.jsx(fe,{className:"h-4 w-56"}),e.jsx(fe,{className:"h-4 w-40"})]}),e.jsx(De,{children:e.jsx(fe,{className:"h-9 w-24"})})]},o))})]}):je()?e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Members"}),e.jsxs(oe,{open:f,onOpenChange:j,children:[e.jsx(We,{asChild:!0,children:e.jsxs(h,{children:[e.jsx(bs,{className:"mr-2 h-4 w-4"}),"Invite"]})}),e.jsxs(le,{className:"sm:max-w-[520px]",children:[e.jsxs(de,{children:[e.jsx(me,{children:"Invite member"}),e.jsx(He,{children:"Send an invite to join this organization."})]}),e.jsx(K,{...S,children:e.jsxs("form",{onSubmit:S.handleSubmit(F),className:"grid gap-4 py-2",children:[e.jsx(v,{control:S.control,name:"email",render:({field:d})=>e.jsxs(b,{children:[e.jsx(w,{children:"Email"}),e.jsx(C,{children:e.jsx(D,{type:"email",placeholder:"jane@example.com",...d})}),e.jsx(y,{})]})}),e.jsx(v,{control:S.control,name:"role",render:({field:d})=>e.jsxs(b,{children:[e.jsx(w,{children:"Role"}),e.jsxs(Q,{onValueChange:d.onChange,defaultValue:d.value,children:[e.jsx(C,{children:e.jsx(ee,{className:"w-[200px]",children:e.jsx(Z,{placeholder:"Select role"})})}),e.jsxs(se,{children:[e.jsx(B,{value:"member",children:"Member"}),e.jsx(B,{value:"admin",children:"Admin"})]})]}),e.jsx(y,{})]})}),e.jsxs(ce,{className:"mt-2 flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(h,{type:"button",variant:"outline",onClick:()=>j(!1),children:"Cancel"}),e.jsx(h,{type:"submit",disabled:!S.formState.isValid||N,children:N?"Sending…":"Send invite"})]})]})})]})]})]}),e.jsx(ze,{}),a.length===0?e.jsx("div",{className:"text-muted-foreground text-sm",children:"No members yet."}):e.jsx("div",{className:"grid grid-cols-1 gap-4 pr-2 sm:grid-cols-2 lg:grid-cols-3",children:a.map(d=>{const o=m?.id&&d.userId===m.id;return e.jsxs(ae,{className:"flex flex-col",children:[e.jsx(re,{children:e.jsx(he,{className:"text-base",children:d.name||d.email||d.userId})}),e.jsxs(ne,{className:"text-muted-foreground space-y-1 text-sm",children:[d.email&&e.jsxs("div",{children:["Email: ",d.email]}),e.jsxs("div",{children:["Role: ",d.role]}),d.joinedAt&&e.jsxs("div",{children:["Joined: ",new Date(d.joinedAt).toLocaleString()]})]}),e.jsxs(De,{className:"mt-auto w-full flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx("div",{}),e.jsxs(cs,{children:[e.jsx(ms,{asChild:!0,children:e.jsxs(h,{variant:"destructive",disabled:o||k===d.userId,className:"ml-auto",children:[e.jsx(Se,{className:"mr-2 h-5 w-5"}),k===d.userId?"Removing…":"Remove"]})}),e.jsxs(us,{children:[e.jsxs(xs,{children:[e.jsx(js,{children:"Remove member?"}),e.jsxs(fs,{children:["This will remove ",e.jsx("b",{children:d.name||d.email||d.userId})," from the organization."]})]}),e.jsxs(hs,{className:"sm:justify-between",children:[e.jsx(ps,{disabled:k===d.userId,children:"Cancel"}),e.jsx(gs,{asChild:!0,disabled:k===d.userId,children:e.jsx(h,{variant:"destructive",onClick:()=>l(d.userId),children:"Confirm remove"})})]})]})]})]})]},d.userId)})})]}):e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx("h1",{className:"text-2xl font-bold",children:"Members"})}),e.jsx(ze,{}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"No organization selected. Choose an organization to manage its members."})]})},Fr=W({name:V().min(2).max(100),slug:V().min(2).max(50).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/,"Use lowercase letters, numbers, and hyphens.")}),Rr=()=>{const[s,t]=c.useState([]),[a,n]=c.useState(!0),[m,u]=c.useState(!1),[f,j]=c.useState(null),[N,g]=c.useState(null),k=c.useRef(!1),E=q({resolver:G(Fr),mode:"onChange",defaultValues:{name:"",slug:""}}),_=E.watch("name");c.useEffect(()=>{k.current||E.setValue("slug",ws(_||""),{shouldValidate:!0})},[_,E]);const S=async()=>{n(!0);try{const l=await z.get("/api/v1/orgs");t(l),u(l.length===0)}catch(l){const d=l instanceof J?l.message:"Failed to load organizations";O.error(d)}finally{n(!1)}};c.useEffect(()=>{j(je()),S();const l=p=>{p.key==="active_org_id"&&j(p.newValue)};window.addEventListener("storage",l);const d=p=>{const A=p.detail??null;j(A)};window.addEventListener(be,d);const o=()=>void S();return window.addEventListener(Ae,o),()=>{window.removeEventListener("storage",l),window.removeEventListener(be,d),window.removeEventListener(Ae,o)}},[]);async function L(l){try{const d=await z.post("/api/v1/orgs",l);t(o=>[d,...o]),Oe(d.id),j(d.id),ys(),O.success(`Created ${d.name}`),u(!1),E.reset({name:"",slug:""}),k.current=!1}catch(d){const o=d instanceof J?d.message:"Failed to create organization";O.error(o)}}function T(l){Oe(l.id),j(l.id),O.success(`Switched to ${l.name}`)}async function F(l){try{g(l.id),await z.delete(`/api/v1/orgs/${l.id}`),t(d=>{const o=d.filter(p=>p.id!==l.id);if(f===l.id){const p=o[0]?.id??null;Oe(p),j(p)}return o}),ys(),O.success(`Deleted ${l.name}`)}catch(d){const o=d instanceof J?d.message:"Failed to delete organization";O.error(o)}finally{g(null)}}return a?e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsx("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:e.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Organizations"})}),e.jsx("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3",children:[...Array(6)].map((l,d)=>e.jsxs(ae,{children:[e.jsx(re,{children:e.jsx(fe,{className:"h-5 w-40"})}),e.jsxs(ne,{children:[e.jsx(fe,{className:"mb-2 h-4 w-24"}),e.jsx(fe,{className:"h-4 w-48"})]}),e.jsx(De,{children:e.jsx(fe,{className:"h-9 w-24"})})]},d))})]}):e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[e.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Organizations"}),e.jsx(h,{onClick:()=>u(!0),children:"New organization"})]}),e.jsx(ze,{}),s.length===0?e.jsx("div",{className:"text-muted-foreground text-sm",children:"No organizations yet."}):e.jsx("div",{className:"grid grid-cols-1 gap-4 pr-2 sm:grid-cols-2 lg:grid-cols-3",children:s.map(l=>e.jsxs(ae,{className:"flex flex-col",children:[e.jsx(re,{children:e.jsx(he,{className:"text-base",children:l.name})}),e.jsxs(ne,{className:"text-muted-foreground text-sm",children:[e.jsxs("div",{children:["Slug: ",l.slug]}),e.jsxs("div",{className:"mt-1",children:["ID: ",l.id]})]}),e.jsxs(De,{className:"mt-auto w-full flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(h,{onClick:()=>T(l),children:l.id===f?"Selected":"Select"}),e.jsxs(cs,{children:[e.jsx(ms,{asChild:!0,children:e.jsxs(h,{variant:"destructive",className:"ml-auto",disabled:N===l.id,children:[e.jsx(Se,{className:"mr-2 h-5 w-5"}),N===l.id?"Deleting…":"Delete"]})}),e.jsxs(us,{children:[e.jsxs(xs,{children:[e.jsx(js,{children:"Delete organization?"}),e.jsxs(fs,{children:["This will permanently delete ",e.jsx("b",{children:l.name}),". This action cannot be undone."]})]}),e.jsxs(hs,{className:"sm:justify-between",children:[e.jsx(ps,{disabled:N===l.id,children:"Cancel"}),e.jsx(gs,{asChild:!0,disabled:N===l.id,children:e.jsx(h,{variant:"destructive",onClick:()=>F(l),children:"Confirm delete"})})]})]})]})]})]},l.id))}),e.jsx(oe,{open:m,onOpenChange:u,children:e.jsxs(le,{className:"sm:max-w-[480px]",children:[e.jsxs(de,{children:[e.jsx(me,{children:"Create organization"}),e.jsx(He,{children:"Set a name and a URL-friendly slug."})]}),e.jsx(K,{...E,children:e.jsxs("form",{onSubmit:E.handleSubmit(L),className:"space-y-4",children:[e.jsx(v,{control:E.control,name:"name",render:({field:l})=>e.jsxs(b,{children:[e.jsx(w,{children:"Name"}),e.jsx(C,{children:e.jsx(D,{placeholder:"Acme Inc",autoFocus:!0,...l})}),e.jsx(Ns,{children:"This is your organization’s display name."}),e.jsx(y,{})]})}),e.jsx(v,{control:E.control,name:"slug",render:({field:l})=>e.jsxs(b,{children:[e.jsx(w,{children:"Slug"}),e.jsx(C,{children:e.jsx(D,{placeholder:"acme-inc",...l,onChange:d=>{k.current=!0,l.onChange(d)},onBlur:d=>{const o=ws(d.target.value);E.setValue("slug",o,{shouldValidate:!0}),l.onBlur()}})}),e.jsx(Ns,{children:"Lowercase, numbers and hyphens only."}),e.jsx(y,{})]})}),e.jsxs(ce,{className:"flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(h,{type:"button",variant:"outline",onClick:()=>{E.reset(),u(!1),k.current=!1},children:"Cancel"}),e.jsx(h,{type:"submit",disabled:!E.formState.isValid||E.formState.isSubmitting,children:E.formState.isSubmitting?"Creating...":"Create"})]})]})})]})})]})};function ks({className:s,...t}){return e.jsx(qt,{"data-slot":"checkbox",className:x("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",s),...t,children:e.jsx(Gt,{"data-slot":"checkbox-indicator",className:"flex items-center justify-center text-current transition-none",children:e.jsx(Ee,{className:"size-3.5"})})})}const Vr=W({name:V().trim().min(1,"Name is required").max(120,"Max 120 chars"),server_ids:zs(ss()).optional().default([])}),Hr=W({name:V().trim().min(1,"Name is required").max(120,"Max 120 chars")}),Ur=W({server_ids:zs(ss()).min(1,"Pick at least one server")});function _s({status:s}){const t=s==="ready"?"default":s==="provisioning"?"secondary":s==="failed"?"destructive":"outline";return e.jsx(Fe,{variant:t,className:"capitalize",children:s||"unknown"})}function Re(s,t=12){return!s||s.length<=t*2+3?s:`${s.slice(0,t)}…${s.slice(-t)}`}function Is(s){const t=s.ip||s.ip_address,a=s.hostname||t||s.id,n=s.role?` · ${s.role}`:"";return`${a}${n}`}const Br=()=>{const[s,t]=c.useState(!0),[a,n]=c.useState([]),[m,u]=c.useState([]),[f,j]=c.useState(null),[N,g]=c.useState(""),[k,E]=c.useState(!1),[_,S]=c.useState(null),[L,T]=c.useState(null);async function F(){t(!0),j(null);try{const[r,I]=await Promise.all([z.get("/api/v1/node-pools?include=servers"),z.get("/api/v1/servers")]);if(n(r||[]),u(I||[]),L){const Y=(r||[]).find(ge=>ge.id===L.id)||null;T(Y)}if(_){const Y=(r||[]).find(ge=>ge.id===_.id)||null;S(Y)}}catch(r){console.error(r);const I=r instanceof J?r.message:"Failed to load node pools or servers";j(I)}finally{t(!1)}}c.useEffect(()=>{F()},[]);const l=c.useMemo(()=>{const r=N.trim().toLowerCase();return r?a.filter(I=>I.name.toLowerCase().includes(r)||(I.servers||[]).some(Y=>(Y.hostname||"").toLowerCase().includes(r)||(Y.ip||Y.ip_address||"").toLowerCase().includes(r)||(Y.role||"").toLowerCase().includes(r))):a},[a,N]);async function d(r){confirm("Delete this node pool? This cannot be undone.")&&(await z.delete(`/api/v1/node-pools/${r}`),await F())}const o=q({resolver:G(Vr),defaultValues:{name:"",server_ids:[]}}),p=async r=>{const I={name:r.name.trim()};r.server_ids&&r.server_ids.length>0&&(I.server_ids=r.server_ids),await z.post("/api/v1/node-pools",I),E(!1),o.reset({name:"",server_ids:[]}),await F()},A=q({resolver:G(Hr),defaultValues:{name:""}});function H(r){S(r),A.reset({name:r.name})}const R=async r=>{_&&(await z.patch(`/api/v1/node-pools/${_.id}`,{name:r.name.trim()}),S(null),await F())},X=q({resolver:G(Ur),defaultValues:{server_ids:[]}});function U(r){T(r),X.reset({server_ids:[]})}const we=async r=>{L&&(await z.post(`/api/v1/node-pools/${L.id}/servers`,{server_ids:r.server_ids}),X.reset({server_ids:[]}),await F())};async function xe(r){L&&confirm("Detach this server from the pool?")&&(await z.delete(`/api/v1/node-pools/${L.id}/servers/${r}`),await F())}const i=c.useMemo(()=>{if(!L)return[];const r=new Set((L.servers||[]).map(I=>I.id));return m.filter(I=>!r.has(I.id))},[L,m]);return s?e.jsx("div",{className:"p-6",children:"Loading node pools…"}):f?e.jsx("div",{className:"p-6 text-red-500",children:f}):e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[e.jsx("h1",{className:"mb-4 text-2xl font-bold",children:"Node Pools"}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("div",{className:"relative",children:[e.jsx(Rs,{className:"absolute left-2 top-2.5 h-4 w-4 opacity-60"}),e.jsx(D,{value:N,onChange:r=>g(r.target.value),placeholder:"Search pools or servers…",className:"pl-8 w-72"})]}),e.jsxs(h,{variant:"outline",onClick:F,children:[e.jsx(Vs,{className:"h-4 w-4 mr-2"})," Refresh"]}),e.jsxs(oe,{open:k,onOpenChange:E,children:[e.jsx(We,{asChild:!0,children:e.jsxs(h,{onClick:()=>E(!0),children:[e.jsx(Ge,{className:"h-4 w-4 mr-2"})," Create Pool"]})}),e.jsxs(le,{className:"sm:max-w-lg",children:[e.jsx(de,{children:e.jsx(me,{children:"Create node pool"})}),e.jsx(K,{...o,children:e.jsxs("form",{onSubmit:o.handleSubmit(p),className:"space-y-4",children:[e.jsx(v,{control:o.control,name:"name",render:({field:r})=>e.jsxs(b,{children:[e.jsx(w,{children:"Name"}),e.jsx(C,{children:e.jsx(D,{placeholder:"pool-workers-a",...r})}),e.jsx(y,{})]})}),e.jsx(v,{control:o.control,name:"server_ids",render:({field:r})=>e.jsxs(b,{children:[e.jsx(w,{children:"Initial servers (optional)"}),e.jsxs("div",{className:"max-h-56 overflow-auto rounded-xl border p-2 space-y-2",children:[m.length===0&&e.jsx("div",{className:"text-sm text-muted-foreground p-2",children:"No servers available"}),m.map(I=>{const Y=r.value?.includes(I.id)||!1;return e.jsxs("label",{className:"flex items-start gap-2 p-1 rounded hover:bg-accent cursor-pointer",children:[e.jsx(ks,{checked:Y,onCheckedChange:ge=>{const pe=new Set(r.value||[]);ge===!0?pe.add(I.id):pe.delete(I.id),r.onChange(Array.from(pe))}}),e.jsxs("div",{className:"leading-tight",children:[e.jsx("div",{className:"font-medium text-sm",children:Is(I)}),e.jsx("div",{className:"text-xs text-muted-foreground",children:Re(I.id,8)})]})]},I.id)})]}),e.jsx(y,{})]})}),e.jsxs(ce,{className:"gap-2",children:[e.jsx(h,{type:"button",variant:"outline",onClick:()=>E(!1),children:"Cancel"}),e.jsx(h,{type:"submit",disabled:o.formState.isSubmitting,children:o.formState.isSubmitting?"Creating…":"Create"})]})]})})]})]})]})]}),e.jsx("div",{className:"rounded-2xl border bg-background shadow-sm overflow-hidden",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs(Ue,{children:[e.jsx(Be,{children:e.jsxs(te,{children:[e.jsx(P,{children:"Name"}),e.jsx(P,{children:"Servers"}),e.jsx(P,{children:"Annotations"}),e.jsx(P,{children:"Labels"}),e.jsx(P,{children:"Taints"}),e.jsx(P,{className:"w-[180px] text-right",children:"Actions"})]})}),e.jsxs(qe,{children:[l.map(r=>e.jsxs(te,{children:[e.jsx($,{className:"font-medium",children:r.name}),e.jsxs($,{children:[e.jsxs("div",{className:"flex flex-wrap gap-2",children:[(r.servers||[]).slice(0,6).map(I=>e.jsxs(Fe,{variant:"secondary",className:"gap-1",children:[e.jsx(Fs,{className:"h-3 w-3"})," ",I.hostname||I.ip||I.ip_address||Re(I.id,6),I.status&&e.jsx("span",{className:"ml-1",children:e.jsx(_s,{status:I.status})})]},I.id)),(r.servers||[]).length===0&&e.jsx("span",{className:"text-muted-foreground",children:"No servers"}),(r.servers||[]).length>6&&e.jsxs("span",{className:"text-muted-foreground",children:["+",(r.servers||[]).length-6," more"]})]}),e.jsxs(h,{variant:"outline",size:"sm",onClick:()=>U(r),children:[e.jsx(Ce,{className:"h-4 w-4 mr-2"})," Manage servers"]})]}),e.jsxs($,{children:[e.jsx("div",{className:"flex flex-wrap gap-2",children:"Annotations"}),e.jsxs(h,{variant:"outline",size:"sm",children:[e.jsx(Ce,{className:"h-4 w-4 mr-2"})," Manage Annotations"]})]}),e.jsxs($,{children:[e.jsx("div",{className:"flex flex-wrap gap-2",children:"Labels"}),e.jsxs(h,{variant:"outline",size:"sm",children:[e.jsx(Ce,{className:"h-4 w-4 mr-2"})," Manage Labels"]})]}),e.jsxs($,{children:[e.jsx("div",{className:"flex flex-wrap gap-2",children:"Taints"}),e.jsxs(h,{variant:"outline",size:"sm",children:[e.jsx(Ce,{className:"h-4 w-4 mr-2"})," Manage Taints"]})]}),e.jsx($,{children:e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsxs(h,{variant:"outline",size:"sm",onClick:()=>H(r),children:[e.jsx(as,{className:"h-4 w-4 mr-2"})," Edit"]}),e.jsxs($e,{children:[e.jsx(Me,{asChild:!0,children:e.jsxs(h,{variant:"destructive",size:"sm",children:[e.jsx(Se,{className:"h-4 w-4 mr-2"})," Delete"]})}),e.jsx(Pe,{align:"end",children:e.jsx(ie,{onClick:()=>d(r.id),children:"Confirm delete"})})]})]})})]},r.id)),l.length===0&&e.jsx(te,{children:e.jsx($,{colSpan:3,className:"text-center text-muted-foreground py-10",children:"No node pools match your search."})})]})]})})}),e.jsx(oe,{open:!!_,onOpenChange:r=>!r&&S(null),children:e.jsxs(le,{className:"sm:max-w-md",children:[e.jsx(de,{children:e.jsx(me,{children:"Edit node pool"})}),e.jsx(K,{...A,children:e.jsxs("form",{onSubmit:A.handleSubmit(R),className:"space-y-4",children:[e.jsx(v,{control:A.control,name:"name",render:({field:r})=>e.jsxs(b,{children:[e.jsx(w,{children:"Name"}),e.jsx(C,{children:e.jsx(D,{placeholder:"pool-workers-a",...r})}),e.jsx(y,{})]})}),e.jsxs(ce,{className:"gap-2",children:[e.jsx(h,{type:"button",variant:"outline",onClick:()=>S(null),children:"Cancel"}),e.jsx(h,{type:"submit",disabled:A.formState.isSubmitting,children:A.formState.isSubmitting?"Saving…":"Save changes"})]})]})})]})}),e.jsx(oe,{open:!!L,onOpenChange:r=>!r&&T(null),children:e.jsxs(le,{className:"sm:max-w-2xl",children:[e.jsx(de,{children:e.jsxs(me,{children:["Manage servers for ",e.jsx("span",{className:"font-mono",children:L?.name})]})}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"text-sm font-medium",children:"Attached servers"}),e.jsx("div",{className:"rounded-xl border overflow-hidden",children:e.jsxs(Ue,{children:[e.jsx(Be,{children:e.jsxs(te,{children:[e.jsx(P,{children:"Server"}),e.jsx(P,{children:"IP"}),e.jsx(P,{children:"Role"}),e.jsx(P,{children:"Status"}),e.jsx(P,{className:"w-[120px] text-right",children:"Detach"})]})}),e.jsxs(qe,{children:[(L?.servers||[]).map(r=>e.jsxs(te,{children:[e.jsx($,{className:"font-medium",children:r.hostname||Re(r.id,8)}),e.jsx($,{children:e.jsx("code",{className:"font-mono text-sm",children:r.ip||r.ip_address||"—"})}),e.jsx($,{className:"capitalize",children:r.role||"—"}),e.jsx($,{children:e.jsx(_s,{status:r.status})}),e.jsx($,{children:e.jsx("div",{className:"flex justify-end",children:e.jsxs(h,{variant:"destructive",size:"sm",onClick:()=>xe(r.id),children:[e.jsx(ja,{className:"h-4 w-4 mr-2"})," Detach"]})})})]},r.id)),(L?.servers||[]).length===0&&e.jsx(te,{children:e.jsx($,{colSpan:5,className:"text-center text-muted-foreground py-8",children:"No servers attached yet."})})]})]})})]}),e.jsx("div",{className:"pt-4",children:e.jsx(K,{...X,children:e.jsxs("form",{onSubmit:X.handleSubmit(we),className:"space-y-3",children:[e.jsx(v,{control:X.control,name:"server_ids",render:({field:r})=>e.jsxs(b,{children:[e.jsx(w,{children:"Attach more servers"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-2 max-h-64 overflow-auto rounded-xl border p-2",children:[i.length===0&&e.jsx("div",{className:"text-sm text-muted-foreground p-2",children:"No more servers available to attach"}),i.map(I=>{const Y=r.value?.includes(I.id)||!1;return e.jsxs("label",{className:"flex items-start gap-2 p-1 rounded hover:bg-accent cursor-pointer",children:[e.jsx(ks,{checked:Y,onCheckedChange:ge=>{const pe=new Set(r.value||[]);ge===!0?pe.add(I.id):pe.delete(I.id),r.onChange(Array.from(pe))}}),e.jsxs("div",{className:"leading-tight",children:[e.jsx("div",{className:"font-medium text-sm",children:Is(I)}),e.jsx("div",{className:"text-xs text-muted-foreground",children:Re(I.id,8)})]})]},I.id)})]}),e.jsx(y,{})]})}),e.jsx(ce,{className:"gap-2",children:e.jsxs(h,{type:"submit",disabled:X.formState.isSubmitting,children:[e.jsx(Ce,{className:"h-4 w-4 mr-2"})," ",X.formState.isSubmitting?"Attaching…":"Attach selected"]})})]})})})]})})]})};function qr(){return e.jsxs(fa,{children:[e.jsx(M,{path:"/",element:e.jsx(ns,{to:"/auth/login",replace:!0})}),e.jsxs(M,{path:"/auth",children:[e.jsx(M,{path:"login",element:e.jsx(vr,{})}),e.jsx(M,{path:"register",element:e.jsx(yr,{})}),e.jsx(M,{path:"forgot",element:e.jsx(gr,{})}),e.jsx(M,{path:"reset",element:e.jsx(Sr,{})}),e.jsx(M,{path:"verify",element:e.jsx(Cr,{})})]}),e.jsx(M,{element:e.jsx(rr,{}),children:e.jsxs(M,{element:e.jsx(ar,{}),children:[e.jsx(M,{element:e.jsx(nr,{}),children:e.jsx(M,{path:"/admin",children:e.jsx(M,{path:"users",element:e.jsx(jr,{})})})}),e.jsxs(M,{path:"/core",children:[e.jsx(M,{path:"nodepools",element:e.jsx(Br,{})}),e.jsx(M,{path:"servers",element:e.jsx(Er,{})})]}),e.jsx(M,{path:"/security",children:e.jsx(M,{path:"ssh",element:e.jsx(Tr,{})})}),e.jsxs(M,{path:"/settings",children:[e.jsx(M,{path:"orgs",element:e.jsx(Rr,{})}),e.jsx(M,{path:"members",element:e.jsx(Pr,{})}),e.jsx(M,{path:"me",element:e.jsx(br,{})})]}),e.jsx(M,{path:"/403",element:e.jsx(Ss,{})}),e.jsx(M,{path:"*",element:e.jsx(Cs,{})})]})}),e.jsx(M,{path:"/403",element:e.jsx(Ss,{})}),e.jsx(M,{path:"*",element:e.jsx(Cs,{})})]})}const Gr=({...s})=>{const{theme:t="system"}=Es();return e.jsx(rt,{theme:t,className:"toaster group",style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)"},...s})};function Kr({children:s,defaultTheme:t="system",storageKey:a="vite-ui-theme"}){return e.jsx(nt,{attribute:"class",defaultTheme:t,enableSystem:!0,storageKey:a,disableTransitionOnChange:!0,children:s})}it.createRoot(document.getElementById("root")).render(e.jsx(c.StrictMode,{children:e.jsx(ga,{children:e.jsxs(Kr,{defaultTheme:"system",storageKey:"dragon-theme",children:[e.jsx(qr,{}),e.jsx(Gr,{richColors:!0,position:"top-right"})]})})})); diff --git a/internal/ui/dist/assets/radix-BnAuhYuH.js b/internal/ui/dist/assets/radix-DRmH1vcw.js similarity index 99% rename from internal/ui/dist/assets/radix-BnAuhYuH.js rename to internal/ui/dist/assets/radix-DRmH1vcw.js index 310af48..2bdc690 100644 --- a/internal/ui/dist/assets/radix-BnAuhYuH.js +++ b/internal/ui/dist/assets/radix-DRmH1vcw.js @@ -1,4 +1,4 @@ -import{r as s,j as l,a as wt,b as an,c as Or,h as yt,d as Et,u as jr,o as kr,s as Lr,f as Fr,e as $r,g as Br,i as Ur,l as Hr,k as Gr,R as ge}from"./vendor-DBKlM1wc.js";function Xt(e,n){if(typeof e=="function")return e(n);e!=null&&(e.current=n)}function Ke(...e){return n=>{let t=!1;const o=e.map(r=>{const a=Xt(r,n);return!t&&typeof a=="function"&&(t=!0),a});if(t)return()=>{for(let r=0;r{const{children:a,...i}=o,c=s.Children.toArray(a),u=c.find(Wr);if(u){const d=u.props.children,f=c.map(p=>p===u?s.Children.count(d)>1?s.Children.only(null):s.isValidElement(d)?d.props.children:null:p);return l.jsx(n,{...i,ref:r,children:s.isValidElement(d)?s.cloneElement(d,void 0,f):null})}return l.jsx(n,{...i,ref:r,children:a})});return t.displayName=`${e}.Slot`,t}var Ic=xe("Slot");function Kr(e){const n=s.forwardRef((t,o)=>{const{children:r,...a}=t;if(s.isValidElement(r)){const i=zr(r),c=Vr(a,r.props);return r.type!==s.Fragment&&(c.ref=o?Ke(o,i):i),s.cloneElement(r,c)}return s.Children.count(r)>1?s.Children.only(null):null});return n.displayName=`${e}.SlotClone`,n}var cn=Symbol("radix.slottable");function ln(e){const n=({children:t})=>l.jsx(l.Fragment,{children:t});return n.displayName=`${e}.Slottable`,n.__radixId=cn,n}function Wr(e){return s.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===cn}function Vr(e,n){const t={...n};for(const o in n){const r=e[o],a=n[o];/^on[A-Z]/.test(o)?r&&a?t[o]=(...c)=>{const u=a(...c);return r(...c),u}:r&&(t[o]=r):o==="style"?t[o]={...r,...a}:o==="className"&&(t[o]=[r,a].filter(Boolean).join(" "))}return{...e,...t}}function zr(e){let n=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,t=n&&"isReactWarning"in n&&n.isReactWarning;return t?e.ref:(n=Object.getOwnPropertyDescriptor(e,"ref")?.get,t=n&&"isReactWarning"in n&&n.isReactWarning,t?e.props.ref:e.props.ref||e.ref)}var Yr=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],_=Yr.reduce((e,n)=>{const t=xe(`Primitive.${n}`),o=s.forwardRef((r,a)=>{const{asChild:i,...c}=r,u=i?t:n;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(u,{...c,ref:a})});return o.displayName=`Primitive.${n}`,{...e,[n]:o}},{});function un(e,n){e&&wt.flushSync(()=>e.dispatchEvent(n))}var Xr="Separator",qt="horizontal",qr=["horizontal","vertical"],dn=s.forwardRef((e,n)=>{const{decorative:t,orientation:o=qt,...r}=e,a=Zr(o)?o:qt,c=t?{role:"none"}:{"aria-orientation":a==="vertical"?a:void 0,role:"separator"};return l.jsx(_.div,{"data-orientation":a,...c,...r,ref:n})});dn.displayName=Xr;function Zr(e){return qr.includes(e)}var Mc=dn;function E(e,n,{checkForDefaultPrevented:t=!0}={}){return function(r){if(e?.(r),t===!1||!r.defaultPrevented)return n?.(r)}}function Jr(e,n){const t=s.createContext(n),o=a=>{const{children:i,...c}=a,u=s.useMemo(()=>c,Object.values(c));return l.jsx(t.Provider,{value:u,children:i})};o.displayName=e+"Provider";function r(a){const i=s.useContext(t);if(i)return i;if(n!==void 0)return n;throw new Error(`\`${a}\` must be used within \`${e}\``)}return[o,r]}function se(e,n=[]){let t=[];function o(a,i){const c=s.createContext(i),u=t.length;t=[...t,i];const d=p=>{const{scope:v,children:x,...C}=p,m=v?.[e]?.[u]||c,h=s.useMemo(()=>C,Object.values(C));return l.jsx(m.Provider,{value:h,children:x})};d.displayName=a+"Provider";function f(p,v){const x=v?.[e]?.[u]||c,C=s.useContext(x);if(C)return C;if(i!==void 0)return i;throw new Error(`\`${p}\` must be used within \`${a}\``)}return[d,f]}const r=()=>{const a=t.map(i=>s.createContext(i));return function(c){const u=c?.[e]||a;return s.useMemo(()=>({[`__scope${e}`]:{...c,[e]:u}}),[c,u])}};return r.scopeName=e,[o,Qr(r,...n)]}function Qr(...e){const n=e[0];if(e.length===1)return n;const t=()=>{const o=e.map(r=>({useScope:r(),scopeName:r.scopeName}));return function(a){const i=o.reduce((c,{useScope:u,scopeName:d})=>{const p=u(a)[`__scope${d}`];return{...c,...p}},{});return s.useMemo(()=>({[`__scope${n.scopeName}`]:i}),[i])}};return t.scopeName=n.scopeName,t}var K=globalThis?.document?s.useLayoutEffect:()=>{},es=an[" useId ".trim().toString()]||(()=>{}),ts=0;function re(e){const[n,t]=s.useState(es());return K(()=>{t(o=>o??String(ts++))},[e]),e||(n?`radix-${n}`:"")}var ns=an[" useInsertionEffect ".trim().toString()]||K;function pe({prop:e,defaultProp:n,onChange:t=()=>{},caller:o}){const[r,a,i]=os({defaultProp:n,onChange:t}),c=e!==void 0,u=c?e:r;{const f=s.useRef(e!==void 0);s.useEffect(()=>{const p=f.current;p!==c&&console.warn(`${o} is changing from ${p?"controlled":"uncontrolled"} to ${c?"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.`),f.current=c},[c,o])}const d=s.useCallback(f=>{if(c){const p=rs(f)?f(e):f;p!==e&&i.current?.(p)}else a(f)},[c,e,a,i]);return[u,d]}function os({defaultProp:e,onChange:n}){const[t,o]=s.useState(e),r=s.useRef(t),a=s.useRef(n);return ns(()=>{a.current=n},[n]),s.useEffect(()=>{r.current!==t&&(a.current?.(t),r.current=t)},[t,r]),[t,o,a]}function rs(e){return typeof e=="function"}function ie(e){const n=s.useRef(e);return s.useEffect(()=>{n.current=e}),s.useMemo(()=>(...t)=>n.current?.(...t),[])}function ss(e,n=globalThis?.document){const t=ie(e);s.useEffect(()=>{const o=r=>{r.key==="Escape"&&t(r)};return n.addEventListener("keydown",o,{capture:!0}),()=>n.removeEventListener("keydown",o,{capture:!0})},[t,n])}var as="DismissableLayer",ut="dismissableLayer.update",is="dismissableLayer.pointerDownOutside",cs="dismissableLayer.focusOutside",Zt,fn=s.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),De=s.forwardRef((e,n)=>{const{disableOutsidePointerEvents:t=!1,onEscapeKeyDown:o,onPointerDownOutside:r,onFocusOutside:a,onInteractOutside:i,onDismiss:c,...u}=e,d=s.useContext(fn),[f,p]=s.useState(null),v=f?.ownerDocument??globalThis?.document,[,x]=s.useState({}),C=M(n,P=>p(P)),m=Array.from(d.layers),[h]=[...d.layersWithOutsidePointerEventsDisabled].slice(-1),w=m.indexOf(h),g=f?m.indexOf(f):-1,y=d.layersWithOutsidePointerEventsDisabled.size>0,S=g>=w,T=ds(P=>{const I=P.target,F=[...d.branches].some(L=>L.contains(I));!S||F||(r?.(P),i?.(P),P.defaultPrevented||c?.())},v),A=fs(P=>{const I=P.target;[...d.branches].some(L=>L.contains(I))||(a?.(P),i?.(P),P.defaultPrevented||c?.())},v);return ss(P=>{g===d.layers.size-1&&(o?.(P),!P.defaultPrevented&&c&&(P.preventDefault(),c()))},v),s.useEffect(()=>{if(f)return t&&(d.layersWithOutsidePointerEventsDisabled.size===0&&(Zt=v.body.style.pointerEvents,v.body.style.pointerEvents="none"),d.layersWithOutsidePointerEventsDisabled.add(f)),d.layers.add(f),Jt(),()=>{t&&d.layersWithOutsidePointerEventsDisabled.size===1&&(v.body.style.pointerEvents=Zt)}},[f,v,t,d]),s.useEffect(()=>()=>{f&&(d.layers.delete(f),d.layersWithOutsidePointerEventsDisabled.delete(f),Jt())},[f,d]),s.useEffect(()=>{const P=()=>x({});return document.addEventListener(ut,P),()=>document.removeEventListener(ut,P)},[]),l.jsx(_.div,{...u,ref:C,style:{pointerEvents:y?S?"auto":"none":void 0,...e.style},onFocusCapture:E(e.onFocusCapture,A.onFocusCapture),onBlurCapture:E(e.onBlurCapture,A.onBlurCapture),onPointerDownCapture:E(e.onPointerDownCapture,T.onPointerDownCapture)})});De.displayName=as;var ls="DismissableLayerBranch",us=s.forwardRef((e,n)=>{const t=s.useContext(fn),o=s.useRef(null),r=M(n,o);return s.useEffect(()=>{const a=o.current;if(a)return t.branches.add(a),()=>{t.branches.delete(a)}},[t.branches]),l.jsx(_.div,{...e,ref:r})});us.displayName=ls;function ds(e,n=globalThis?.document){const t=ie(e),o=s.useRef(!1),r=s.useRef(()=>{});return s.useEffect(()=>{const a=c=>{if(c.target&&!o.current){let u=function(){pn(is,t,d,{discrete:!0})};const d={originalEvent:c};c.pointerType==="touch"?(n.removeEventListener("click",r.current),r.current=u,n.addEventListener("click",r.current,{once:!0})):u()}else n.removeEventListener("click",r.current);o.current=!1},i=window.setTimeout(()=>{n.addEventListener("pointerdown",a)},0);return()=>{window.clearTimeout(i),n.removeEventListener("pointerdown",a),n.removeEventListener("click",r.current)}},[n,t]),{onPointerDownCapture:()=>o.current=!0}}function fs(e,n=globalThis?.document){const t=ie(e),o=s.useRef(!1);return s.useEffect(()=>{const r=a=>{a.target&&!o.current&&pn(cs,t,{originalEvent:a},{discrete:!1})};return n.addEventListener("focusin",r),()=>n.removeEventListener("focusin",r)},[n,t]),{onFocusCapture:()=>o.current=!0,onBlurCapture:()=>o.current=!1}}function Jt(){const e=new CustomEvent(ut);document.dispatchEvent(e)}function pn(e,n,t,{discrete:o}){const r=t.originalEvent.target,a=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:t});n&&r.addEventListener(e,n,{once:!0}),o?un(r,a):r.dispatchEvent(a)}var at="focusScope.autoFocusOnMount",it="focusScope.autoFocusOnUnmount",Qt={bubbles:!1,cancelable:!0},ps="FocusScope",We=s.forwardRef((e,n)=>{const{loop:t=!1,trapped:o=!1,onMountAutoFocus:r,onUnmountAutoFocus:a,...i}=e,[c,u]=s.useState(null),d=ie(r),f=ie(a),p=s.useRef(null),v=M(n,m=>u(m)),x=s.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;s.useEffect(()=>{if(o){let m=function(y){if(x.paused||!c)return;const S=y.target;c.contains(S)?p.current=S:de(p.current,{select:!0})},h=function(y){if(x.paused||!c)return;const S=y.relatedTarget;S!==null&&(c.contains(S)||de(p.current,{select:!0}))},w=function(y){if(document.activeElement===document.body)for(const T of y)T.removedNodes.length>0&&de(c)};document.addEventListener("focusin",m),document.addEventListener("focusout",h);const g=new MutationObserver(w);return c&&g.observe(c,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",m),document.removeEventListener("focusout",h),g.disconnect()}}},[o,c,x.paused]),s.useEffect(()=>{if(c){tn.add(x);const m=document.activeElement;if(!c.contains(m)){const w=new CustomEvent(at,Qt);c.addEventListener(at,d),c.dispatchEvent(w),w.defaultPrevented||(ms(Cs(mn(c)),{select:!0}),document.activeElement===m&&de(c))}return()=>{c.removeEventListener(at,d),setTimeout(()=>{const w=new CustomEvent(it,Qt);c.addEventListener(it,f),c.dispatchEvent(w),w.defaultPrevented||de(m??document.body,{select:!0}),c.removeEventListener(it,f),tn.remove(x)},0)}}},[c,d,f,x]);const C=s.useCallback(m=>{if(!t&&!o||x.paused)return;const h=m.key==="Tab"&&!m.altKey&&!m.ctrlKey&&!m.metaKey,w=document.activeElement;if(h&&w){const g=m.currentTarget,[y,S]=vs(g);y&&S?!m.shiftKey&&w===S?(m.preventDefault(),t&&de(y,{select:!0})):m.shiftKey&&w===y&&(m.preventDefault(),t&&de(S,{select:!0})):w===g&&m.preventDefault()}},[t,o,x.paused]);return l.jsx(_.div,{tabIndex:-1,...i,ref:v,onKeyDown:C})});We.displayName=ps;function ms(e,{select:n=!1}={}){const t=document.activeElement;for(const o of e)if(de(o,{select:n}),document.activeElement!==t)return}function vs(e){const n=mn(e),t=en(n,e),o=en(n.reverse(),e);return[t,o]}function mn(e){const n=[],t=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const r=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||r?NodeFilter.FILTER_SKIP:o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;t.nextNode();)n.push(t.currentNode);return n}function en(e,n){for(const t of e)if(!hs(t,{upTo:n}))return t}function hs(e,{upTo:n}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(n!==void 0&&e===n)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function gs(e){return e instanceof HTMLInputElement&&"select"in e}function de(e,{select:n=!1}={}){if(e&&e.focus){const t=document.activeElement;e.focus({preventScroll:!0}),e!==t&&gs(e)&&n&&e.select()}}var tn=xs();function xs(){let e=[];return{add(n){const t=e[0];n!==t&&t?.pause(),e=nn(e,n),e.unshift(n)},remove(n){e=nn(e,n),e[0]?.resume()}}}function nn(e,n){const t=[...e],o=t.indexOf(n);return o!==-1&&t.splice(o,1),t}function Cs(e){return e.filter(n=>n.tagName!=="A")}var ws="Portal",Oe=s.forwardRef((e,n)=>{const{container:t,...o}=e,[r,a]=s.useState(!1);K(()=>a(!0),[]);const i=t||r&&globalThis?.document?.body;return i?Or.createPortal(l.jsx(_.div,{...o,ref:n}),i):null});Oe.displayName=ws;function ys(e,n){return s.useReducer((t,o)=>n[t][o]??t,e)}var te=e=>{const{present:n,children:t}=e,o=Es(n),r=typeof t=="function"?t({present:o.isPresent}):s.Children.only(t),a=M(o.ref,bs(r));return typeof t=="function"||o.isPresent?s.cloneElement(r,{ref:a}):null};te.displayName="Presence";function Es(e){const[n,t]=s.useState(),o=s.useRef(null),r=s.useRef(e),a=s.useRef("none"),i=e?"mounted":"unmounted",[c,u]=ys(i,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return s.useEffect(()=>{const d=$e(o.current);a.current=c==="mounted"?d:"none"},[c]),K(()=>{const d=o.current,f=r.current;if(f!==e){const v=a.current,x=$e(d);e?u("MOUNT"):x==="none"||d?.display==="none"?u("UNMOUNT"):u(f&&v!==x?"ANIMATION_OUT":"UNMOUNT"),r.current=e}},[e,u]),K(()=>{if(n){let d;const f=n.ownerDocument.defaultView??window,p=x=>{const m=$e(o.current).includes(CSS.escape(x.animationName));if(x.target===n&&m&&(u("ANIMATION_END"),!r.current)){const h=n.style.animationFillMode;n.style.animationFillMode="forwards",d=f.setTimeout(()=>{n.style.animationFillMode==="forwards"&&(n.style.animationFillMode=h)})}},v=x=>{x.target===n&&(a.current=$e(o.current))};return n.addEventListener("animationstart",v),n.addEventListener("animationcancel",p),n.addEventListener("animationend",p),()=>{f.clearTimeout(d),n.removeEventListener("animationstart",v),n.removeEventListener("animationcancel",p),n.removeEventListener("animationend",p)}}else u("ANIMATION_END")},[n,u]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:s.useCallback(d=>{o.current=d?getComputedStyle(d):null,t(d)},[])}}function $e(e){return e?.animationName||"none"}function bs(e){let n=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,t=n&&"isReactWarning"in n&&n.isReactWarning;return t?e.ref:(n=Object.getOwnPropertyDescriptor(e,"ref")?.get,t=n&&"isReactWarning"in n&&n.isReactWarning,t?e.props.ref:e.props.ref||e.ref)}var ct=0;function bt(){s.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??on()),document.body.insertAdjacentElement("beforeend",e[1]??on()),ct++,()=>{ct===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(n=>n.remove()),ct--}},[])}function on(){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 Ve="Dialog",[vn,hn]=se(Ve),[Ss,ae]=vn(Ve),gn=e=>{const{__scopeDialog:n,children:t,open:o,defaultOpen:r,onOpenChange:a,modal:i=!0}=e,c=s.useRef(null),u=s.useRef(null),[d,f]=pe({prop:o,defaultProp:r??!1,onChange:a,caller:Ve});return l.jsx(Ss,{scope:n,triggerRef:c,contentRef:u,contentId:re(),titleId:re(),descriptionId:re(),open:d,onOpenChange:f,onOpenToggle:s.useCallback(()=>f(p=>!p),[f]),modal:i,children:t})};gn.displayName=Ve;var xn="DialogTrigger",Cn=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=ae(xn,t),a=M(n,r.triggerRef);return l.jsx(_.button,{type:"button","aria-haspopup":"dialog","aria-expanded":r.open,"aria-controls":r.contentId,"data-state":Pt(r.open),...o,ref:a,onClick:E(e.onClick,r.onOpenToggle)})});Cn.displayName=xn;var St="DialogPortal",[Rs,wn]=vn(St,{forceMount:void 0}),yn=e=>{const{__scopeDialog:n,forceMount:t,children:o,container:r}=e,a=ae(St,n);return l.jsx(Rs,{scope:n,forceMount:t,children:s.Children.map(o,i=>l.jsx(te,{present:t||a.open,children:l.jsx(Oe,{asChild:!0,container:r,children:i})}))})};yn.displayName=St;var Be="DialogOverlay",En=s.forwardRef((e,n)=>{const t=wn(Be,e.__scopeDialog),{forceMount:o=t.forceMount,...r}=e,a=ae(Be,e.__scopeDialog);return a.modal?l.jsx(te,{present:o||a.open,children:l.jsx(_s,{...r,ref:n})}):null});En.displayName=Be;var Ps=xe("DialogOverlay.RemoveScroll"),_s=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=ae(Be,t);return l.jsx(Et,{as:Ps,allowPinchZoom:!0,shards:[r.contentRef],children:l.jsx(_.div,{"data-state":Pt(r.open),...o,ref:n,style:{pointerEvents:"auto",...o.style}})})}),Ce="DialogContent",bn=s.forwardRef((e,n)=>{const t=wn(Ce,e.__scopeDialog),{forceMount:o=t.forceMount,...r}=e,a=ae(Ce,e.__scopeDialog);return l.jsx(te,{present:o||a.open,children:a.modal?l.jsx(Ts,{...r,ref:n}):l.jsx(Is,{...r,ref:n})})});bn.displayName=Ce;var Ts=s.forwardRef((e,n)=>{const t=ae(Ce,e.__scopeDialog),o=s.useRef(null),r=M(n,t.contentRef,o);return s.useEffect(()=>{const a=o.current;if(a)return yt(a)},[]),l.jsx(Sn,{...e,ref:r,trapFocus:t.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:E(e.onCloseAutoFocus,a=>{a.preventDefault(),t.triggerRef.current?.focus()}),onPointerDownOutside:E(e.onPointerDownOutside,a=>{const i=a.detail.originalEvent,c=i.button===0&&i.ctrlKey===!0;(i.button===2||c)&&a.preventDefault()}),onFocusOutside:E(e.onFocusOutside,a=>a.preventDefault())})}),Is=s.forwardRef((e,n)=>{const t=ae(Ce,e.__scopeDialog),o=s.useRef(!1),r=s.useRef(!1);return l.jsx(Sn,{...e,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:a=>{e.onCloseAutoFocus?.(a),a.defaultPrevented||(o.current||t.triggerRef.current?.focus(),a.preventDefault()),o.current=!1,r.current=!1},onInteractOutside:a=>{e.onInteractOutside?.(a),a.defaultPrevented||(o.current=!0,a.detail.originalEvent.type==="pointerdown"&&(r.current=!0));const i=a.target;t.triggerRef.current?.contains(i)&&a.preventDefault(),a.detail.originalEvent.type==="focusin"&&r.current&&a.preventDefault()}})}),Sn=s.forwardRef((e,n)=>{const{__scopeDialog:t,trapFocus:o,onOpenAutoFocus:r,onCloseAutoFocus:a,...i}=e,c=ae(Ce,t),u=s.useRef(null),d=M(n,u);return bt(),l.jsxs(l.Fragment,{children:[l.jsx(We,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:r,onUnmountAutoFocus:a,children:l.jsx(De,{role:"dialog",id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":Pt(c.open),...i,ref:d,onDismiss:()=>c.onOpenChange(!1)})}),l.jsxs(l.Fragment,{children:[l.jsx(As,{titleId:c.titleId}),l.jsx(Ds,{contentRef:u,descriptionId:c.descriptionId})]})]})}),Rt="DialogTitle",Rn=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=ae(Rt,t);return l.jsx(_.h2,{id:r.titleId,...o,ref:n})});Rn.displayName=Rt;var Pn="DialogDescription",_n=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=ae(Pn,t);return l.jsx(_.p,{id:r.descriptionId,...o,ref:n})});_n.displayName=Pn;var Tn="DialogClose",In=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=ae(Tn,t);return l.jsx(_.button,{type:"button",...o,ref:n,onClick:E(e.onClick,()=>r.onOpenChange(!1))})});In.displayName=Tn;function Pt(e){return e?"open":"closed"}var Mn="DialogTitleWarning",[Ms,An]=Jr(Mn,{contentName:Ce,titleName:Rt,docsSlug:"dialog"}),As=({titleId:e})=>{const n=An(Mn),t=`\`${n.contentName}\` requires a \`${n.titleName}\` for the component to be accessible for screen reader users. +import{r as s,j as l,a as wt,b as an,c as Or,h as yt,d as Et,u as jr,o as kr,s as Lr,f as Fr,e as $r,g as Br,i as Ur,l as Hr,k as Gr,R as ge}from"./vendor-DvippHRz.js";function Xt(e,n){if(typeof e=="function")return e(n);e!=null&&(e.current=n)}function Ke(...e){return n=>{let t=!1;const o=e.map(r=>{const a=Xt(r,n);return!t&&typeof a=="function"&&(t=!0),a});if(t)return()=>{for(let r=0;r{const{children:a,...i}=o,c=s.Children.toArray(a),u=c.find(Wr);if(u){const d=u.props.children,f=c.map(p=>p===u?s.Children.count(d)>1?s.Children.only(null):s.isValidElement(d)?d.props.children:null:p);return l.jsx(n,{...i,ref:r,children:s.isValidElement(d)?s.cloneElement(d,void 0,f):null})}return l.jsx(n,{...i,ref:r,children:a})});return t.displayName=`${e}.Slot`,t}var Ic=xe("Slot");function Kr(e){const n=s.forwardRef((t,o)=>{const{children:r,...a}=t;if(s.isValidElement(r)){const i=zr(r),c=Vr(a,r.props);return r.type!==s.Fragment&&(c.ref=o?Ke(o,i):i),s.cloneElement(r,c)}return s.Children.count(r)>1?s.Children.only(null):null});return n.displayName=`${e}.SlotClone`,n}var cn=Symbol("radix.slottable");function ln(e){const n=({children:t})=>l.jsx(l.Fragment,{children:t});return n.displayName=`${e}.Slottable`,n.__radixId=cn,n}function Wr(e){return s.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===cn}function Vr(e,n){const t={...n};for(const o in n){const r=e[o],a=n[o];/^on[A-Z]/.test(o)?r&&a?t[o]=(...c)=>{const u=a(...c);return r(...c),u}:r&&(t[o]=r):o==="style"?t[o]={...r,...a}:o==="className"&&(t[o]=[r,a].filter(Boolean).join(" "))}return{...e,...t}}function zr(e){let n=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,t=n&&"isReactWarning"in n&&n.isReactWarning;return t?e.ref:(n=Object.getOwnPropertyDescriptor(e,"ref")?.get,t=n&&"isReactWarning"in n&&n.isReactWarning,t?e.props.ref:e.props.ref||e.ref)}var Yr=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],_=Yr.reduce((e,n)=>{const t=xe(`Primitive.${n}`),o=s.forwardRef((r,a)=>{const{asChild:i,...c}=r,u=i?t:n;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(u,{...c,ref:a})});return o.displayName=`Primitive.${n}`,{...e,[n]:o}},{});function un(e,n){e&&wt.flushSync(()=>e.dispatchEvent(n))}var Xr="Separator",qt="horizontal",qr=["horizontal","vertical"],dn=s.forwardRef((e,n)=>{const{decorative:t,orientation:o=qt,...r}=e,a=Zr(o)?o:qt,c=t?{role:"none"}:{"aria-orientation":a==="vertical"?a:void 0,role:"separator"};return l.jsx(_.div,{"data-orientation":a,...c,...r,ref:n})});dn.displayName=Xr;function Zr(e){return qr.includes(e)}var Mc=dn;function E(e,n,{checkForDefaultPrevented:t=!0}={}){return function(r){if(e?.(r),t===!1||!r.defaultPrevented)return n?.(r)}}function Jr(e,n){const t=s.createContext(n),o=a=>{const{children:i,...c}=a,u=s.useMemo(()=>c,Object.values(c));return l.jsx(t.Provider,{value:u,children:i})};o.displayName=e+"Provider";function r(a){const i=s.useContext(t);if(i)return i;if(n!==void 0)return n;throw new Error(`\`${a}\` must be used within \`${e}\``)}return[o,r]}function se(e,n=[]){let t=[];function o(a,i){const c=s.createContext(i),u=t.length;t=[...t,i];const d=p=>{const{scope:v,children:x,...C}=p,m=v?.[e]?.[u]||c,h=s.useMemo(()=>C,Object.values(C));return l.jsx(m.Provider,{value:h,children:x})};d.displayName=a+"Provider";function f(p,v){const x=v?.[e]?.[u]||c,C=s.useContext(x);if(C)return C;if(i!==void 0)return i;throw new Error(`\`${p}\` must be used within \`${a}\``)}return[d,f]}const r=()=>{const a=t.map(i=>s.createContext(i));return function(c){const u=c?.[e]||a;return s.useMemo(()=>({[`__scope${e}`]:{...c,[e]:u}}),[c,u])}};return r.scopeName=e,[o,Qr(r,...n)]}function Qr(...e){const n=e[0];if(e.length===1)return n;const t=()=>{const o=e.map(r=>({useScope:r(),scopeName:r.scopeName}));return function(a){const i=o.reduce((c,{useScope:u,scopeName:d})=>{const p=u(a)[`__scope${d}`];return{...c,...p}},{});return s.useMemo(()=>({[`__scope${n.scopeName}`]:i}),[i])}};return t.scopeName=n.scopeName,t}var K=globalThis?.document?s.useLayoutEffect:()=>{},es=an[" useId ".trim().toString()]||(()=>{}),ts=0;function re(e){const[n,t]=s.useState(es());return K(()=>{t(o=>o??String(ts++))},[e]),e||(n?`radix-${n}`:"")}var ns=an[" useInsertionEffect ".trim().toString()]||K;function pe({prop:e,defaultProp:n,onChange:t=()=>{},caller:o}){const[r,a,i]=os({defaultProp:n,onChange:t}),c=e!==void 0,u=c?e:r;{const f=s.useRef(e!==void 0);s.useEffect(()=>{const p=f.current;p!==c&&console.warn(`${o} is changing from ${p?"controlled":"uncontrolled"} to ${c?"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.`),f.current=c},[c,o])}const d=s.useCallback(f=>{if(c){const p=rs(f)?f(e):f;p!==e&&i.current?.(p)}else a(f)},[c,e,a,i]);return[u,d]}function os({defaultProp:e,onChange:n}){const[t,o]=s.useState(e),r=s.useRef(t),a=s.useRef(n);return ns(()=>{a.current=n},[n]),s.useEffect(()=>{r.current!==t&&(a.current?.(t),r.current=t)},[t,r]),[t,o,a]}function rs(e){return typeof e=="function"}function ie(e){const n=s.useRef(e);return s.useEffect(()=>{n.current=e}),s.useMemo(()=>(...t)=>n.current?.(...t),[])}function ss(e,n=globalThis?.document){const t=ie(e);s.useEffect(()=>{const o=r=>{r.key==="Escape"&&t(r)};return n.addEventListener("keydown",o,{capture:!0}),()=>n.removeEventListener("keydown",o,{capture:!0})},[t,n])}var as="DismissableLayer",ut="dismissableLayer.update",is="dismissableLayer.pointerDownOutside",cs="dismissableLayer.focusOutside",Zt,fn=s.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),De=s.forwardRef((e,n)=>{const{disableOutsidePointerEvents:t=!1,onEscapeKeyDown:o,onPointerDownOutside:r,onFocusOutside:a,onInteractOutside:i,onDismiss:c,...u}=e,d=s.useContext(fn),[f,p]=s.useState(null),v=f?.ownerDocument??globalThis?.document,[,x]=s.useState({}),C=M(n,P=>p(P)),m=Array.from(d.layers),[h]=[...d.layersWithOutsidePointerEventsDisabled].slice(-1),w=m.indexOf(h),g=f?m.indexOf(f):-1,y=d.layersWithOutsidePointerEventsDisabled.size>0,S=g>=w,T=ds(P=>{const I=P.target,F=[...d.branches].some(L=>L.contains(I));!S||F||(r?.(P),i?.(P),P.defaultPrevented||c?.())},v),A=fs(P=>{const I=P.target;[...d.branches].some(L=>L.contains(I))||(a?.(P),i?.(P),P.defaultPrevented||c?.())},v);return ss(P=>{g===d.layers.size-1&&(o?.(P),!P.defaultPrevented&&c&&(P.preventDefault(),c()))},v),s.useEffect(()=>{if(f)return t&&(d.layersWithOutsidePointerEventsDisabled.size===0&&(Zt=v.body.style.pointerEvents,v.body.style.pointerEvents="none"),d.layersWithOutsidePointerEventsDisabled.add(f)),d.layers.add(f),Jt(),()=>{t&&d.layersWithOutsidePointerEventsDisabled.size===1&&(v.body.style.pointerEvents=Zt)}},[f,v,t,d]),s.useEffect(()=>()=>{f&&(d.layers.delete(f),d.layersWithOutsidePointerEventsDisabled.delete(f),Jt())},[f,d]),s.useEffect(()=>{const P=()=>x({});return document.addEventListener(ut,P),()=>document.removeEventListener(ut,P)},[]),l.jsx(_.div,{...u,ref:C,style:{pointerEvents:y?S?"auto":"none":void 0,...e.style},onFocusCapture:E(e.onFocusCapture,A.onFocusCapture),onBlurCapture:E(e.onBlurCapture,A.onBlurCapture),onPointerDownCapture:E(e.onPointerDownCapture,T.onPointerDownCapture)})});De.displayName=as;var ls="DismissableLayerBranch",us=s.forwardRef((e,n)=>{const t=s.useContext(fn),o=s.useRef(null),r=M(n,o);return s.useEffect(()=>{const a=o.current;if(a)return t.branches.add(a),()=>{t.branches.delete(a)}},[t.branches]),l.jsx(_.div,{...e,ref:r})});us.displayName=ls;function ds(e,n=globalThis?.document){const t=ie(e),o=s.useRef(!1),r=s.useRef(()=>{});return s.useEffect(()=>{const a=c=>{if(c.target&&!o.current){let u=function(){pn(is,t,d,{discrete:!0})};const d={originalEvent:c};c.pointerType==="touch"?(n.removeEventListener("click",r.current),r.current=u,n.addEventListener("click",r.current,{once:!0})):u()}else n.removeEventListener("click",r.current);o.current=!1},i=window.setTimeout(()=>{n.addEventListener("pointerdown",a)},0);return()=>{window.clearTimeout(i),n.removeEventListener("pointerdown",a),n.removeEventListener("click",r.current)}},[n,t]),{onPointerDownCapture:()=>o.current=!0}}function fs(e,n=globalThis?.document){const t=ie(e),o=s.useRef(!1);return s.useEffect(()=>{const r=a=>{a.target&&!o.current&&pn(cs,t,{originalEvent:a},{discrete:!1})};return n.addEventListener("focusin",r),()=>n.removeEventListener("focusin",r)},[n,t]),{onFocusCapture:()=>o.current=!0,onBlurCapture:()=>o.current=!1}}function Jt(){const e=new CustomEvent(ut);document.dispatchEvent(e)}function pn(e,n,t,{discrete:o}){const r=t.originalEvent.target,a=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:t});n&&r.addEventListener(e,n,{once:!0}),o?un(r,a):r.dispatchEvent(a)}var at="focusScope.autoFocusOnMount",it="focusScope.autoFocusOnUnmount",Qt={bubbles:!1,cancelable:!0},ps="FocusScope",We=s.forwardRef((e,n)=>{const{loop:t=!1,trapped:o=!1,onMountAutoFocus:r,onUnmountAutoFocus:a,...i}=e,[c,u]=s.useState(null),d=ie(r),f=ie(a),p=s.useRef(null),v=M(n,m=>u(m)),x=s.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;s.useEffect(()=>{if(o){let m=function(y){if(x.paused||!c)return;const S=y.target;c.contains(S)?p.current=S:de(p.current,{select:!0})},h=function(y){if(x.paused||!c)return;const S=y.relatedTarget;S!==null&&(c.contains(S)||de(p.current,{select:!0}))},w=function(y){if(document.activeElement===document.body)for(const T of y)T.removedNodes.length>0&&de(c)};document.addEventListener("focusin",m),document.addEventListener("focusout",h);const g=new MutationObserver(w);return c&&g.observe(c,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",m),document.removeEventListener("focusout",h),g.disconnect()}}},[o,c,x.paused]),s.useEffect(()=>{if(c){tn.add(x);const m=document.activeElement;if(!c.contains(m)){const w=new CustomEvent(at,Qt);c.addEventListener(at,d),c.dispatchEvent(w),w.defaultPrevented||(ms(Cs(mn(c)),{select:!0}),document.activeElement===m&&de(c))}return()=>{c.removeEventListener(at,d),setTimeout(()=>{const w=new CustomEvent(it,Qt);c.addEventListener(it,f),c.dispatchEvent(w),w.defaultPrevented||de(m??document.body,{select:!0}),c.removeEventListener(it,f),tn.remove(x)},0)}}},[c,d,f,x]);const C=s.useCallback(m=>{if(!t&&!o||x.paused)return;const h=m.key==="Tab"&&!m.altKey&&!m.ctrlKey&&!m.metaKey,w=document.activeElement;if(h&&w){const g=m.currentTarget,[y,S]=vs(g);y&&S?!m.shiftKey&&w===S?(m.preventDefault(),t&&de(y,{select:!0})):m.shiftKey&&w===y&&(m.preventDefault(),t&&de(S,{select:!0})):w===g&&m.preventDefault()}},[t,o,x.paused]);return l.jsx(_.div,{tabIndex:-1,...i,ref:v,onKeyDown:C})});We.displayName=ps;function ms(e,{select:n=!1}={}){const t=document.activeElement;for(const o of e)if(de(o,{select:n}),document.activeElement!==t)return}function vs(e){const n=mn(e),t=en(n,e),o=en(n.reverse(),e);return[t,o]}function mn(e){const n=[],t=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const r=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||r?NodeFilter.FILTER_SKIP:o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;t.nextNode();)n.push(t.currentNode);return n}function en(e,n){for(const t of e)if(!hs(t,{upTo:n}))return t}function hs(e,{upTo:n}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(n!==void 0&&e===n)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function gs(e){return e instanceof HTMLInputElement&&"select"in e}function de(e,{select:n=!1}={}){if(e&&e.focus){const t=document.activeElement;e.focus({preventScroll:!0}),e!==t&&gs(e)&&n&&e.select()}}var tn=xs();function xs(){let e=[];return{add(n){const t=e[0];n!==t&&t?.pause(),e=nn(e,n),e.unshift(n)},remove(n){e=nn(e,n),e[0]?.resume()}}}function nn(e,n){const t=[...e],o=t.indexOf(n);return o!==-1&&t.splice(o,1),t}function Cs(e){return e.filter(n=>n.tagName!=="A")}var ws="Portal",Oe=s.forwardRef((e,n)=>{const{container:t,...o}=e,[r,a]=s.useState(!1);K(()=>a(!0),[]);const i=t||r&&globalThis?.document?.body;return i?Or.createPortal(l.jsx(_.div,{...o,ref:n}),i):null});Oe.displayName=ws;function ys(e,n){return s.useReducer((t,o)=>n[t][o]??t,e)}var te=e=>{const{present:n,children:t}=e,o=Es(n),r=typeof t=="function"?t({present:o.isPresent}):s.Children.only(t),a=M(o.ref,bs(r));return typeof t=="function"||o.isPresent?s.cloneElement(r,{ref:a}):null};te.displayName="Presence";function Es(e){const[n,t]=s.useState(),o=s.useRef(null),r=s.useRef(e),a=s.useRef("none"),i=e?"mounted":"unmounted",[c,u]=ys(i,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return s.useEffect(()=>{const d=$e(o.current);a.current=c==="mounted"?d:"none"},[c]),K(()=>{const d=o.current,f=r.current;if(f!==e){const v=a.current,x=$e(d);e?u("MOUNT"):x==="none"||d?.display==="none"?u("UNMOUNT"):u(f&&v!==x?"ANIMATION_OUT":"UNMOUNT"),r.current=e}},[e,u]),K(()=>{if(n){let d;const f=n.ownerDocument.defaultView??window,p=x=>{const m=$e(o.current).includes(CSS.escape(x.animationName));if(x.target===n&&m&&(u("ANIMATION_END"),!r.current)){const h=n.style.animationFillMode;n.style.animationFillMode="forwards",d=f.setTimeout(()=>{n.style.animationFillMode==="forwards"&&(n.style.animationFillMode=h)})}},v=x=>{x.target===n&&(a.current=$e(o.current))};return n.addEventListener("animationstart",v),n.addEventListener("animationcancel",p),n.addEventListener("animationend",p),()=>{f.clearTimeout(d),n.removeEventListener("animationstart",v),n.removeEventListener("animationcancel",p),n.removeEventListener("animationend",p)}}else u("ANIMATION_END")},[n,u]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:s.useCallback(d=>{o.current=d?getComputedStyle(d):null,t(d)},[])}}function $e(e){return e?.animationName||"none"}function bs(e){let n=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,t=n&&"isReactWarning"in n&&n.isReactWarning;return t?e.ref:(n=Object.getOwnPropertyDescriptor(e,"ref")?.get,t=n&&"isReactWarning"in n&&n.isReactWarning,t?e.props.ref:e.props.ref||e.ref)}var ct=0;function bt(){s.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??on()),document.body.insertAdjacentElement("beforeend",e[1]??on()),ct++,()=>{ct===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(n=>n.remove()),ct--}},[])}function on(){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 Ve="Dialog",[vn,hn]=se(Ve),[Ss,ae]=vn(Ve),gn=e=>{const{__scopeDialog:n,children:t,open:o,defaultOpen:r,onOpenChange:a,modal:i=!0}=e,c=s.useRef(null),u=s.useRef(null),[d,f]=pe({prop:o,defaultProp:r??!1,onChange:a,caller:Ve});return l.jsx(Ss,{scope:n,triggerRef:c,contentRef:u,contentId:re(),titleId:re(),descriptionId:re(),open:d,onOpenChange:f,onOpenToggle:s.useCallback(()=>f(p=>!p),[f]),modal:i,children:t})};gn.displayName=Ve;var xn="DialogTrigger",Cn=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=ae(xn,t),a=M(n,r.triggerRef);return l.jsx(_.button,{type:"button","aria-haspopup":"dialog","aria-expanded":r.open,"aria-controls":r.contentId,"data-state":Pt(r.open),...o,ref:a,onClick:E(e.onClick,r.onOpenToggle)})});Cn.displayName=xn;var St="DialogPortal",[Rs,wn]=vn(St,{forceMount:void 0}),yn=e=>{const{__scopeDialog:n,forceMount:t,children:o,container:r}=e,a=ae(St,n);return l.jsx(Rs,{scope:n,forceMount:t,children:s.Children.map(o,i=>l.jsx(te,{present:t||a.open,children:l.jsx(Oe,{asChild:!0,container:r,children:i})}))})};yn.displayName=St;var Be="DialogOverlay",En=s.forwardRef((e,n)=>{const t=wn(Be,e.__scopeDialog),{forceMount:o=t.forceMount,...r}=e,a=ae(Be,e.__scopeDialog);return a.modal?l.jsx(te,{present:o||a.open,children:l.jsx(_s,{...r,ref:n})}):null});En.displayName=Be;var Ps=xe("DialogOverlay.RemoveScroll"),_s=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=ae(Be,t);return l.jsx(Et,{as:Ps,allowPinchZoom:!0,shards:[r.contentRef],children:l.jsx(_.div,{"data-state":Pt(r.open),...o,ref:n,style:{pointerEvents:"auto",...o.style}})})}),Ce="DialogContent",bn=s.forwardRef((e,n)=>{const t=wn(Ce,e.__scopeDialog),{forceMount:o=t.forceMount,...r}=e,a=ae(Ce,e.__scopeDialog);return l.jsx(te,{present:o||a.open,children:a.modal?l.jsx(Ts,{...r,ref:n}):l.jsx(Is,{...r,ref:n})})});bn.displayName=Ce;var Ts=s.forwardRef((e,n)=>{const t=ae(Ce,e.__scopeDialog),o=s.useRef(null),r=M(n,t.contentRef,o);return s.useEffect(()=>{const a=o.current;if(a)return yt(a)},[]),l.jsx(Sn,{...e,ref:r,trapFocus:t.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:E(e.onCloseAutoFocus,a=>{a.preventDefault(),t.triggerRef.current?.focus()}),onPointerDownOutside:E(e.onPointerDownOutside,a=>{const i=a.detail.originalEvent,c=i.button===0&&i.ctrlKey===!0;(i.button===2||c)&&a.preventDefault()}),onFocusOutside:E(e.onFocusOutside,a=>a.preventDefault())})}),Is=s.forwardRef((e,n)=>{const t=ae(Ce,e.__scopeDialog),o=s.useRef(!1),r=s.useRef(!1);return l.jsx(Sn,{...e,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:a=>{e.onCloseAutoFocus?.(a),a.defaultPrevented||(o.current||t.triggerRef.current?.focus(),a.preventDefault()),o.current=!1,r.current=!1},onInteractOutside:a=>{e.onInteractOutside?.(a),a.defaultPrevented||(o.current=!0,a.detail.originalEvent.type==="pointerdown"&&(r.current=!0));const i=a.target;t.triggerRef.current?.contains(i)&&a.preventDefault(),a.detail.originalEvent.type==="focusin"&&r.current&&a.preventDefault()}})}),Sn=s.forwardRef((e,n)=>{const{__scopeDialog:t,trapFocus:o,onOpenAutoFocus:r,onCloseAutoFocus:a,...i}=e,c=ae(Ce,t),u=s.useRef(null),d=M(n,u);return bt(),l.jsxs(l.Fragment,{children:[l.jsx(We,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:r,onUnmountAutoFocus:a,children:l.jsx(De,{role:"dialog",id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":Pt(c.open),...i,ref:d,onDismiss:()=>c.onOpenChange(!1)})}),l.jsxs(l.Fragment,{children:[l.jsx(As,{titleId:c.titleId}),l.jsx(Ds,{contentRef:u,descriptionId:c.descriptionId})]})]})}),Rt="DialogTitle",Rn=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=ae(Rt,t);return l.jsx(_.h2,{id:r.titleId,...o,ref:n})});Rn.displayName=Rt;var Pn="DialogDescription",_n=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=ae(Pn,t);return l.jsx(_.p,{id:r.descriptionId,...o,ref:n})});_n.displayName=Pn;var Tn="DialogClose",In=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=ae(Tn,t);return l.jsx(_.button,{type:"button",...o,ref:n,onClick:E(e.onClick,()=>r.onOpenChange(!1))})});In.displayName=Tn;function Pt(e){return e?"open":"closed"}var Mn="DialogTitleWarning",[Ms,An]=Jr(Mn,{contentName:Ce,titleName:Rt,docsSlug:"dialog"}),As=({titleId:e})=>{const n=An(Mn),t=`\`${n.contentName}\` requires a \`${n.titleName}\` for the component to be accessible for screen reader users. If you want to hide the \`${n.titleName}\`, you can wrap it with our VisuallyHidden component. diff --git a/internal/ui/dist/assets/router-CQ4G2GmP.js b/internal/ui/dist/assets/router-CANfZtzM.js similarity index 99% rename from internal/ui/dist/assets/router-CQ4G2GmP.js rename to internal/ui/dist/assets/router-CANfZtzM.js index a8f45c4..918aad1 100644 --- a/internal/ui/dist/assets/router-CQ4G2GmP.js +++ b/internal/ui/dist/assets/router-CANfZtzM.js @@ -1,4 +1,4 @@ -import{r as i}from"./vendor-DBKlM1wc.js";function Zt(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}/** +import{r as i}from"./vendor-DvippHRz.js";function Zt(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}/** * react-router v7.8.2 * * Copyright (c) Remix Software Inc. diff --git a/internal/ui/dist/assets/vendor-DBKlM1wc.js b/internal/ui/dist/assets/vendor-DvippHRz.js similarity index 99% rename from internal/ui/dist/assets/vendor-DBKlM1wc.js rename to internal/ui/dist/assets/vendor-DvippHRz.js index ad16787..035c0ce 100644 --- a/internal/ui/dist/assets/vendor-DBKlM1wc.js +++ b/internal/ui/dist/assets/vendor-DvippHRz.js @@ -1,4 +1,4 @@ -import{g as Av}from"./router-CQ4G2GmP.js";function G0(n,l){for(var i=0;iu[c]})}}}return Object.freeze(Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}))}var Tc={exports:{}},oi={};/** +import{g as Av}from"./router-CANfZtzM.js";function G0(n,l){for(var i=0;iu[c]})}}}return Object.freeze(Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}))}var Tc={exports:{}},oi={};/** * @license React * react-jsx-runtime.production.js * @@ -103,4 +103,4 @@ import{g as Av}from"./router-CQ4G2GmP.js";function G0(n,l){for(var i=0;i")&&(Y=Y.replace("",t.displayName)),Y}while(1<=r&&0<=o);break}}}finally{wo=!1,Error.prepareStackTrace=a}return(a=t?t.displayName||t.name:"")?vl(a):""}function By(t){switch(t.tag){case 26:case 27:case 5:return vl(t.type);case 16:return vl("Lazy");case 13:return vl("Suspense");case 19:return vl("SuspenseList");case 0:case 15:return xo(t.type,!1);case 11:return xo(t.type.render,!1);case 1:return xo(t.type,!0);case 31:return vl("Activity");default:return""}}function Nf(t){try{var e="";do e+=By(t),t=t.return;while(t);return e}catch(a){return` Error generating stack: `+a.message+` `+a.stack}}function rn(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function Uf(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function Hy(t){var e=Uf(t)?"checked":"value",a=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),r=""+t[e];if(!t.hasOwnProperty(e)&&typeof a<"u"&&typeof a.get=="function"&&typeof a.set=="function"){var o=a.get,s=a.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return o.call(this)},set:function(h){r=""+h,s.call(this,h)}}),Object.defineProperty(t,e,{enumerable:a.enumerable}),{getValue:function(){return r},setValue:function(h){r=""+h},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function Ti(t){t._valueTracker||(t._valueTracker=Hy(t))}function Zf(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var a=e.getValue(),r="";return t&&(r=Uf(t)?t.checked?"true":"false":t.value),t=r,t!==a?(e.setValue(t),!0):!1}function Oi(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var jy=/[\n"\\]/g;function un(t){return t.replace(jy,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function Eo(t,e,a,r,o,s,h,g){t.name="",h!=null&&typeof h!="function"&&typeof h!="symbol"&&typeof h!="boolean"?t.type=h:t.removeAttribute("type"),e!=null?h==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+rn(e)):t.value!==""+rn(e)&&(t.value=""+rn(e)):h!=="submit"&&h!=="reset"||t.removeAttribute("value"),e!=null?Ao(t,h,rn(e)):a!=null?Ao(t,h,rn(a)):r!=null&&t.removeAttribute("value"),o==null&&s!=null&&(t.defaultChecked=!!s),o!=null&&(t.checked=o&&typeof o!="function"&&typeof o!="symbol"),g!=null&&typeof g!="function"&&typeof g!="symbol"&&typeof g!="boolean"?t.name=""+rn(g):t.removeAttribute("name")}function Vf(t,e,a,r,o,s,h,g){if(s!=null&&typeof s!="function"&&typeof s!="symbol"&&typeof s!="boolean"&&(t.type=s),e!=null||a!=null){if(!(s!=="submit"&&s!=="reset"||e!=null))return;a=a!=null?""+rn(a):"",e=e!=null?""+rn(e):a,g||e===t.value||(t.value=e),t.defaultValue=e}r=r??o,r=typeof r!="function"&&typeof r!="symbol"&&!!r,t.checked=g?t.checked:!!r,t.defaultChecked=!!r,h!=null&&typeof h!="function"&&typeof h!="symbol"&&typeof h!="boolean"&&(t.name=h)}function Ao(t,e,a){e==="number"&&Oi(t.ownerDocument)===t||t.defaultValue===""+a||(t.defaultValue=""+a)}function yl(t,e,a,r){if(t=t.options,e){e={};for(var o=0;o"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Do=!1;if(Xn)try{var yr={};Object.defineProperty(yr,"passive",{get:function(){Do=!0}}),window.addEventListener("test",yr,yr),window.removeEventListener("test",yr,yr)}catch{Do=!1}var da=null,Mo=null,Di=null;function Gf(){if(Di)return Di;var t,e=Mo,a=e.length,r,o="value"in da?da.value:da.textContent,s=o.length;for(t=0;t=Sr),Ff=" ",Wf=!1;function Pf(t,e){switch(t){case"keyup":return mp.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function If(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var _l=!1;function vp(t,e){switch(t){case"compositionend":return If(e);case"keypress":return e.which!==32?null:(Wf=!0,Ff);case"textInput":return t=e.data,t===Ff&&Wf?null:t;default:return null}}function yp(t,e){if(_l)return t==="compositionend"||!Zo&&Pf(t,e)?(t=Gf(),Di=Mo=da=null,_l=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:a,offset:e-t};t=r}t:{for(;a;){if(a.nextSibling){a=a.nextSibling;break t}a=a.parentNode}a=void 0}a=ud(a)}}function sd(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?sd(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function cd(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=Oi(t.document);e instanceof t.HTMLIFrameElement;){try{var a=typeof e.contentWindow.location.href=="string"}catch{a=!1}if(a)t=e.contentWindow;else break;e=Oi(t.document)}return e}function Ho(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}var Ap=Xn&&"documentMode"in document&&11>=document.documentMode,wl=null,jo=null,Er=null,Lo=!1;function fd(t,e,a){var r=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;Lo||wl==null||wl!==Oi(r)||(r=wl,"selectionStart"in r&&Ho(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Er&&xr(Er,r)||(Er=r,r=Su(jo,"onSelect"),0>=h,o-=h,$n=1<<32-jt(e)+o|a<s?s:8;var h=A.T,g={};A.T=g,zs(t,!1,e,a);try{var S=o(),R=A.S;if(R!==null&&R(g,S),S!==null&&typeof S=="object"&&typeof S.then=="function"){var Y=Np(S,r);Hr(t,e,Y,Ie(t))}else Hr(t,e,r,Ie(t))}catch($){Hr(t,e,{then:function(){},status:"rejected",reason:$},Ie())}finally{L.p=s,A.T=h}}function Hp(){}function Es(t,e,a,r){if(t.tag!==5)throw Error(u(476));var o=dh(t).queue;fh(t,o,e,U,a===null?Hp:function(){return hh(t),a(r)})}function dh(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:U,baseState:U,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wn,lastRenderedState:U},next:null};var a={};return e.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wn,lastRenderedState:a},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function hh(t){var e=dh(t).next.queue;Hr(t,e,{},Ie())}function As(){return Ne(ai)}function mh(){return he().memoizedState}function gh(){return he().memoizedState}function jp(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var a=Ie();t=ga(a);var r=va(e,t,a);r!==null&&(tn(r,e,a),kr(r,e,a)),e={cache:es()},t.payload=e;return}e=e.return}}function Lp(t,e,a){var r=Ie();a={lane:r,revertLane:0,action:a,hasEagerState:!1,eagerState:null,next:null},tu(t)?yh(e,a):(a=Xo(t,e,a,r),a!==null&&(tn(a,t,r),ph(a,e,r)))}function vh(t,e,a){var r=Ie();Hr(t,e,a,r)}function Hr(t,e,a,r){var o={lane:r,revertLane:0,action:a,hasEagerState:!1,eagerState:null,next:null};if(tu(t))yh(e,o);else{var s=t.alternate;if(t.lanes===0&&(s===null||s.lanes===0)&&(s=e.lastRenderedReducer,s!==null))try{var h=e.lastRenderedState,g=s(h,a);if(o.hasEagerState=!0,o.eagerState=g,Ke(g,h))return Vi(t,e,o,0),Jt===null&&Zi(),!1}catch{}finally{}if(a=Xo(t,e,o,r),a!==null)return tn(a,t,r),ph(a,e,r),!0}return!1}function zs(t,e,a,r){if(r={lane:2,revertLane:lc(),action:r,hasEagerState:!1,eagerState:null,next:null},tu(t)){if(e)throw Error(u(479))}else e=Xo(t,a,r,2),e!==null&&tn(e,t,2)}function tu(t){var e=t.alternate;return t===Mt||e!==null&&e===Mt}function yh(t,e){Cl=Ki=!0;var a=t.pending;a===null?e.next=e:(e.next=a.next,a.next=e),t.pending=e}function ph(t,e,a){if((a&4194048)!==0){var r=e.lanes;r&=t.pendingLanes,a|=r,e.lanes=a,le(t,a)}}var eu={readContext:Ne,use:Fi,useCallback:ue,useContext:ue,useEffect:ue,useImperativeHandle:ue,useLayoutEffect:ue,useInsertionEffect:ue,useMemo:ue,useReducer:ue,useRef:ue,useState:ue,useDebugValue:ue,useDeferredValue:ue,useTransition:ue,useSyncExternalStore:ue,useId:ue,useHostTransitionStatus:ue,useFormState:ue,useActionState:ue,useOptimistic:ue,useMemoCache:ue,useCacheRefresh:ue},bh={readContext:Ne,use:Fi,useCallback:function(t,e){return Le().memoizedState=[t,e===void 0?null:e],t},useContext:Ne,useEffect:nh,useImperativeHandle:function(t,e,a){a=a!=null?a.concat([t]):null,Ii(4194308,4,ih.bind(null,e,t),a)},useLayoutEffect:function(t,e){return Ii(4194308,4,t,e)},useInsertionEffect:function(t,e){Ii(4,2,t,e)},useMemo:function(t,e){var a=Le();e=e===void 0?null:e;var r=t();if(Ia){kt(!0);try{t()}finally{kt(!1)}}return a.memoizedState=[r,e],r},useReducer:function(t,e,a){var r=Le();if(a!==void 0){var o=a(e);if(Ia){kt(!0);try{a(e)}finally{kt(!1)}}}else o=e;return r.memoizedState=r.baseState=o,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:o},r.queue=t,t=t.dispatch=Lp.bind(null,Mt,t),[r.memoizedState,t]},useRef:function(t){var e=Le();return t={current:t},e.memoizedState=t},useState:function(t){t=Ss(t);var e=t.queue,a=vh.bind(null,Mt,e);return e.dispatch=a,[t.memoizedState,a]},useDebugValue:ws,useDeferredValue:function(t,e){var a=Le();return xs(a,t,e)},useTransition:function(){var t=Ss(!1);return t=fh.bind(null,Mt,t.queue,!0,!1),Le().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,a){var r=Mt,o=Le();if(Ht){if(a===void 0)throw Error(u(407));a=a()}else{if(a=e(),Jt===null)throw Error(u(349));(Vt&124)!==0||jd(r,e,a)}o.memoizedState=a;var s={value:a,getSnapshot:e};return o.queue=s,nh(Yd.bind(null,r,s,t),[t]),r.flags|=2048,Nl(9,Pi(),Ld.bind(null,r,s,a,e),null),a},useId:function(){var t=Le(),e=Jt.identifierPrefix;if(Ht){var a=Kn,r=$n;a=(r&~(1<<32-jt(r)-1)).toString(32)+a,e="«"+e+"R"+a,a=Ji++,0wt?(Oe=pt,pt=null):Oe=pt.sibling;var Bt=M(z,pt,O[wt],G);if(Bt===null){pt===null&&(pt=Oe);break}t&&pt&&Bt.alternate===null&&e(z,pt),E=s(Bt,E,wt),Nt===null?ct=Bt:Nt.sibling=Bt,Nt=Bt,pt=Oe}if(wt===O.length)return a(z,pt),Ht&&$a(z,wt),ct;if(pt===null){for(;wtwt?(Oe=pt,pt=null):Oe=pt.sibling;var ka=M(z,pt,Bt.value,G);if(ka===null){pt===null&&(pt=Oe);break}t&&pt&&ka.alternate===null&&e(z,pt),E=s(ka,E,wt),Nt===null?ct=ka:Nt.sibling=ka,Nt=ka,pt=Oe}if(Bt.done)return a(z,pt),Ht&&$a(z,wt),ct;if(pt===null){for(;!Bt.done;wt++,Bt=O.next())Bt=$(z,Bt.value,G),Bt!==null&&(E=s(Bt,E,wt),Nt===null?ct=Bt:Nt.sibling=Bt,Nt=Bt);return Ht&&$a(z,wt),ct}for(pt=r(pt);!Bt.done;wt++,Bt=O.next())Bt=N(pt,z,wt,Bt.value,G),Bt!==null&&(t&&Bt.alternate!==null&&pt.delete(Bt.key===null?wt:Bt.key),E=s(Bt,E,wt),Nt===null?ct=Bt:Nt.sibling=Bt,Nt=Bt);return t&&pt.forEach(function(q0){return e(z,q0)}),Ht&&$a(z,wt),ct}function Qt(z,E,O,G){if(typeof O=="object"&&O!==null&&O.type===k&&O.key===null&&(O=O.props.children),typeof O=="object"&&O!==null){switch(O.$$typeof){case x:t:{for(var ct=O.key;E!==null;){if(E.key===ct){if(ct=O.type,ct===k){if(E.tag===7){a(z,E.sibling),G=o(E,O.props.children),G.return=z,z=G;break t}}else if(E.elementType===ct||typeof ct=="object"&&ct!==null&&ct.$$typeof===W&&_h(ct)===E.type){a(z,E.sibling),G=o(E,O.props),Lr(G,O),G.return=z,z=G;break t}a(z,E);break}else e(z,E);E=E.sibling}O.type===k?(G=Xa(O.props.children,z.mode,G,O.key),G.return=z,z=G):(G=Hi(O.type,O.key,O.props,null,z.mode,G),Lr(G,O),G.return=z,z=G)}return h(z);case T:t:{for(ct=O.key;E!==null;){if(E.key===ct)if(E.tag===4&&E.stateNode.containerInfo===O.containerInfo&&E.stateNode.implementation===O.implementation){a(z,E.sibling),G=o(E,O.children||[]),G.return=z,z=G;break t}else{a(z,E);break}else e(z,E);E=E.sibling}G=Ko(O,z.mode,G),G.return=z,z=G}return h(z);case W:return ct=O._init,O=ct(O._payload),Qt(z,E,O,G)}if(bt(O))return xt(z,E,O,G);if(lt(O)){if(ct=lt(O),typeof ct!="function")throw Error(u(150));return O=ct.call(O),_t(z,E,O,G)}if(typeof O.then=="function")return Qt(z,E,nu(O),G);if(O.$$typeof===K)return Qt(z,E,qi(z,O),G);au(z,O)}return typeof O=="string"&&O!==""||typeof O=="number"||typeof O=="bigint"?(O=""+O,E!==null&&E.tag===6?(a(z,E.sibling),G=o(E,O),G.return=z,z=G):(a(z,E),G=$o(O,z.mode,G),G.return=z,z=G),h(z)):a(z,E)}return function(z,E,O,G){try{jr=0;var ct=Qt(z,E,O,G);return Ul=null,ct}catch(pt){if(pt===Mr||pt===Xi)throw pt;var Nt=Je(29,pt,null,z.mode);return Nt.lanes=G,Nt.return=z,Nt}finally{}}}var Zl=wh(!0),xh=wh(!1),dn=Q(null),Dn=null;function pa(t){var e=t.alternate;j(pe,pe.current&1),j(dn,t),Dn===null&&(e===null||Ml.current!==null||e.memoizedState!==null)&&(Dn=t)}function Eh(t){if(t.tag===22){if(j(pe,pe.current),j(dn,t),Dn===null){var e=t.alternate;e!==null&&e.memoizedState!==null&&(Dn=t)}}else ba()}function ba(){j(pe,pe.current),j(dn,dn.current)}function Pn(t){at(dn),Dn===t&&(Dn=null),at(pe)}var pe=Q(0);function lu(t){for(var e=t;e!==null;){if(e.tag===13){var a=e.memoizedState;if(a!==null&&(a=a.dehydrated,a===null||a.data==="$?"||vc(a)))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if((e.flags&128)!==0)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break;for(;e.sibling===null;){if(e.return===null||e.return===t)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}function Ts(t,e,a,r){e=t.memoizedState,a=a(r,e),a=a==null?e:b({},e,a),t.memoizedState=a,t.lanes===0&&(t.updateQueue.baseState=a)}var Os={enqueueSetState:function(t,e,a){t=t._reactInternals;var r=Ie(),o=ga(r);o.payload=e,a!=null&&(o.callback=a),e=va(t,o,r),e!==null&&(tn(e,t,r),kr(e,t,r))},enqueueReplaceState:function(t,e,a){t=t._reactInternals;var r=Ie(),o=ga(r);o.tag=1,o.payload=e,a!=null&&(o.callback=a),e=va(t,o,r),e!==null&&(tn(e,t,r),kr(e,t,r))},enqueueForceUpdate:function(t,e){t=t._reactInternals;var a=Ie(),r=ga(a);r.tag=2,e!=null&&(r.callback=e),e=va(t,r,a),e!==null&&(tn(e,t,a),kr(e,t,a))}};function Ah(t,e,a,r,o,s,h){return t=t.stateNode,typeof t.shouldComponentUpdate=="function"?t.shouldComponentUpdate(r,s,h):e.prototype&&e.prototype.isPureReactComponent?!xr(a,r)||!xr(o,s):!0}function zh(t,e,a,r){t=e.state,typeof e.componentWillReceiveProps=="function"&&e.componentWillReceiveProps(a,r),typeof e.UNSAFE_componentWillReceiveProps=="function"&&e.UNSAFE_componentWillReceiveProps(a,r),e.state!==t&&Os.enqueueReplaceState(e,e.state,null)}function tl(t,e){var a=e;if("ref"in e){a={};for(var r in e)r!=="ref"&&(a[r]=e[r])}if(t=t.defaultProps){a===e&&(a=b({},a));for(var o in t)a[o]===void 0&&(a[o]=t[o])}return a}var ru=typeof reportError=="function"?reportError:function(t){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var e=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof t=="object"&&t!==null&&typeof t.message=="string"?String(t.message):String(t),error:t});if(!window.dispatchEvent(e))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",t);return}console.error(t)};function Th(t){ru(t)}function Oh(t){console.error(t)}function Rh(t){ru(t)}function iu(t,e){try{var a=t.onUncaughtError;a(e.value,{componentStack:e.stack})}catch(r){setTimeout(function(){throw r})}}function Dh(t,e,a){try{var r=t.onCaughtError;r(a.value,{componentStack:a.stack,errorBoundary:e.tag===1?e.stateNode:null})}catch(o){setTimeout(function(){throw o})}}function Rs(t,e,a){return a=ga(a),a.tag=3,a.payload={element:null},a.callback=function(){iu(t,e)},a}function Mh(t){return t=ga(t),t.tag=3,t}function Ch(t,e,a,r){var o=a.type.getDerivedStateFromError;if(typeof o=="function"){var s=r.value;t.payload=function(){return o(s)},t.callback=function(){Dh(e,a,r)}}var h=a.stateNode;h!==null&&typeof h.componentDidCatch=="function"&&(t.callback=function(){Dh(e,a,r),typeof o!="function"&&(Aa===null?Aa=new Set([this]):Aa.add(this));var g=r.stack;this.componentDidCatch(r.value,{componentStack:g!==null?g:""})})}function qp(t,e,a,r,o){if(a.flags|=32768,r!==null&&typeof r=="object"&&typeof r.then=="function"){if(e=a.alternate,e!==null&&Or(e,a,o,!0),a=dn.current,a!==null){switch(a.tag){case 13:return Dn===null?Is():a.alternate===null&&ae===0&&(ae=3),a.flags&=-257,a.flags|=65536,a.lanes=o,r===ls?a.flags|=16384:(e=a.updateQueue,e===null?a.updateQueue=new Set([r]):e.add(r),ec(t,r,o)),!1;case 22:return a.flags|=65536,r===ls?a.flags|=16384:(e=a.updateQueue,e===null?(e={transitions:null,markerInstances:null,retryQueue:new Set([r])},a.updateQueue=e):(a=e.retryQueue,a===null?e.retryQueue=new Set([r]):a.add(r)),ec(t,r,o)),!1}throw Error(u(435,a.tag))}return ec(t,r,o),Is(),!1}if(Ht)return e=dn.current,e!==null?((e.flags&65536)===0&&(e.flags|=256),e.flags|=65536,e.lanes=o,r!==Wo&&(t=Error(u(422),{cause:r}),Tr(on(t,a)))):(r!==Wo&&(e=Error(u(423),{cause:r}),Tr(on(e,a))),t=t.current.alternate,t.flags|=65536,o&=-o,t.lanes|=o,r=on(r,a),o=Rs(t.stateNode,r,o),us(t,o),ae!==4&&(ae=2)),!1;var s=Error(u(520),{cause:r});if(s=on(s,a),Kr===null?Kr=[s]:Kr.push(s),ae!==4&&(ae=2),e===null)return!0;r=on(r,a),a=e;do{switch(a.tag){case 3:return a.flags|=65536,t=o&-o,a.lanes|=t,t=Rs(a.stateNode,r,t),us(a,t),!1;case 1:if(e=a.type,s=a.stateNode,(a.flags&128)===0&&(typeof e.getDerivedStateFromError=="function"||s!==null&&typeof s.componentDidCatch=="function"&&(Aa===null||!Aa.has(s))))return a.flags|=65536,o&=-o,a.lanes|=o,o=Mh(o),Ch(o,t,a,r),us(a,o),!1}a=a.return}while(a!==null);return!1}var kh=Error(u(461)),ze=!1;function Me(t,e,a,r){e.child=t===null?xh(e,null,a,r):Zl(e,t.child,a,r)}function Nh(t,e,a,r,o){a=a.render;var s=e.ref;if("ref"in r){var h={};for(var g in r)g!=="ref"&&(h[g]=r[g])}else h=r;return Wa(e),r=ds(t,e,a,h,s,o),g=hs(),t!==null&&!ze?(ms(t,e,o),In(t,e,o)):(Ht&&g&&Jo(e),e.flags|=1,Me(t,e,r,o),e.child)}function Uh(t,e,a,r,o){if(t===null){var s=a.type;return typeof s=="function"&&!Qo(s)&&s.defaultProps===void 0&&a.compare===null?(e.tag=15,e.type=s,Zh(t,e,s,r,o)):(t=Hi(a.type,null,r,e,e.mode,o),t.ref=e.ref,t.return=e,e.child=t)}if(s=t.child,!Vs(t,o)){var h=s.memoizedProps;if(a=a.compare,a=a!==null?a:xr,a(h,r)&&t.ref===e.ref)return In(t,e,o)}return e.flags|=1,t=Qn(s,r),t.ref=e.ref,t.return=e,e.child=t}function Zh(t,e,a,r,o){if(t!==null){var s=t.memoizedProps;if(xr(s,r)&&t.ref===e.ref)if(ze=!1,e.pendingProps=r=s,Vs(t,o))(t.flags&131072)!==0&&(ze=!0);else return e.lanes=t.lanes,In(t,e,o)}return Ds(t,e,a,r,o)}function Vh(t,e,a){var r=e.pendingProps,o=r.children,s=t!==null?t.memoizedState:null;if(r.mode==="hidden"){if((e.flags&128)!==0){if(r=s!==null?s.baseLanes|a:a,t!==null){for(o=e.child=t.child,s=0;o!==null;)s=s|o.lanes|o.childLanes,o=o.sibling;e.childLanes=s&~r}else e.childLanes=0,e.child=null;return Bh(t,e,r,a)}if((a&536870912)!==0)e.memoizedState={baseLanes:0,cachePool:null},t!==null&&Gi(e,s!==null?s.cachePool:null),s!==null?Zd(e,s):ss(),Eh(e);else return e.lanes=e.childLanes=536870912,Bh(t,e,s!==null?s.baseLanes|a:a,a)}else s!==null?(Gi(e,s.cachePool),Zd(e,s),ba(),e.memoizedState=null):(t!==null&&Gi(e,null),ss(),ba());return Me(t,e,o,a),e.child}function Bh(t,e,a,r){var o=as();return o=o===null?null:{parent:ye._currentValue,pool:o},e.memoizedState={baseLanes:a,cachePool:o},t!==null&&Gi(e,null),ss(),Eh(e),t!==null&&Or(t,e,r,!0),null}function uu(t,e){var a=e.ref;if(a===null)t!==null&&t.ref!==null&&(e.flags|=4194816);else{if(typeof a!="function"&&typeof a!="object")throw Error(u(284));(t===null||t.ref!==a)&&(e.flags|=4194816)}}function Ds(t,e,a,r,o){return Wa(e),a=ds(t,e,a,r,void 0,o),r=hs(),t!==null&&!ze?(ms(t,e,o),In(t,e,o)):(Ht&&r&&Jo(e),e.flags|=1,Me(t,e,a,o),e.child)}function Hh(t,e,a,r,o,s){return Wa(e),e.updateQueue=null,a=Bd(e,r,a,o),Vd(t),r=hs(),t!==null&&!ze?(ms(t,e,s),In(t,e,s)):(Ht&&r&&Jo(e),e.flags|=1,Me(t,e,a,s),e.child)}function jh(t,e,a,r,o){if(Wa(e),e.stateNode===null){var s=zl,h=a.contextType;typeof h=="object"&&h!==null&&(s=Ne(h)),s=new a(r,s),e.memoizedState=s.state!==null&&s.state!==void 0?s.state:null,s.updater=Os,e.stateNode=s,s._reactInternals=e,s=e.stateNode,s.props=r,s.state=e.memoizedState,s.refs={},rs(e),h=a.contextType,s.context=typeof h=="object"&&h!==null?Ne(h):zl,s.state=e.memoizedState,h=a.getDerivedStateFromProps,typeof h=="function"&&(Ts(e,a,h,r),s.state=e.memoizedState),typeof a.getDerivedStateFromProps=="function"||typeof s.getSnapshotBeforeUpdate=="function"||typeof s.UNSAFE_componentWillMount!="function"&&typeof s.componentWillMount!="function"||(h=s.state,typeof s.componentWillMount=="function"&&s.componentWillMount(),typeof s.UNSAFE_componentWillMount=="function"&&s.UNSAFE_componentWillMount(),h!==s.state&&Os.enqueueReplaceState(s,s.state,null),Ur(e,r,s,o),Nr(),s.state=e.memoizedState),typeof s.componentDidMount=="function"&&(e.flags|=4194308),r=!0}else if(t===null){s=e.stateNode;var g=e.memoizedProps,S=tl(a,g);s.props=S;var R=s.context,Y=a.contextType;h=zl,typeof Y=="object"&&Y!==null&&(h=Ne(Y));var $=a.getDerivedStateFromProps;Y=typeof $=="function"||typeof s.getSnapshotBeforeUpdate=="function",g=e.pendingProps!==g,Y||typeof s.UNSAFE_componentWillReceiveProps!="function"&&typeof s.componentWillReceiveProps!="function"||(g||R!==h)&&zh(e,s,r,h),ma=!1;var M=e.memoizedState;s.state=M,Ur(e,r,s,o),Nr(),R=e.memoizedState,g||M!==R||ma?(typeof $=="function"&&(Ts(e,a,$,r),R=e.memoizedState),(S=ma||Ah(e,a,S,r,M,R,h))?(Y||typeof s.UNSAFE_componentWillMount!="function"&&typeof s.componentWillMount!="function"||(typeof s.componentWillMount=="function"&&s.componentWillMount(),typeof s.UNSAFE_componentWillMount=="function"&&s.UNSAFE_componentWillMount()),typeof s.componentDidMount=="function"&&(e.flags|=4194308)):(typeof s.componentDidMount=="function"&&(e.flags|=4194308),e.memoizedProps=r,e.memoizedState=R),s.props=r,s.state=R,s.context=h,r=S):(typeof s.componentDidMount=="function"&&(e.flags|=4194308),r=!1)}else{s=e.stateNode,is(t,e),h=e.memoizedProps,Y=tl(a,h),s.props=Y,$=e.pendingProps,M=s.context,R=a.contextType,S=zl,typeof R=="object"&&R!==null&&(S=Ne(R)),g=a.getDerivedStateFromProps,(R=typeof g=="function"||typeof s.getSnapshotBeforeUpdate=="function")||typeof s.UNSAFE_componentWillReceiveProps!="function"&&typeof s.componentWillReceiveProps!="function"||(h!==$||M!==S)&&zh(e,s,r,S),ma=!1,M=e.memoizedState,s.state=M,Ur(e,r,s,o),Nr();var N=e.memoizedState;h!==$||M!==N||ma||t!==null&&t.dependencies!==null&&Yi(t.dependencies)?(typeof g=="function"&&(Ts(e,a,g,r),N=e.memoizedState),(Y=ma||Ah(e,a,Y,r,M,N,S)||t!==null&&t.dependencies!==null&&Yi(t.dependencies))?(R||typeof s.UNSAFE_componentWillUpdate!="function"&&typeof s.componentWillUpdate!="function"||(typeof s.componentWillUpdate=="function"&&s.componentWillUpdate(r,N,S),typeof s.UNSAFE_componentWillUpdate=="function"&&s.UNSAFE_componentWillUpdate(r,N,S)),typeof s.componentDidUpdate=="function"&&(e.flags|=4),typeof s.getSnapshotBeforeUpdate=="function"&&(e.flags|=1024)):(typeof s.componentDidUpdate!="function"||h===t.memoizedProps&&M===t.memoizedState||(e.flags|=4),typeof s.getSnapshotBeforeUpdate!="function"||h===t.memoizedProps&&M===t.memoizedState||(e.flags|=1024),e.memoizedProps=r,e.memoizedState=N),s.props=r,s.state=N,s.context=S,r=Y):(typeof s.componentDidUpdate!="function"||h===t.memoizedProps&&M===t.memoizedState||(e.flags|=4),typeof s.getSnapshotBeforeUpdate!="function"||h===t.memoizedProps&&M===t.memoizedState||(e.flags|=1024),r=!1)}return s=r,uu(t,e),r=(e.flags&128)!==0,s||r?(s=e.stateNode,a=r&&typeof a.getDerivedStateFromError!="function"?null:s.render(),e.flags|=1,t!==null&&r?(e.child=Zl(e,t.child,null,o),e.child=Zl(e,null,a,o)):Me(t,e,a,o),e.memoizedState=s.state,t=e.child):t=In(t,e,o),t}function Lh(t,e,a,r){return zr(),e.flags|=256,Me(t,e,a,r),e.child}var Ms={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Cs(t){return{baseLanes:t,cachePool:Od()}}function ks(t,e,a){return t=t!==null?t.childLanes&~a:0,e&&(t|=hn),t}function Yh(t,e,a){var r=e.pendingProps,o=!1,s=(e.flags&128)!==0,h;if((h=s)||(h=t!==null&&t.memoizedState===null?!1:(pe.current&2)!==0),h&&(o=!0,e.flags&=-129),h=(e.flags&32)!==0,e.flags&=-33,t===null){if(Ht){if(o?pa(e):ba(),Ht){var g=ne,S;if(S=g){t:{for(S=g,g=Rn;S.nodeType!==8;){if(!g){g=null;break t}if(S=bn(S.nextSibling),S===null){g=null;break t}}g=S}g!==null?(e.memoizedState={dehydrated:g,treeContext:Qa!==null?{id:$n,overflow:Kn}:null,retryLane:536870912,hydrationErrors:null},S=Je(18,null,null,0),S.stateNode=g,S.return=e,e.child=S,Be=e,ne=null,S=!0):S=!1}S||Ja(e)}if(g=e.memoizedState,g!==null&&(g=g.dehydrated,g!==null))return vc(g)?e.lanes=32:e.lanes=536870912,null;Pn(e)}return g=r.children,r=r.fallback,o?(ba(),o=e.mode,g=ou({mode:"hidden",children:g},o),r=Xa(r,o,a,null),g.return=e,r.return=e,g.sibling=r,e.child=g,o=e.child,o.memoizedState=Cs(a),o.childLanes=ks(t,h,a),e.memoizedState=Ms,r):(pa(e),Ns(e,g))}if(S=t.memoizedState,S!==null&&(g=S.dehydrated,g!==null)){if(s)e.flags&256?(pa(e),e.flags&=-257,e=Us(t,e,a)):e.memoizedState!==null?(ba(),e.child=t.child,e.flags|=128,e=null):(ba(),o=r.fallback,g=e.mode,r=ou({mode:"visible",children:r.children},g),o=Xa(o,g,a,null),o.flags|=2,r.return=e,o.return=e,r.sibling=o,e.child=r,Zl(e,t.child,null,a),r=e.child,r.memoizedState=Cs(a),r.childLanes=ks(t,h,a),e.memoizedState=Ms,e=o);else if(pa(e),vc(g)){if(h=g.nextSibling&&g.nextSibling.dataset,h)var R=h.dgst;h=R,r=Error(u(419)),r.stack="",r.digest=h,Tr({value:r,source:null,stack:null}),e=Us(t,e,a)}else if(ze||Or(t,e,a,!1),h=(a&t.childLanes)!==0,ze||h){if(h=Jt,h!==null&&(r=a&-a,r=(r&42)!==0?1:fe(r),r=(r&(h.suspendedLanes|a))!==0?0:r,r!==0&&r!==S.retryLane))throw S.retryLane=r,Al(t,r),tn(h,t,r),kh;g.data==="$?"||Is(),e=Us(t,e,a)}else g.data==="$?"?(e.flags|=192,e.child=t.child,e=null):(t=S.treeContext,ne=bn(g.nextSibling),Be=e,Ht=!0,Ka=null,Rn=!1,t!==null&&(cn[fn++]=$n,cn[fn++]=Kn,cn[fn++]=Qa,$n=t.id,Kn=t.overflow,Qa=e),e=Ns(e,r.children),e.flags|=4096);return e}return o?(ba(),o=r.fallback,g=e.mode,S=t.child,R=S.sibling,r=Qn(S,{mode:"hidden",children:r.children}),r.subtreeFlags=S.subtreeFlags&65011712,R!==null?o=Qn(R,o):(o=Xa(o,g,a,null),o.flags|=2),o.return=e,r.return=e,r.sibling=o,e.child=r,r=o,o=e.child,g=t.child.memoizedState,g===null?g=Cs(a):(S=g.cachePool,S!==null?(R=ye._currentValue,S=S.parent!==R?{parent:R,pool:R}:S):S=Od(),g={baseLanes:g.baseLanes|a,cachePool:S}),o.memoizedState=g,o.childLanes=ks(t,h,a),e.memoizedState=Ms,r):(pa(e),a=t.child,t=a.sibling,a=Qn(a,{mode:"visible",children:r.children}),a.return=e,a.sibling=null,t!==null&&(h=e.deletions,h===null?(e.deletions=[t],e.flags|=16):h.push(t)),e.child=a,e.memoizedState=null,a)}function Ns(t,e){return e=ou({mode:"visible",children:e},t.mode),e.return=t,t.child=e}function ou(t,e){return t=Je(22,t,null,e),t.lanes=0,t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},t}function Us(t,e,a){return Zl(e,t.child,null,a),t=Ns(e,e.pendingProps.children),t.flags|=2,e.memoizedState=null,t}function qh(t,e,a){t.lanes|=e;var r=t.alternate;r!==null&&(r.lanes|=e),Io(t.return,e,a)}function Zs(t,e,a,r,o){var s=t.memoizedState;s===null?t.memoizedState={isBackwards:e,rendering:null,renderingStartTime:0,last:r,tail:a,tailMode:o}:(s.isBackwards=e,s.rendering=null,s.renderingStartTime=0,s.last=r,s.tail=a,s.tailMode=o)}function Gh(t,e,a){var r=e.pendingProps,o=r.revealOrder,s=r.tail;if(Me(t,e,r.children,a),r=pe.current,(r&2)!==0)r=r&1|2,e.flags|=128;else{if(t!==null&&(t.flags&128)!==0)t:for(t=e.child;t!==null;){if(t.tag===13)t.memoizedState!==null&&qh(t,a,e);else if(t.tag===19)qh(t,a,e);else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break t;for(;t.sibling===null;){if(t.return===null||t.return===e)break t;t=t.return}t.sibling.return=t.return,t=t.sibling}r&=1}switch(j(pe,r),o){case"forwards":for(a=e.child,o=null;a!==null;)t=a.alternate,t!==null&&lu(t)===null&&(o=a),a=a.sibling;a=o,a===null?(o=e.child,e.child=null):(o=a.sibling,a.sibling=null),Zs(e,!1,o,a,s);break;case"backwards":for(a=null,o=e.child,e.child=null;o!==null;){if(t=o.alternate,t!==null&&lu(t)===null){e.child=o;break}t=o.sibling,o.sibling=a,a=o,o=t}Zs(e,!0,a,null,s);break;case"together":Zs(e,!1,null,null,void 0);break;default:e.memoizedState=null}return e.child}function In(t,e,a){if(t!==null&&(e.dependencies=t.dependencies),Ea|=e.lanes,(a&e.childLanes)===0)if(t!==null){if(Or(t,e,a,!1),(a&e.childLanes)===0)return null}else return null;if(t!==null&&e.child!==t.child)throw Error(u(153));if(e.child!==null){for(t=e.child,a=Qn(t,t.pendingProps),e.child=a,a.return=e;t.sibling!==null;)t=t.sibling,a=a.sibling=Qn(t,t.pendingProps),a.return=e;a.sibling=null}return e.child}function Vs(t,e){return(t.lanes&e)!==0?!0:(t=t.dependencies,!!(t!==null&&Yi(t)))}function Gp(t,e,a){switch(e.tag){case 3:St(e,e.stateNode.containerInfo),ha(e,ye,t.memoizedState.cache),zr();break;case 27:case 5:Re(e);break;case 4:St(e,e.stateNode.containerInfo);break;case 10:ha(e,e.type,e.memoizedProps.value);break;case 13:var r=e.memoizedState;if(r!==null)return r.dehydrated!==null?(pa(e),e.flags|=128,null):(a&e.child.childLanes)!==0?Yh(t,e,a):(pa(e),t=In(t,e,a),t!==null?t.sibling:null);pa(e);break;case 19:var o=(t.flags&128)!==0;if(r=(a&e.childLanes)!==0,r||(Or(t,e,a,!1),r=(a&e.childLanes)!==0),o){if(r)return Gh(t,e,a);e.flags|=128}if(o=e.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),j(pe,pe.current),r)break;return null;case 22:case 23:return e.lanes=0,Vh(t,e,a);case 24:ha(e,ye,t.memoizedState.cache)}return In(t,e,a)}function Xh(t,e,a){if(t!==null)if(t.memoizedProps!==e.pendingProps)ze=!0;else{if(!Vs(t,a)&&(e.flags&128)===0)return ze=!1,Gp(t,e,a);ze=(t.flags&131072)!==0}else ze=!1,Ht&&(e.flags&1048576)!==0&&_d(e,Li,e.index);switch(e.lanes=0,e.tag){case 16:t:{t=e.pendingProps;var r=e.elementType,o=r._init;if(r=o(r._payload),e.type=r,typeof r=="function")Qo(r)?(t=tl(r,t),e.tag=1,e=jh(null,e,r,t,a)):(e.tag=0,e=Ds(null,e,r,t,a));else{if(r!=null){if(o=r.$$typeof,o===F){e.tag=11,e=Nh(null,e,r,t,a);break t}else if(o===ut){e.tag=14,e=Uh(null,e,r,t,a);break t}}throw e=yt(r)||r,Error(u(306,e,""))}}return e;case 0:return Ds(t,e,e.type,e.pendingProps,a);case 1:return r=e.type,o=tl(r,e.pendingProps),jh(t,e,r,o,a);case 3:t:{if(St(e,e.stateNode.containerInfo),t===null)throw Error(u(387));r=e.pendingProps;var s=e.memoizedState;o=s.element,is(t,e),Ur(e,r,null,a);var h=e.memoizedState;if(r=h.cache,ha(e,ye,r),r!==s.cache&&ts(e,[ye],a,!0),Nr(),r=h.element,s.isDehydrated)if(s={element:r,isDehydrated:!1,cache:h.cache},e.updateQueue.baseState=s,e.memoizedState=s,e.flags&256){e=Lh(t,e,r,a);break t}else if(r!==o){o=on(Error(u(424)),e),Tr(o),e=Lh(t,e,r,a);break t}else{switch(t=e.stateNode.containerInfo,t.nodeType){case 9:t=t.body;break;default:t=t.nodeName==="HTML"?t.ownerDocument.body:t}for(ne=bn(t.firstChild),Be=e,Ht=!0,Ka=null,Rn=!0,a=xh(e,null,r,a),e.child=a;a;)a.flags=a.flags&-3|4096,a=a.sibling}else{if(zr(),r===o){e=In(t,e,a);break t}Me(t,e,r,a)}e=e.child}return e;case 26:return uu(t,e),t===null?(a=Jm(e.type,null,e.pendingProps,null))?e.memoizedState=a:Ht||(a=e.type,t=e.pendingProps,r=wu(mt.current).createElement(a),r[ie]=e,r[Kt]=t,ke(r,a,t),Ae(r),e.stateNode=r):e.memoizedState=Jm(e.type,t.memoizedProps,e.pendingProps,t.memoizedState),null;case 27:return Re(e),t===null&&Ht&&(r=e.stateNode=Qm(e.type,e.pendingProps,mt.current),Be=e,Rn=!0,o=ne,Oa(e.type)?(yc=o,ne=bn(r.firstChild)):ne=o),Me(t,e,e.pendingProps.children,a),uu(t,e),t===null&&(e.flags|=4194304),e.child;case 5:return t===null&&Ht&&((o=r=ne)&&(r=p0(r,e.type,e.pendingProps,Rn),r!==null?(e.stateNode=r,Be=e,ne=bn(r.firstChild),Rn=!1,o=!0):o=!1),o||Ja(e)),Re(e),o=e.type,s=e.pendingProps,h=t!==null?t.memoizedProps:null,r=s.children,hc(o,s)?r=null:h!==null&&hc(o,h)&&(e.flags|=32),e.memoizedState!==null&&(o=ds(t,e,Zp,null,null,a),ai._currentValue=o),uu(t,e),Me(t,e,r,a),e.child;case 6:return t===null&&Ht&&((t=a=ne)&&(a=b0(a,e.pendingProps,Rn),a!==null?(e.stateNode=a,Be=e,ne=null,t=!0):t=!1),t||Ja(e)),null;case 13:return Yh(t,e,a);case 4:return St(e,e.stateNode.containerInfo),r=e.pendingProps,t===null?e.child=Zl(e,null,r,a):Me(t,e,r,a),e.child;case 11:return Nh(t,e,e.type,e.pendingProps,a);case 7:return Me(t,e,e.pendingProps,a),e.child;case 8:return Me(t,e,e.pendingProps.children,a),e.child;case 12:return Me(t,e,e.pendingProps.children,a),e.child;case 10:return r=e.pendingProps,ha(e,e.type,r.value),Me(t,e,r.children,a),e.child;case 9:return o=e.type._context,r=e.pendingProps.children,Wa(e),o=Ne(o),r=r(o),e.flags|=1,Me(t,e,r,a),e.child;case 14:return Uh(t,e,e.type,e.pendingProps,a);case 15:return Zh(t,e,e.type,e.pendingProps,a);case 19:return Gh(t,e,a);case 31:return r=e.pendingProps,a=e.mode,r={mode:r.mode,children:r.children},t===null?(a=ou(r,a),a.ref=e.ref,e.child=a,a.return=e,e=a):(a=Qn(t.child,r),a.ref=e.ref,e.child=a,a.return=e,e=a),e;case 22:return Vh(t,e,a);case 24:return Wa(e),r=Ne(ye),t===null?(o=as(),o===null&&(o=Jt,s=es(),o.pooledCache=s,s.refCount++,s!==null&&(o.pooledCacheLanes|=a),o=s),e.memoizedState={parent:r,cache:o},rs(e),ha(e,ye,o)):((t.lanes&a)!==0&&(is(t,e),Ur(e,null,null,a),Nr()),o=t.memoizedState,s=e.memoizedState,o.parent!==r?(o={parent:r,cache:r},e.memoizedState=o,e.lanes===0&&(e.memoizedState=e.updateQueue.baseState=o),ha(e,ye,r)):(r=s.cache,ha(e,ye,r),r!==o.cache&&ts(e,[ye],a,!0))),Me(t,e,e.pendingProps.children,a),e.child;case 29:throw e.pendingProps}throw Error(u(156,e.tag))}function ta(t){t.flags|=4}function Qh(t,e){if(e.type!=="stylesheet"||(e.state.loading&4)!==0)t.flags&=-16777217;else if(t.flags|=16777216,!tg(e)){if(e=dn.current,e!==null&&((Vt&4194048)===Vt?Dn!==null:(Vt&62914560)!==Vt&&(Vt&536870912)===0||e!==Dn))throw Cr=ls,Rd;t.flags|=8192}}function su(t,e){e!==null&&(t.flags|=4),t.flags&16384&&(e=t.tag!==22?xi():536870912,t.lanes|=e,jl|=e)}function Yr(t,e){if(!Ht)switch(t.tailMode){case"hidden":e=t.tail;for(var a=null;e!==null;)e.alternate!==null&&(a=e),e=e.sibling;a===null?t.tail=null:a.sibling=null;break;case"collapsed":a=t.tail;for(var r=null;a!==null;)a.alternate!==null&&(r=a),a=a.sibling;r===null?e||t.tail===null?t.tail=null:t.tail.sibling=null:r.sibling=null}}function te(t){var e=t.alternate!==null&&t.alternate.child===t.child,a=0,r=0;if(e)for(var o=t.child;o!==null;)a|=o.lanes|o.childLanes,r|=o.subtreeFlags&65011712,r|=o.flags&65011712,o.return=t,o=o.sibling;else for(o=t.child;o!==null;)a|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=t,o=o.sibling;return t.subtreeFlags|=r,t.childLanes=a,e}function Xp(t,e,a){var r=e.pendingProps;switch(Fo(e),e.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return te(e),null;case 1:return te(e),null;case 3:return a=e.stateNode,r=null,t!==null&&(r=t.memoizedState.cache),e.memoizedState.cache!==r&&(e.flags|=2048),Fn(ye),Wt(),a.pendingContext&&(a.context=a.pendingContext,a.pendingContext=null),(t===null||t.child===null)&&(Ar(e)?ta(e):t===null||t.memoizedState.isDehydrated&&(e.flags&256)===0||(e.flags|=1024,Ed())),te(e),null;case 26:return a=e.memoizedState,t===null?(ta(e),a!==null?(te(e),Qh(e,a)):(te(e),e.flags&=-16777217)):a?a!==t.memoizedState?(ta(e),te(e),Qh(e,a)):(te(e),e.flags&=-16777217):(t.memoizedProps!==r&&ta(e),te(e),e.flags&=-16777217),null;case 27:Ze(e),a=mt.current;var o=e.type;if(t!==null&&e.stateNode!=null)t.memoizedProps!==r&&ta(e);else{if(!r){if(e.stateNode===null)throw Error(u(166));return te(e),null}t=P.current,Ar(e)?wd(e):(t=Qm(o,r,a),e.stateNode=t,ta(e))}return te(e),null;case 5:if(Ze(e),a=e.type,t!==null&&e.stateNode!=null)t.memoizedProps!==r&&ta(e);else{if(!r){if(e.stateNode===null)throw Error(u(166));return te(e),null}if(t=P.current,Ar(e))wd(e);else{switch(o=wu(mt.current),t){case 1:t=o.createElementNS("http://www.w3.org/2000/svg",a);break;case 2:t=o.createElementNS("http://www.w3.org/1998/Math/MathML",a);break;default:switch(a){case"svg":t=o.createElementNS("http://www.w3.org/2000/svg",a);break;case"math":t=o.createElementNS("http://www.w3.org/1998/Math/MathML",a);break;case"script":t=o.createElement("div"),t.innerHTML=" - - - - - + + + + + +
diff --git a/internal/ui/dist/vite.svg b/internal/ui/dist/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/internal/ui/dist/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/package.json b/ui/package.json index d38f2df..5671a92 100644 --- a/ui/package.json +++ b/ui/package.json @@ -50,10 +50,10 @@ "prettier": "^3.6.2", "prettier-plugin-tailwindcss": "^0.6.14", "rollup-plugin-visualizer": "^6.0.3", - "shadcn": "^3.0.0", - "tw-animate-css": "^1.3.7", + "shadcn": "^3.1.0", + "tw-animate-css": "^1.3.8", "typescript": "~5.9.2", - "typescript-eslint": "^8.41.0", - "vite": "^7.1.3" + "typescript-eslint": "^8.42.0", + "vite": "^7.1.4" } } diff --git a/ui/public/vite.svg b/ui/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/ui/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/yarn.lock b/ui/yarn.lock index 5416812..1ed83dc 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -1430,79 +1430,79 @@ resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.6.tgz#66748315cc9a96d63403baa8671b2c124f8633aa" integrity sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA== -"@typescript-eslint/eslint-plugin@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.41.0.tgz#42209e2ce3e2274de0f5f9b75c777deedacaa558" - integrity sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw== +"@typescript-eslint/eslint-plugin@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.42.0.tgz#2172d0496c42eee8c7294b6661681100953fa88f" + integrity sha512-Aq2dPqsQkxHOLfb2OPv43RnIvfj05nw8v/6n3B2NABIPpHnjQnaLo9QGMTvml+tv4korl/Cjfrb/BYhoL8UUTQ== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.41.0" - "@typescript-eslint/type-utils" "8.41.0" - "@typescript-eslint/utils" "8.41.0" - "@typescript-eslint/visitor-keys" "8.41.0" + "@typescript-eslint/scope-manager" "8.42.0" + "@typescript-eslint/type-utils" "8.42.0" + "@typescript-eslint/utils" "8.42.0" + "@typescript-eslint/visitor-keys" "8.42.0" graphemer "^1.4.0" ignore "^7.0.0" natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.41.0.tgz#677f5b2b3fa947ee1eac4129220c051b1990d898" - integrity sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg== +"@typescript-eslint/parser@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.42.0.tgz#20ea66f4867981fb5bb62cbe1454250fc4a440ab" + integrity sha512-r1XG74QgShUgXph1BYseJ+KZd17bKQib/yF3SR+demvytiRXrwd12Blnz5eYGm8tXaeRdd4x88MlfwldHoudGg== dependencies: - "@typescript-eslint/scope-manager" "8.41.0" - "@typescript-eslint/types" "8.41.0" - "@typescript-eslint/typescript-estree" "8.41.0" - "@typescript-eslint/visitor-keys" "8.41.0" + "@typescript-eslint/scope-manager" "8.42.0" + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/typescript-estree" "8.42.0" + "@typescript-eslint/visitor-keys" "8.42.0" debug "^4.3.4" -"@typescript-eslint/project-service@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.41.0.tgz#08ebf882d413a038926e73fda36e00c3dba84882" - integrity sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ== +"@typescript-eslint/project-service@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.42.0.tgz#636eb3418b6c42c98554dce884943708bf41a583" + integrity sha512-vfVpLHAhbPjilrabtOSNcUDmBboQNrJUiNAGoImkZKnMjs2TIcWG33s4Ds0wY3/50aZmTMqJa6PiwkwezaAklg== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.41.0" - "@typescript-eslint/types" "^8.41.0" + "@typescript-eslint/tsconfig-utils" "^8.42.0" + "@typescript-eslint/types" "^8.42.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.41.0.tgz#c8aba12129cb9cead1f1727f58e6a0fcebeecdb5" - integrity sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ== +"@typescript-eslint/scope-manager@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.42.0.tgz#36016757bc85b46ea42bae47b61f9421eddedde3" + integrity sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw== dependencies: - "@typescript-eslint/types" "8.41.0" - "@typescript-eslint/visitor-keys" "8.41.0" + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/visitor-keys" "8.42.0" -"@typescript-eslint/tsconfig-utils@8.41.0", "@typescript-eslint/tsconfig-utils@^8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz#134dee36eb16cdd78095a20bca0516d10b5dda75" - integrity sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw== +"@typescript-eslint/tsconfig-utils@8.42.0", "@typescript-eslint/tsconfig-utils@^8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.42.0.tgz#21a3e74396fd7443ff930bc41b27789ba7e9236e" + integrity sha512-kHeFUOdwAJfUmYKjR3CLgZSglGHjbNTi1H8sTYRYV2xX6eNz4RyJ2LIgsDLKf8Yi0/GL1WZAC/DgZBeBft8QAQ== -"@typescript-eslint/type-utils@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.41.0.tgz#68d401e38fccf239925447e97bdbd048a9891ae5" - integrity sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ== +"@typescript-eslint/type-utils@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.42.0.tgz#d6733e7a9fbdf5af60c09c6038dffde13f4e4253" + integrity sha512-9KChw92sbPTYVFw3JLRH1ockhyR3zqqn9lQXol3/YbI6jVxzWoGcT3AsAW0mu1MY0gYtsXnUGV/AKpkAj5tVlQ== dependencies: - "@typescript-eslint/types" "8.41.0" - "@typescript-eslint/typescript-estree" "8.41.0" - "@typescript-eslint/utils" "8.41.0" + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/typescript-estree" "8.42.0" + "@typescript-eslint/utils" "8.42.0" debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.41.0", "@typescript-eslint/types@^8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.41.0.tgz#9935afeaae65e535abcbcee95383fa649c64d16d" - integrity sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag== +"@typescript-eslint/types@8.42.0", "@typescript-eslint/types@^8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.42.0.tgz#ae15c09cebda20473772902033328e87372db008" + integrity sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw== -"@typescript-eslint/typescript-estree@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.41.0.tgz#7c9cff8b4334ce96f14e9689692e8cf426ce4d59" - integrity sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ== +"@typescript-eslint/typescript-estree@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.42.0.tgz#593c3af87d4462252c0d7239d1720b84a1b56864" + integrity sha512-ku/uYtT4QXY8sl9EDJETD27o3Ewdi72hcXg1ah/kkUgBvAYHLwj2ofswFFNXS+FL5G+AGkxBtvGt8pFBHKlHsQ== dependencies: - "@typescript-eslint/project-service" "8.41.0" - "@typescript-eslint/tsconfig-utils" "8.41.0" - "@typescript-eslint/types" "8.41.0" - "@typescript-eslint/visitor-keys" "8.41.0" + "@typescript-eslint/project-service" "8.42.0" + "@typescript-eslint/tsconfig-utils" "8.42.0" + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/visitor-keys" "8.42.0" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -1510,22 +1510,22 @@ semver "^7.6.0" ts-api-utils "^2.1.0" -"@typescript-eslint/utils@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.41.0.tgz#17cb3b766c1626311004ea41ffd8c27eb226b953" - integrity sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A== +"@typescript-eslint/utils@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.42.0.tgz#95f8e0c697ff2f7da5f72e16135011f878d815c0" + integrity sha512-JnIzu7H3RH5BrKC4NoZqRfmjqCIS1u3hGZltDYJgkVdqAezl4L9d1ZLw+36huCujtSBSAirGINF/S4UxOcR+/g== dependencies: "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.41.0" - "@typescript-eslint/types" "8.41.0" - "@typescript-eslint/typescript-estree" "8.41.0" + "@typescript-eslint/scope-manager" "8.42.0" + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/typescript-estree" "8.42.0" -"@typescript-eslint/visitor-keys@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.41.0.tgz#16eb99b55d207f6688002a2cf425e039579aa9a9" - integrity sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg== +"@typescript-eslint/visitor-keys@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.42.0.tgz#87c6caaa1ac307bc73a87c1fc469f88f0162f27e" + integrity sha512-3WbiuzoEowaEn8RSnhJBrxSwX8ULYE9CXaPepS2C2W3NSA5NNIvBaslpBSBElPq0UGr0xVJlXFWOAKIkyylydQ== dependencies: - "@typescript-eslint/types" "8.41.0" + "@typescript-eslint/types" "8.42.0" eslint-visitor-keys "^4.2.1" "@vitejs/plugin-react@^5.0.2": @@ -3539,10 +3539,10 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -shadcn@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shadcn/-/shadcn-3.0.0.tgz#71e123c81c31980fbef5dba4ca7bf8f630a50bc7" - integrity sha512-GhMwMwcxR3GpDO2ctocvyetQ7BJAxSakaznBtYM/1mPRTjN0I0TAZCGSXdfj0VXOW4PaHbFEHsyUCnFcEf/1Ag== +shadcn@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/shadcn/-/shadcn-3.1.0.tgz#e2174a17f78b0aa47ade6b958f5999bd79e67a0d" + integrity sha512-tYem+5cR8kSo0g3V3JbVpZ5NmblrH+b52UX9pgYkpyalotjejldZCAIoCszF3VoKTvHRRxrifmTO8gdOpmkz1w== dependencies: "@antfu/ni" "^25.0.0" "@babel/core" "^7.28.0" @@ -3851,10 +3851,10 @@ tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.8.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tw-animate-css@^1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/tw-animate-css/-/tw-animate-css-1.3.7.tgz#39bd63799cf5a67d17de33fd1b9714f1e2c60967" - integrity sha512-lvLb3hTIpB5oGsk8JmLoAjeCHV58nKa2zHYn8yWOoG5JJusH3bhJlF2DLAZ/5NmJ+jyH3ssiAx/2KmbhavJy/A== +tw-animate-css@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/tw-animate-css/-/tw-animate-css-1.3.8.tgz#9d0c4820630fa04e8afe7a4670ab31d84ec44593" + integrity sha512-Qrk3PZ7l7wUcGYhwZloqfkWCmaXZAoqjkdbIDvzfGshwGtexa/DAs9koXxIkrpEasyevandomzCBAV1Yyop5rw== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -3882,15 +3882,15 @@ type-is@^2.0.0, type-is@^2.0.1: media-typer "^1.1.0" mime-types "^3.0.0" -typescript-eslint@^8.41.0: - version "8.41.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.41.0.tgz#a13879a5998717140fefb0d808c8c2fbde1cb769" - integrity sha512-n66rzs5OBXW3SFSnZHr2T685q1i4ODm2nulFJhMZBotaTavsS8TrI3d7bDlRSs9yWo7HmyWrN9qDu14Qv7Y0Dw== +typescript-eslint@^8.42.0: + version "8.42.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.42.0.tgz#e92f6c88569e202b361d5ca1655ad8e33a0554ea" + integrity sha512-ozR/rQn+aQXQxh1YgbCzQWDFrsi9mcg+1PM3l/z5o1+20P7suOIaNg515bpr/OYt6FObz/NHcBstydDLHWeEKg== dependencies: - "@typescript-eslint/eslint-plugin" "8.41.0" - "@typescript-eslint/parser" "8.41.0" - "@typescript-eslint/typescript-estree" "8.41.0" - "@typescript-eslint/utils" "8.41.0" + "@typescript-eslint/eslint-plugin" "8.42.0" + "@typescript-eslint/parser" "8.42.0" + "@typescript-eslint/typescript-estree" "8.42.0" + "@typescript-eslint/utils" "8.42.0" typescript@~5.9.2: version "5.9.2" @@ -3952,10 +3952,10 @@ vary@^1, vary@^1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vite@^7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.3.tgz#8d70cb02fd6346b4bf1329a6760800538ef0faea" - integrity sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw== +vite@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.4.tgz#354944affb55e1aff0157406b74e0d0a3232df9a" + integrity sha512-X5QFK4SGynAeeIt+A7ZWnApdUyHYm+pzv/8/A57LqSGcI88U6R6ipOs3uCesdc6yl7nl+zNO0t8LmqAdXcQihw== dependencies: esbuild "^0.25.0" fdir "^6.5.0"