diff --git a/Makefile b/Makefile index 7f98c67..ce7c8e6 100644 --- a/Makefile +++ b/Makefile @@ -70,7 +70,7 @@ clean: @echo ">> Cleaning artifacts..." @rm -rf $(BIN) docs/swagger.* docs/docs.go $(UI_DIR)/dist -dev: swagger ui +dev: swagger @echo ">> Starting Vite (frontend) and Go API (backend)..." @cd $(UI_DIR) && \ ( \ diff --git a/docs/docs.go b/docs/docs.go index ba0e89c..04322ec 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -803,6 +803,993 @@ const docTemplate = `{ } } }, + "/api/v1/labels": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Returns node labels for the organization in X-Org-ID. Filters: ` + "`" + `name` + "`" + `, ` + "`" + `value` + "`" + `, and ` + "`" + `q` + "`" + ` (name contains). Add ` + "`" + `include=node_pools` + "`" + ` to include linked node groups.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "labels" + ], + "summary": "List node labels (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Exact name", + "name": "name", + "in": "query" + }, + { + "type": "string", + "description": "Exact value", + "name": "value", + "in": "query" + }, + { + "type": "string", + "description": "Name contains (case-insensitive)", + "name": "q", + "in": "query" + }, + { + "type": "string", + "description": "Optional: node_pools", + "name": "include", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/labels.labelResponse" + } + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "500": { + "description": "failed to list node taints", + "schema": { + "type": "string" + } + } + } + }, + "post": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Creates a label. Optionally link to node pools.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "labels" + ], + "summary": "Create label (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "description": "Label payload", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/labels.createLabelRequest" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/labels.labelResponse" + } + }, + "400": { + "description": "invalid json / missing fields / invalid node_pool_ids", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "500": { + "description": "create failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/node-pools": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Returns node pools for the organization in X-Org-ID. Add ` + "`" + `include=servers` + "`" + ` to include attached servers. Filter by ` + "`" + `q` + "`" + ` (name contains).", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "List node pools (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Name contains (case-insensitive)", + "name": "q", + "in": "query" + }, + { + "type": "string", + "description": "Optional: servers", + "name": "include", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/nodepools.nodePoolResponse" + } + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "500": { + "description": "failed to list node groups", + "schema": { + "type": "string" + } + } + } + }, + "post": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Creates a node group. Optionally attach initial servers.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Create node group (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "description": "NodeGroup payload", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/nodepools.createNodePoolRequest" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/nodepools.nodePoolResponse" + } + }, + "400": { + "description": "invalid json / missing fields / invalid server_ids", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "500": { + "description": "create failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/node-pools/{id}": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Returns one node group. Add ` + "`" + `include=servers` + "`" + ` to include servers.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Get node group by ID (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Group ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Optional: servers", + "name": "include", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/nodepools.nodePoolResponse" + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "fetch failed", + "schema": { + "type": "string" + } + } + } + }, + "delete": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Permanently deletes the node pool.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Delete node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Group 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 node pool fields.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Update node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Pool ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Fields to update", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/nodepools.updateNodePoolRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/nodepools.nodePoolResponse" + } + }, + "400": { + "description": "invalid id / invalid json", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "update failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/node-pools/{id}/servers": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "List servers attached to a node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Group ID (UUID)", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/nodepools.serverBrief" + } + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "fetch failed", + "schema": { + "type": "string" + } + } + } + }, + "post": { + "security": [ + { + "BearerAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Attach servers to a node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Group ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Server IDs to attach", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/nodepools.attachServersRequest" + } + } + ], + "responses": { + "204": { + "description": "No Content", + "schema": { + "type": "string" + } + }, + "400": { + "description": "invalid id / invalid server_ids", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "attach failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/node-pools/{id}/servers/{serverId}": { + "delete": { + "security": [ + { + "BearerAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Detach one server from a node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Pool ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Server ID (UUID)", + "name": "serverId", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "No Content", + "schema": { + "type": "string" + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "detach failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/node-pools/{id}/taints": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "List taints attached to a node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Pool ID (UUID)", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/nodepools.taintBrief" + } + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "fetch failed", + "schema": { + "type": "string" + } + } + } + }, + "post": { + "security": [ + { + "BearerAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Attach taints to a node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Pool ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Taint IDs to attach", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/nodepools.attachTaintsRequest" + } + } + ], + "responses": { + "204": { + "description": "No Content", + "schema": { + "type": "string" + } + }, + "400": { + "description": "invalid id / invalid taint_ids", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "attach failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/node-pools/{id}/taints/{taintId}": { + "delete": { + "security": [ + { + "BearerAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Detach one taint from a node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Pool ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Taint ID (UUID)", + "name": "taintId", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "No Content", + "schema": { + "type": "string" + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "detach failed", + "schema": { + "type": "string" + } + } + } + } + }, "/api/v1/orgs": { "get": { "security": [ @@ -1840,6 +2827,553 @@ const docTemplate = `{ } } } + }, + "/api/v1/taints": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Returns node taints for the organization in X-Org-ID. Filters: ` + "`" + `name` + "`" + `, ` + "`" + `value` + "`" + `, and ` + "`" + `q` + "`" + ` (name contains). Add ` + "`" + `include=node_groups` + "`" + ` to include linked node groups.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "taints" + ], + "summary": "List node taints (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Exact name", + "name": "name", + "in": "query" + }, + { + "type": "string", + "description": "Exact value", + "name": "value", + "in": "query" + }, + { + "type": "string", + "description": "Name contains (case-insensitive)", + "name": "q", + "in": "query" + }, + { + "type": "string", + "description": "Optional: node_pools", + "name": "include", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/taints.taintResponse" + } + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "500": { + "description": "failed to list node taints", + "schema": { + "type": "string" + } + } + } + }, + "post": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Creates a taint. Optionally link to node pools.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "taints" + ], + "summary": "Create node taint (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "description": "Taint payload", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/taints.createTaintRequest" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/taints.taintResponse" + } + }, + "400": { + "description": "invalid json / missing fields / invalid node_pool_ids", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "500": { + "description": "create failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/taints/{id}": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Returns one taint. Add ` + "`" + `include=node_groups` + "`" + ` to include node groups.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "taints" + ], + "summary": "Get node taint by ID (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Taint 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/taints.taintResponse" + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "fetch failed", + "schema": { + "type": "string" + } + } + } + }, + "delete": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Permanently deletes the taint.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "taints" + ], + "summary": "Delete taint (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Taint ID (UUID)", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "No Content", + "schema": { + "type": "string" + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "500": { + "description": "delete failed", + "schema": { + "type": "string" + } + } + } + }, + "patch": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Partially update taint fields.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "taints" + ], + "summary": "Update node taint (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Taint ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Fields to update", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/taints.updateTaintRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/taints.taintResponse" + } + }, + "400": { + "description": "invalid id / invalid json", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "update failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/taints/{id}/node_pools": { + "post": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Links the taint to one or more node pools in the same organization.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "taints" + ], + "summary": "Attach taint to node pools (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Taint ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "IDs to attach", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/taints.addTaintToPoolRequest" + } + }, + { + "type": "string", + "description": "Optional: node_pools", + "name": "include", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/taints.taintResponse" + } + }, + "400": { + "description": "invalid id / invalid json / invalid node_pool_ids", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "attach failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/taints/{id}/node_pools/{poolId}": { + "delete": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Unlinks the taint from the specified node pool.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "taints" + ], + "summary": "Detach taint from a node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Taint ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Node Pool ID (UUID)", + "name": "poolId", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "No Content", + "schema": { + "type": "string" + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "detach failed", + "schema": { + "type": "string" + } + } + } + } } }, "definitions": { @@ -2065,6 +3599,54 @@ const docTemplate = `{ "updated_at": {} } }, + "labels.createLabelRequest": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "node_pool_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "value": { + "type": "string" + } + } + }, + "labels.labelResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "key": { + "type": "string" + }, + "node_groups": { + "type": "array", + "items": { + "$ref": "#/definitions/labels.nodePoolBrief" + } + }, + "value": { + "type": "string" + } + } + }, + "labels.nodePoolBrief": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, "models.Member": { "type": "object", "properties": { @@ -2181,6 +3763,105 @@ const docTemplate = `{ } } }, + "nodepools.attachServersRequest": { + "type": "object", + "properties": { + "server_ids": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "nodepools.attachTaintsRequest": { + "type": "object", + "properties": { + "taint_ids": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "nodepools.createNodePoolRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "server_ids": { + "description": "optional initial servers", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "nodepools.nodePoolResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "servers": { + "type": "array", + "items": { + "$ref": "#/definitions/nodepools.serverBrief" + } + } + } + }, + "nodepools.serverBrief": { + "type": "object", + "properties": { + "hostname": { + "type": "string" + }, + "id": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "role": { + "type": "string" + }, + "status": { + "type": "string" + } + } + }, + "nodepools.taintBrief": { + "type": "object", + "properties": { + "effect": { + "type": "string" + }, + "id": { + "type": "string" + }, + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "nodepools.updateNodePoolRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, "orgs.InviteInput": { "type": "object", "properties": { @@ -2363,6 +4044,85 @@ const docTemplate = `{ "type": "string" } } + }, + "taints.addTaintToPoolRequest": { + "type": "object", + "properties": { + "node_pool_ids": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "taints.createTaintRequest": { + "type": "object", + "properties": { + "effect": { + "type": "string" + }, + "key": { + "type": "string" + }, + "node_pool_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "value": { + "type": "string" + } + } + }, + "taints.nodePoolBrief": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "taints.taintResponse": { + "type": "object", + "properties": { + "effect": { + "type": "string" + }, + "id": { + "type": "string" + }, + "key": { + "type": "string" + }, + "node_groups": { + "type": "array", + "items": { + "$ref": "#/definitions/taints.nodePoolBrief" + } + }, + "value": { + "type": "string" + } + } + }, + "taints.updateTaintRequest": { + "type": "object", + "properties": { + "effect": { + "type": "string" + }, + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } } }, "securityDefinitions": { diff --git a/docs/swagger.json b/docs/swagger.json index ccdfb83..4a5d942 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -799,6 +799,993 @@ } } }, + "/api/v1/labels": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Returns node labels for the organization in X-Org-ID. Filters: `name`, `value`, and `q` (name contains). Add `include=node_pools` to include linked node groups.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "labels" + ], + "summary": "List node labels (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Exact name", + "name": "name", + "in": "query" + }, + { + "type": "string", + "description": "Exact value", + "name": "value", + "in": "query" + }, + { + "type": "string", + "description": "Name contains (case-insensitive)", + "name": "q", + "in": "query" + }, + { + "type": "string", + "description": "Optional: node_pools", + "name": "include", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/labels.labelResponse" + } + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "500": { + "description": "failed to list node taints", + "schema": { + "type": "string" + } + } + } + }, + "post": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Creates a label. Optionally link to node pools.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "labels" + ], + "summary": "Create label (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "description": "Label payload", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/labels.createLabelRequest" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/labels.labelResponse" + } + }, + "400": { + "description": "invalid json / missing fields / invalid node_pool_ids", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "500": { + "description": "create failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/node-pools": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Returns node pools for the organization in X-Org-ID. Add `include=servers` to include attached servers. Filter by `q` (name contains).", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "List node pools (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Name contains (case-insensitive)", + "name": "q", + "in": "query" + }, + { + "type": "string", + "description": "Optional: servers", + "name": "include", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/nodepools.nodePoolResponse" + } + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "500": { + "description": "failed to list node groups", + "schema": { + "type": "string" + } + } + } + }, + "post": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Creates a node group. Optionally attach initial servers.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Create node group (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "description": "NodeGroup payload", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/nodepools.createNodePoolRequest" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/nodepools.nodePoolResponse" + } + }, + "400": { + "description": "invalid json / missing fields / invalid server_ids", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "500": { + "description": "create failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/node-pools/{id}": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Returns one node group. Add `include=servers` to include servers.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Get node group by ID (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Group ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Optional: servers", + "name": "include", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/nodepools.nodePoolResponse" + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "fetch failed", + "schema": { + "type": "string" + } + } + } + }, + "delete": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Permanently deletes the node pool.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Delete node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Group 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 node pool fields.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Update node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Pool ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Fields to update", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/nodepools.updateNodePoolRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/nodepools.nodePoolResponse" + } + }, + "400": { + "description": "invalid id / invalid json", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "update failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/node-pools/{id}/servers": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "List servers attached to a node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Group ID (UUID)", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/nodepools.serverBrief" + } + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "fetch failed", + "schema": { + "type": "string" + } + } + } + }, + "post": { + "security": [ + { + "BearerAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Attach servers to a node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Group ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Server IDs to attach", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/nodepools.attachServersRequest" + } + } + ], + "responses": { + "204": { + "description": "No Content", + "schema": { + "type": "string" + } + }, + "400": { + "description": "invalid id / invalid server_ids", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "attach failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/node-pools/{id}/servers/{serverId}": { + "delete": { + "security": [ + { + "BearerAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Detach one server from a node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Pool ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Server ID (UUID)", + "name": "serverId", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "No Content", + "schema": { + "type": "string" + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "detach failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/node-pools/{id}/taints": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "List taints attached to a node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Pool ID (UUID)", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/nodepools.taintBrief" + } + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "fetch failed", + "schema": { + "type": "string" + } + } + } + }, + "post": { + "security": [ + { + "BearerAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Attach taints to a node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Pool ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Taint IDs to attach", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/nodepools.attachTaintsRequest" + } + } + ], + "responses": { + "204": { + "description": "No Content", + "schema": { + "type": "string" + } + }, + "400": { + "description": "invalid id / invalid taint_ids", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "attach failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/node-pools/{id}/taints/{taintId}": { + "delete": { + "security": [ + { + "BearerAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "node-pools" + ], + "summary": "Detach one taint from a node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Pool ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Taint ID (UUID)", + "name": "taintId", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "No Content", + "schema": { + "type": "string" + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "detach failed", + "schema": { + "type": "string" + } + } + } + } + }, "/api/v1/orgs": { "get": { "security": [ @@ -1836,6 +2823,553 @@ } } } + }, + "/api/v1/taints": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Returns node taints for the organization in X-Org-ID. Filters: `name`, `value`, and `q` (name contains). Add `include=node_groups` to include linked node groups.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "taints" + ], + "summary": "List node taints (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Exact name", + "name": "name", + "in": "query" + }, + { + "type": "string", + "description": "Exact value", + "name": "value", + "in": "query" + }, + { + "type": "string", + "description": "Name contains (case-insensitive)", + "name": "q", + "in": "query" + }, + { + "type": "string", + "description": "Optional: node_pools", + "name": "include", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/taints.taintResponse" + } + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "500": { + "description": "failed to list node taints", + "schema": { + "type": "string" + } + } + } + }, + "post": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Creates a taint. Optionally link to node pools.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "taints" + ], + "summary": "Create node taint (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "description": "Taint payload", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/taints.createTaintRequest" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/taints.taintResponse" + } + }, + "400": { + "description": "invalid json / missing fields / invalid node_pool_ids", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "500": { + "description": "create failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/taints/{id}": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Returns one taint. Add `include=node_groups` to include node groups.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "taints" + ], + "summary": "Get node taint by ID (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Taint 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/taints.taintResponse" + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "fetch failed", + "schema": { + "type": "string" + } + } + } + }, + "delete": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Permanently deletes the taint.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "taints" + ], + "summary": "Delete taint (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Taint ID (UUID)", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "No Content", + "schema": { + "type": "string" + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "500": { + "description": "delete failed", + "schema": { + "type": "string" + } + } + } + }, + "patch": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Partially update taint fields.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "taints" + ], + "summary": "Update node taint (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Node Taint ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Fields to update", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/taints.updateTaintRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/taints.taintResponse" + } + }, + "400": { + "description": "invalid id / invalid json", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "update failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/taints/{id}/node_pools": { + "post": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Links the taint to one or more node pools in the same organization.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "taints" + ], + "summary": "Attach taint to node pools (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Taint ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "IDs to attach", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/taints.addTaintToPoolRequest" + } + }, + { + "type": "string", + "description": "Optional: node_pools", + "name": "include", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/taints.taintResponse" + } + }, + "400": { + "description": "invalid id / invalid json / invalid node_pool_ids", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "attach failed", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/v1/taints/{id}/node_pools/{poolId}": { + "delete": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Unlinks the taint from the specified node pool.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "taints" + ], + "summary": "Detach taint from a node pool (org scoped)", + "parameters": [ + { + "type": "string", + "description": "Organization UUID", + "name": "X-Org-ID", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Taint ID (UUID)", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Node Pool ID (UUID)", + "name": "poolId", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "No Content", + "schema": { + "type": "string" + } + }, + "400": { + "description": "invalid id", + "schema": { + "type": "string" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "string" + } + }, + "403": { + "description": "organization required", + "schema": { + "type": "string" + } + }, + "404": { + "description": "not found", + "schema": { + "type": "string" + } + }, + "500": { + "description": "detach failed", + "schema": { + "type": "string" + } + } + } + } } }, "definitions": { @@ -2061,6 +3595,54 @@ "updated_at": {} } }, + "labels.createLabelRequest": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "node_pool_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "value": { + "type": "string" + } + } + }, + "labels.labelResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "key": { + "type": "string" + }, + "node_groups": { + "type": "array", + "items": { + "$ref": "#/definitions/labels.nodePoolBrief" + } + }, + "value": { + "type": "string" + } + } + }, + "labels.nodePoolBrief": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, "models.Member": { "type": "object", "properties": { @@ -2177,6 +3759,105 @@ } } }, + "nodepools.attachServersRequest": { + "type": "object", + "properties": { + "server_ids": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "nodepools.attachTaintsRequest": { + "type": "object", + "properties": { + "taint_ids": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "nodepools.createNodePoolRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "server_ids": { + "description": "optional initial servers", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "nodepools.nodePoolResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "servers": { + "type": "array", + "items": { + "$ref": "#/definitions/nodepools.serverBrief" + } + } + } + }, + "nodepools.serverBrief": { + "type": "object", + "properties": { + "hostname": { + "type": "string" + }, + "id": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "role": { + "type": "string" + }, + "status": { + "type": "string" + } + } + }, + "nodepools.taintBrief": { + "type": "object", + "properties": { + "effect": { + "type": "string" + }, + "id": { + "type": "string" + }, + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "nodepools.updateNodePoolRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, "orgs.InviteInput": { "type": "object", "properties": { @@ -2359,6 +4040,85 @@ "type": "string" } } + }, + "taints.addTaintToPoolRequest": { + "type": "object", + "properties": { + "node_pool_ids": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "taints.createTaintRequest": { + "type": "object", + "properties": { + "effect": { + "type": "string" + }, + "key": { + "type": "string" + }, + "node_pool_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "value": { + "type": "string" + } + } + }, + "taints.nodePoolBrief": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "taints.taintResponse": { + "type": "object", + "properties": { + "effect": { + "type": "string" + }, + "id": { + "type": "string" + }, + "key": { + "type": "string" + }, + "node_groups": { + "type": "array", + "items": { + "$ref": "#/definitions/taints.nodePoolBrief" + } + }, + "value": { + "type": "string" + } + } + }, + "taints.updateTaintRequest": { + "type": "object", + "properties": { + "effect": { + "type": "string" + }, + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } } }, "securityDefinitions": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index eeddfca..3966341 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -152,6 +152,37 @@ definitions: type: string updated_at: {} type: object + labels.createLabelRequest: + properties: + key: + type: string + node_pool_ids: + items: + type: string + type: array + value: + type: string + type: object + labels.labelResponse: + properties: + id: + type: string + key: + type: string + node_groups: + items: + $ref: '#/definitions/labels.nodePoolBrief' + type: array + value: + type: string + type: object + labels.nodePoolBrief: + properties: + id: + type: string + name: + type: string + type: object models.Member: properties: created_at: @@ -229,6 +260,70 @@ definitions: updated_at: type: string type: object + nodepools.attachServersRequest: + properties: + server_ids: + items: + type: string + type: array + type: object + nodepools.attachTaintsRequest: + properties: + taint_ids: + items: + type: string + type: array + type: object + nodepools.createNodePoolRequest: + properties: + name: + type: string + server_ids: + description: optional initial servers + items: + type: string + type: array + type: object + nodepools.nodePoolResponse: + properties: + id: + type: string + name: + type: string + servers: + items: + $ref: '#/definitions/nodepools.serverBrief' + type: array + type: object + nodepools.serverBrief: + properties: + hostname: + type: string + id: + type: string + ip: + type: string + role: + type: string + status: + type: string + type: object + nodepools.taintBrief: + properties: + effect: + type: string + id: + type: string + key: + type: string + value: + type: string + type: object + nodepools.updateNodePoolRequest: + properties: + name: + type: string + type: object orgs.InviteInput: properties: email: @@ -351,6 +446,57 @@ definitions: updated_at: type: string type: object + taints.addTaintToPoolRequest: + properties: + node_pool_ids: + items: + type: string + type: array + type: object + taints.createTaintRequest: + properties: + effect: + type: string + key: + type: string + node_pool_ids: + items: + type: string + type: array + value: + type: string + type: object + taints.nodePoolBrief: + properties: + id: + type: string + name: + type: string + type: object + taints.taintResponse: + properties: + effect: + type: string + id: + type: string + key: + type: string + node_groups: + items: + $ref: '#/definitions/taints.nodePoolBrief' + type: array + value: + type: string + type: object + taints.updateTaintRequest: + properties: + effect: + type: string + key: + type: string + value: + type: string + type: object info: contact: {} description: API for managing K3s clusters across cloud providers @@ -861,6 +1007,649 @@ paths: summary: Resend email verification tags: - auth + /api/v1/labels: + get: + consumes: + - application/json + description: 'Returns node labels for the organization in X-Org-ID. Filters: + `name`, `value`, and `q` (name contains). Add `include=node_pools` to include + linked node groups.' + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Exact name + in: query + name: name + type: string + - description: Exact value + in: query + name: value + type: string + - description: Name contains (case-insensitive) + in: query + name: q + type: string + - description: 'Optional: node_pools' + in: query + name: include + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/labels.labelResponse' + type: array + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "500": + description: failed to list node taints + schema: + type: string + security: + - BearerAuth: [] + summary: List node labels (org scoped) + tags: + - labels + post: + consumes: + - application/json + description: Creates a label. Optionally link to node pools. + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Label payload + in: body + name: body + required: true + schema: + $ref: '#/definitions/labels.createLabelRequest' + produces: + - application/json + responses: + "201": + description: Created + schema: + $ref: '#/definitions/labels.labelResponse' + "400": + description: invalid json / missing fields / invalid node_pool_ids + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "500": + description: create failed + schema: + type: string + security: + - BearerAuth: [] + summary: Create label (org scoped) + tags: + - labels + /api/v1/node-pools: + get: + consumes: + - application/json + description: Returns node pools for the organization in X-Org-ID. Add `include=servers` + to include attached servers. Filter by `q` (name contains). + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Name contains (case-insensitive) + in: query + name: q + type: string + - description: 'Optional: servers' + in: query + name: include + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/nodepools.nodePoolResponse' + type: array + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "500": + description: failed to list node groups + schema: + type: string + security: + - BearerAuth: [] + summary: List node pools (org scoped) + tags: + - node-pools + post: + consumes: + - application/json + description: Creates a node group. Optionally attach initial servers. + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: NodeGroup payload + in: body + name: body + required: true + schema: + $ref: '#/definitions/nodepools.createNodePoolRequest' + produces: + - application/json + responses: + "201": + description: Created + schema: + $ref: '#/definitions/nodepools.nodePoolResponse' + "400": + description: invalid json / missing fields / invalid server_ids + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "500": + description: create failed + schema: + type: string + security: + - BearerAuth: [] + summary: Create node group (org scoped) + tags: + - node-pools + /api/v1/node-pools/{id}: + delete: + consumes: + - application/json + description: Permanently deletes the node pool. + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Node Group 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 node pool (org scoped) + tags: + - node-pools + get: + consumes: + - application/json + description: Returns one node group. Add `include=servers` to include servers. + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Node Group ID (UUID) + in: path + name: id + required: true + type: string + - description: 'Optional: servers' + in: query + name: include + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/nodepools.nodePoolResponse' + "400": + description: invalid id + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "404": + description: not found + schema: + type: string + "500": + description: fetch failed + schema: + type: string + security: + - BearerAuth: [] + summary: Get node group by ID (org scoped) + tags: + - node-pools + patch: + consumes: + - application/json + description: Partially update node pool fields. + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Node Pool ID (UUID) + in: path + name: id + required: true + type: string + - description: Fields to update + in: body + name: body + required: true + schema: + $ref: '#/definitions/nodepools.updateNodePoolRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/nodepools.nodePoolResponse' + "400": + description: invalid id / invalid json + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "404": + description: not found + schema: + type: string + "500": + description: update failed + schema: + type: string + security: + - BearerAuth: [] + summary: Update node pool (org scoped) + tags: + - node-pools + /api/v1/node-pools/{id}/servers: + get: + consumes: + - application/json + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Node Group ID (UUID) + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/nodepools.serverBrief' + type: array + "400": + description: invalid id + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "404": + description: not found + schema: + type: string + "500": + description: fetch failed + schema: + type: string + security: + - BearerAuth: [] + summary: List servers attached to a node pool (org scoped) + tags: + - node-pools + post: + consumes: + - application/json + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Node Group ID (UUID) + in: path + name: id + required: true + type: string + - description: Server IDs to attach + in: body + name: body + required: true + schema: + $ref: '#/definitions/nodepools.attachServersRequest' + produces: + - application/json + responses: + "204": + description: No Content + schema: + type: string + "400": + description: invalid id / invalid server_ids + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "404": + description: not found + schema: + type: string + "500": + description: attach failed + schema: + type: string + security: + - BearerAuth: [] + summary: Attach servers to a node pool (org scoped) + tags: + - node-pools + /api/v1/node-pools/{id}/servers/{serverId}: + delete: + consumes: + - application/json + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Node Pool ID (UUID) + in: path + name: id + required: true + type: string + - description: Server ID (UUID) + in: path + name: serverId + required: true + type: string + produces: + - application/json + responses: + "204": + description: No Content + schema: + type: string + "400": + description: invalid id + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "404": + description: not found + schema: + type: string + "500": + description: detach failed + schema: + type: string + security: + - BearerAuth: [] + summary: Detach one server from a node pool (org scoped) + tags: + - node-pools + /api/v1/node-pools/{id}/taints: + get: + consumes: + - application/json + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Node Pool ID (UUID) + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/nodepools.taintBrief' + type: array + "400": + description: invalid id + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "404": + description: not found + schema: + type: string + "500": + description: fetch failed + schema: + type: string + security: + - BearerAuth: [] + summary: List taints attached to a node pool (org scoped) + tags: + - node-pools + post: + consumes: + - application/json + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Node Pool ID (UUID) + in: path + name: id + required: true + type: string + - description: Taint IDs to attach + in: body + name: body + required: true + schema: + $ref: '#/definitions/nodepools.attachTaintsRequest' + produces: + - application/json + responses: + "204": + description: No Content + schema: + type: string + "400": + description: invalid id / invalid taint_ids + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "404": + description: not found + schema: + type: string + "500": + description: attach failed + schema: + type: string + security: + - BearerAuth: [] + summary: Attach taints to a node pool (org scoped) + tags: + - node-pools + /api/v1/node-pools/{id}/taints/{taintId}: + delete: + consumes: + - application/json + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Node Pool ID (UUID) + in: path + name: id + required: true + type: string + - description: Taint ID (UUID) + in: path + name: taintId + required: true + type: string + produces: + - application/json + responses: + "204": + description: No Content + schema: + type: string + "400": + description: invalid id + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "404": + description: not found + schema: + type: string + "500": + description: detach failed + schema: + type: string + security: + - BearerAuth: [] + summary: Detach one taint from a node pool (org scoped) + tags: + - node-pools /api/v1/orgs: get: produces: @@ -1534,6 +2323,364 @@ paths: summary: Download ssh key files by ID (org scoped) tags: - ssh + /api/v1/taints: + get: + consumes: + - application/json + description: 'Returns node taints for the organization in X-Org-ID. Filters: + `name`, `value`, and `q` (name contains). Add `include=node_groups` to include + linked node groups.' + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Exact name + in: query + name: name + type: string + - description: Exact value + in: query + name: value + type: string + - description: Name contains (case-insensitive) + in: query + name: q + type: string + - description: 'Optional: node_pools' + in: query + name: include + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/taints.taintResponse' + type: array + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "500": + description: failed to list node taints + schema: + type: string + security: + - BearerAuth: [] + summary: List node taints (org scoped) + tags: + - taints + post: + consumes: + - application/json + description: Creates a taint. Optionally link to node pools. + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Taint payload + in: body + name: body + required: true + schema: + $ref: '#/definitions/taints.createTaintRequest' + produces: + - application/json + responses: + "201": + description: Created + schema: + $ref: '#/definitions/taints.taintResponse' + "400": + description: invalid json / missing fields / invalid node_pool_ids + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "500": + description: create failed + schema: + type: string + security: + - BearerAuth: [] + summary: Create node taint (org scoped) + tags: + - taints + /api/v1/taints/{id}: + delete: + consumes: + - application/json + description: Permanently deletes the taint. + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Node Taint ID (UUID) + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "204": + description: No Content + schema: + type: string + "400": + description: invalid id + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "500": + description: delete failed + schema: + type: string + security: + - BearerAuth: [] + summary: Delete taint (org scoped) + tags: + - taints + get: + consumes: + - application/json + description: Returns one taint. Add `include=node_groups` to include node groups. + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Node Taint 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/taints.taintResponse' + "400": + description: invalid id + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "404": + description: not found + schema: + type: string + "500": + description: fetch failed + schema: + type: string + security: + - BearerAuth: [] + summary: Get node taint by ID (org scoped) + tags: + - taints + patch: + consumes: + - application/json + description: Partially update taint fields. + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Node Taint ID (UUID) + in: path + name: id + required: true + type: string + - description: Fields to update + in: body + name: body + required: true + schema: + $ref: '#/definitions/taints.updateTaintRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/taints.taintResponse' + "400": + description: invalid id / invalid json + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "404": + description: not found + schema: + type: string + "500": + description: update failed + schema: + type: string + security: + - BearerAuth: [] + summary: Update node taint (org scoped) + tags: + - taints + /api/v1/taints/{id}/node_pools: + post: + consumes: + - application/json + description: Links the taint to one or more node pools in the same organization. + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Taint ID (UUID) + in: path + name: id + required: true + type: string + - description: IDs to attach + in: body + name: body + required: true + schema: + $ref: '#/definitions/taints.addTaintToPoolRequest' + - description: 'Optional: node_pools' + in: query + name: include + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/taints.taintResponse' + "400": + description: invalid id / invalid json / invalid node_pool_ids + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "404": + description: not found + schema: + type: string + "500": + description: attach failed + schema: + type: string + security: + - BearerAuth: [] + summary: Attach taint to node pools (org scoped) + tags: + - taints + /api/v1/taints/{id}/node_pools/{poolId}: + delete: + consumes: + - application/json + description: Unlinks the taint from the specified node pool. + parameters: + - description: Organization UUID + in: header + name: X-Org-ID + required: true + type: string + - description: Taint ID (UUID) + in: path + name: id + required: true + type: string + - description: Node Pool ID (UUID) + in: path + name: poolId + required: true + type: string + produces: + - application/json + responses: + "204": + description: No Content + schema: + type: string + "400": + description: invalid id + schema: + type: string + "401": + description: Unauthorized + schema: + type: string + "403": + description: organization required + schema: + type: string + "404": + description: not found + schema: + type: string + "500": + description: detach failed + schema: + type: string + security: + - BearerAuth: [] + summary: Detach taint from a node pool (org scoped) + tags: + - taints schemes: - http securityDefinitions: diff --git a/go.mod b/go.mod index 2a10cc6..5414723 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang-jwt/jwt/v5 v5.3.0 github.com/google/uuid v1.6.0 github.com/joho/godotenv v1.5.1 - github.com/spf13/cobra v1.9.1 + github.com/spf13/cobra v1.10.1 github.com/spf13/viper v1.20.1 github.com/swaggo/http-swagger/v2 v2.0.2 github.com/swaggo/swag v1.16.6 @@ -23,12 +23,14 @@ require ( require ( github.com/KyleBanks/depth v1.2.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.20.0 // indirect github.com/go-openapi/spec v0.20.6 // indirect github.com/go-openapi/swag v0.19.15 // indirect github.com/go-viper/mapstructure/v2 v2.2.1 // indirect + github.com/google/go-cmp v0.7.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect @@ -39,18 +41,20 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/mailru/easyjson v0.7.6 // indirect github.com/pelletier/go-toml/v2 v2.2.3 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/sagikazarmark/locafero v0.7.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.12.0 // indirect github.com/spf13/cast v1.7.1 // indirect - github.com/spf13/pflag v1.0.6 // indirect + github.com/spf13/pflag v1.0.9 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/swaggo/files/v2 v2.0.0 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.9.0 // indirect - golang.org/x/mod v0.26.0 // indirect + golang.org/x/mod v0.27.0 // indirect golang.org/x/sync v0.16.0 // indirect golang.org/x/sys v0.35.0 // indirect - golang.org/x/tools v0.35.0 // indirect + golang.org/x/tools v0.36.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index 9572f0d..87e77c0 100644 --- a/go.sum +++ b/go.sum @@ -3,8 +3,9 @@ github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6Xge github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/earthboundkid/versioninfo/v2 v2.24.1 h1:SJTMHaoUx3GzjjnUO1QzP3ZXK6Ee/nbWyCm58eY3oUg= github.com/earthboundkid/versioninfo/v2 v2.24.1/go.mod h1:VcWEooDEuyUJnMfbdTh0uFN4cfEIg+kHMuWB2CDCLjw= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -29,8 +30,9 @@ github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIx github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -65,10 +67,11 @@ github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsFaodPcyo= github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k= @@ -80,8 +83,12 @@ 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= github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -118,8 +125,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= -golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -159,6 +166,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= +golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= +golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= @@ -176,8 +185,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= -golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/api/routes.go b/internal/api/routes.go index 7c0a56e..b45d0d9 100644 --- a/internal/api/routes.go +++ b/internal/api/routes.go @@ -6,9 +6,12 @@ import ( "github.com/glueops/autoglue/internal/config" "github.com/glueops/autoglue/internal/handlers/authn" "github.com/glueops/autoglue/internal/handlers/health" + "github.com/glueops/autoglue/internal/handlers/labels" + "github.com/glueops/autoglue/internal/handlers/nodepools" "github.com/glueops/autoglue/internal/handlers/orgs" "github.com/glueops/autoglue/internal/handlers/servers" "github.com/glueops/autoglue/internal/handlers/ssh" + "github.com/glueops/autoglue/internal/handlers/taints" "github.com/glueops/autoglue/internal/middleware" "github.com/glueops/autoglue/internal/ui" "github.com/go-chi/chi/v5" @@ -80,6 +83,42 @@ func RegisterRoutes(r chi.Router) { s.Delete("/{id}", servers.DeleteServer) }) + v1.Route("/node-pools", func(np chi.Router) { + np.Use(authMW) + np.Get("/", nodepools.ListNodePools) + np.Post("/", nodepools.CreateNodePool) + np.Get("/{id}", nodepools.GetNodePool) + np.Patch("/{id}", nodepools.UpdateNodePool) + np.Delete("/{id}", nodepools.DeleteNodePool) + + // servers + np.Get("/{id}/servers", nodepools.ListNodePoolServers) + np.Post("/{id}/servers", nodepools.AttachNodePoolServers) + np.Delete("/{id}/servers/{serverId}", nodepools.DetachNodePoolServer) + + // taints + np.Get("/{id}/taints", nodepools.ListNodePoolTaints) + np.Post("/{id}/taints", nodepools.AttachNodePoolTaints) + np.Delete("/{id}/taints/{taintId}", nodepools.DetachNodePoolTaint) + }) + + v1.Route("/taints", func(t chi.Router) { + t.Use(authMW) + t.Get("/", taints.ListTaints) + t.Post("/", taints.CreateTaint) + t.Get("/{id}", taints.GetTaint) + t.Patch("/{id}", taints.UpdateTaint) + t.Delete("/{id}", taints.DeleteTaint) + t.Post("/{id}/node_pools", taints.AddTaintToNodePool) + t.Delete("/{id}/node_pools/{poolId}", taints.RemoveTaintFromNodePool) + }) + + v1.Route("/labels", func(l chi.Router) { + l.Use(authMW) + l.Get("/", labels.ListLabels) + l.Post("/", labels.CreateLabel) + l.Get("/{id}", labels.GetLabel) + }) }) }) diff --git a/internal/db/database.go b/internal/db/database.go index 1b984a3..b17cea6 100644 --- a/internal/db/database.go +++ b/internal/db/database.go @@ -26,17 +26,22 @@ func Connect() { } err = DB.AutoMigrate( + &models.Annotation{}, + &models.Cluster{}, &models.Credential{}, &models.EmailVerification{}, &models.Invitation{}, + &models.Label{}, &models.MasterKey{}, &models.Member{}, + &models.NodePool{}, &models.Organization{}, &models.OrganizationKey{}, &models.PasswordReset{}, &models.RefreshToken{}, &models.Server{}, &models.SshKey{}, + &models.Taint{}, &models.User{}, ) if err != nil { diff --git a/internal/db/models/annotation.go b/internal/db/models/annotation.go new file mode 100644 index 0000000..8e6a87a --- /dev/null +++ b/internal/db/models/annotation.go @@ -0,0 +1,13 @@ +package models + +import "github.com/google/uuid" + +type Annotation struct { + ID uuid.UUID `gorm:"type:uuid;default:gen_random_uuid();primaryKey" json:"id"` + OrganizationID uuid.UUID `gorm:"type:uuid;not null" json:"organization_id"` + Organization Organization `gorm:"foreignKey:OrganizationID;constraint:OnDelete:CASCADE" json:"organization"` + Name string `gorm:"not null" json:"name"` + Value string `gorm:"not null" json:"value"` + NodePools []NodePool `gorm:"many2many:node_annotations;constraint:OnDelete:CASCADE" json:"servers,omitempty"` + Timestamped +} diff --git a/internal/db/models/cluster.go b/internal/db/models/cluster.go new file mode 100644 index 0000000..f4b6bdc --- /dev/null +++ b/internal/db/models/cluster.go @@ -0,0 +1,17 @@ +package models + +import "github.com/google/uuid" + +type Cluster struct { + ID uuid.UUID `gorm:"type:uuid;default:gen_random_uuid();primaryKey" json:"id"` + OrganizationID uuid.UUID `gorm:"type:uuid;not null" json:"organization_id"` + Organization Organization `gorm:"foreignKey:OrganizationID;constraint:OnDelete:CASCADE" json:"organization"` + Name string `gorm:"not null" json:"name"` + Provider string `json:"provider"` + Region string `json:"region"` + Status string `json:"status"` + EncryptedKubeconfig string `gorm:"type:text" json:"-"` + KubeIV string `json:"-"` + KubeTag string `json:"-"` + NodePools []NodePool `gorm:"many2many:cluster_node_pools;constraint:OnDelete:CASCADE" json:"node_pools,omitempty"` +} diff --git a/internal/db/models/label.go b/internal/db/models/label.go new file mode 100644 index 0000000..3eb529a --- /dev/null +++ b/internal/db/models/label.go @@ -0,0 +1,13 @@ +package models + +import "github.com/google/uuid" + +type Label struct { + ID uuid.UUID `gorm:"type:uuid;default:gen_random_uuid();primaryKey" json:"id"` + OrganizationID uuid.UUID `gorm:"type:uuid;not null" json:"organization_id"` + Organization Organization `gorm:"foreignKey:OrganizationID;constraint:OnDelete:CASCADE" json:"organization"` + Key string `gorm:"not null" json:"key"` + Value string `gorm:"not null" json:"value"` + NodePools []NodePool `gorm:"many2many:node_labels;constraint:OnDelete:CASCADE" json:"servers,omitempty"` + Timestamped +} diff --git a/internal/db/models/node-pool.go b/internal/db/models/node-pool.go new file mode 100644 index 0000000..92b81e2 --- /dev/null +++ b/internal/db/models/node-pool.go @@ -0,0 +1,16 @@ +package models + +import "github.com/google/uuid" + +type NodePool struct { + ID uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id"` + OrganizationID uuid.UUID `gorm:"type:uuid;not null" json:"organization_id"` + Organization Organization `gorm:"foreignKey:OrganizationID;constraint:OnDelete:CASCADE" json:"organization"` + Name string `gorm:"not null" json:"name"` + Servers []Server `gorm:"many2many:node_servers;constraint:OnDelete:CASCADE" json:"servers,omitempty"` + Annotations []Annotation `gorm:"many2many:node_annotations;constraint:OnDelete:CASCADE" json:"annotations,omitempty"` + Labels []Label `gorm:"many2many:node_labels;constraint:OnDelete:CASCADE" json:"labels,omitempty"` + Taints []Taint `gorm:"many2many:node_taints;constraint:OnDelete:CASCADE" json:"taints,omitempty"` + Clusters []Cluster `gorm:"many2many:cluster_node_pools;constraint:OnDelete:CASCADE" json:"clusters,omitempty"` + Timestamped +} diff --git a/internal/db/models/server.go b/internal/db/models/server.go index 8230d86..cd3bee3 100644 --- a/internal/db/models/server.go +++ b/internal/db/models/server.go @@ -13,5 +13,6 @@ type Server struct { SshKey SshKey `gorm:"foreignKey:SshKeyID"` Role string `gorm:"not null"` // e.g., "master", "worker", "bastion" Status string `gorm:"default:'pending'"` // pending, provisioning, ready, failed + NodePools []NodePool `gorm:"many2many:node_servers;constraint:OnDelete:CASCADE" json:"servers,omitempty"` Timestamped } diff --git a/internal/db/models/taint.go b/internal/db/models/taint.go new file mode 100644 index 0000000..b64fb0c --- /dev/null +++ b/internal/db/models/taint.go @@ -0,0 +1,14 @@ +package models + +import "github.com/google/uuid" + +type Taint struct { + ID uuid.UUID `gorm:"type:uuid;default:gen_random_uuid();primaryKey" json:"id"` + OrganizationID uuid.UUID `gorm:"type:uuid;not null" json:"organization_id"` + Organization Organization `gorm:"foreignKey:OrganizationID;constraint:OnDelete:CASCADE" json:"organization"` + Key string `gorm:"not null" json:"key"` + Value string `gorm:"not null" json:"value"` + Effect string `gorm:"not null" json:"effect"` + NodePools []NodePool `gorm:"many2many:node_taints;constraint:OnDelete:CASCADE" json:"servers,omitempty"` + Timestamped +} diff --git a/internal/handlers/annotations/annotations.go b/internal/handlers/annotations/annotations.go new file mode 100644 index 0000000..5d7f7ec --- /dev/null +++ b/internal/handlers/annotations/annotations.go @@ -0,0 +1 @@ +package annotations diff --git a/internal/handlers/labels/dto.go b/internal/handlers/labels/dto.go new file mode 100644 index 0000000..83949c3 --- /dev/null +++ b/internal/handlers/labels/dto.go @@ -0,0 +1,21 @@ +package labels + +import "github.com/google/uuid" + +type labelResponse struct { + ID uuid.UUID `json:"id"` + Key string `json:"key"` + Value string `json:"value"` + NodeGroups []nodePoolBrief `json:"node_groups,omitempty"` +} + +type nodePoolBrief struct { + ID uuid.UUID `json:"id"` + Name string `json:"name"` +} + +type createLabelRequest struct { + Key string `json:"key"` + Value string `json:"value"` + NodePoolIDs []string `json:"node_pool_ids,omitempty"` +} diff --git a/internal/handlers/labels/funcs.go b/internal/handlers/labels/funcs.go new file mode 100644 index 0000000..0c3e5c8 --- /dev/null +++ b/internal/handlers/labels/funcs.go @@ -0,0 +1,50 @@ +package labels + +import ( + "fmt" + "strings" + + "github.com/glueops/autoglue/internal/db" + "github.com/glueops/autoglue/internal/db/models" + "github.com/google/uuid" +) + +func toResp(l models.Label, include bool) labelResponse { + resp := labelResponse{ + ID: l.ID, + Key: l.Key, + Value: l.Value, + } + if include { + resp.NodeGroups = make([]nodePoolBrief, 0, len(l.NodePools)) + for _, np := range l.NodePools { + resp.NodeGroups = append(resp.NodeGroups, nodePoolBrief{ID: np.ID, Name: np.Name}) + } + } + return resp +} + +func parseUUIDs(ids []string) ([]uuid.UUID, error) { + out := make([]uuid.UUID, 0, len(ids)) + for _, s := range ids { + u, err := uuid.Parse(strings.TrimSpace(s)) + if err != nil { + return nil, err + } + out = append(out, u) + } + return out, nil +} + +func ensureNodePoolsBelongToOrg(orgID uuid.UUID, ids []uuid.UUID) error { + var count int64 + if err := db.DB.Model(&models.NodePool{}). + Where("organization_id = ? AND id IN ?", orgID, ids). + Count(&count).Error; err != nil { + return err + } + if count != int64(len(ids)) { + return fmt.Errorf("some node groups do not belong to this organization") + } + return nil +} diff --git a/internal/handlers/labels/labels.go b/internal/handlers/labels/labels.go new file mode 100644 index 0000000..b61cb60 --- /dev/null +++ b/internal/handlers/labels/labels.go @@ -0,0 +1,180 @@ +package labels + +import ( + "encoding/json" + "errors" + "net/http" + "strings" + + "github.com/glueops/autoglue/internal/db" + "github.com/glueops/autoglue/internal/db/models" + "github.com/glueops/autoglue/internal/middleware" + "github.com/glueops/autoglue/internal/response" + "github.com/go-chi/chi/v5" + "github.com/google/uuid" + "gorm.io/gorm" +) + +// ListLabels godoc +// @Summary List node labels (org scoped) +// @Description Returns node labels for the organization in X-Org-ID. Filters: `name`, `value`, and `q` (name contains). Add `include=node_pools` to include linked node groups. +// @Tags labels +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param name query string false "Exact name" +// @Param value query string false "Exact value" +// @Param q query string false "Name contains (case-insensitive)" +// @Param include query string false "Optional: node_pools" +// @Security BearerAuth +// @Success 200 {array} labelResponse +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 500 {string} string "failed to list node taints" +// @Router /api/v1/labels [get] +func ListLabels(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 + } + + q := db.DB.Where("organization_id = ?", ac.OrganizationID) + if needle := strings.TrimSpace(r.URL.Query().Get("q")); needle != "" { + q = q.Where("name ILIKE ?", "%"+needle+"%") + } + + includePools := strings.EqualFold(strings.TrimSpace(r.URL.Query().Get("include")), "node_pools") + if includePools { + q.Preload("NodePools") + } + + var rows []models.Label + if err := q.Order("created_at DESC").Find(&rows).Error; err != nil { + http.Error(w, "failed to list taints", http.StatusInternalServerError) + return + } + + out := make([]labelResponse, 0, len(rows)) + for _, np := range rows { + out = append(out, toResp(np, includePools)) + } + _ = response.JSON(w, http.StatusOK, out) +} + +// GetLabel godoc +// @Summary Get label by ID (org scoped) +// @Description Returns one label. Add `include=node_pools` to include node groups. +// @Tags labels +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Label ID (UUID)" +// @Param include query string false "Optional: node_pools" +// @Security BearerAuth +// @Success 200 {object} labelResponse +// @Failure 400 {string} string "invalid id" +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @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 { + http.Error(w, "organization required", http.StatusForbidden) + return + } + + id, err := uuid.Parse(chi.URLParam(r, "id")) + if err != nil { + http.Error(w, "invalid label id", http.StatusBadRequest) + return + } + + include := strings.EqualFold(strings.TrimSpace(r.URL.Query().Get("include")), "node_pools") + + var l models.Label + q := db.DB.Where("id = ? AND organization_id = ?", id, ac.OrganizationID) + if include { + q = q.Preload("NodePools") + } + + if err := q.First(&l).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + http.Error(w, "label not found", http.StatusNotFound) + return + } + http.Error(w, "failed to find label", http.StatusInternalServerError) + return + } + + _ = response.JSON(w, http.StatusOK, toResp(l, include)) +} + +// CreateLabel godoc +// @Summary Create label (org scoped) +// @Description Creates a label. Optionally link to node pools. +// @Tags labels +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param body body createLabelRequest true "Label payload" +// @Security BearerAuth +// @Success 201 {object} labelResponse +// @Failure 400 {string} string "invalid json / missing fields / invalid node_pool_ids" +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 500 {string} string "create failed" +// @Router /api/v1/labels [post] +func CreateLabel(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 + } + + var req createLabelRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil || req.Key == "" || req.Value == "" { + http.Error(w, "invalid json or missing key/value", http.StatusBadRequest) + return + } + + t := models.Label{ + OrganizationID: ac.OrganizationID, + Key: req.Key, + Value: req.Value, + } + + if err := db.DB.Create(&t).Error; err != nil { + http.Error(w, "failed to create label", http.StatusInternalServerError) + return + } + + if len(req.NodePoolIDs) > 0 { + ids, err := parseUUIDs(req.NodePoolIDs) + if err != nil { + http.Error(w, "invalid node pool IDs", http.StatusBadRequest) + return + } + + if err := ensureNodePoolsBelongToOrg(ac.OrganizationID, ids); err != nil { + http.Error(w, "invalid node pool IDs for this organization", http.StatusBadRequest) + return + } + + var nps []models.NodePool + if err := db.DB.Where("id in ? AND organization_id = ?", ids, ac.OrganizationID).Find(&nps).Error; err != nil { + http.Error(w, "node pools not found for this organization", http.StatusInternalServerError) + return + } + if err := db.DB.Model(&t).Association("NodePools").Append(&nps); err != nil { + http.Error(w, "attach node pools failed", http.StatusInternalServerError) + return + } + } + + _ = response.JSON(w, http.StatusCreated, toResp(t, false)) + +} diff --git a/internal/handlers/nodepools/dto.go b/internal/handlers/nodepools/dto.go new file mode 100644 index 0000000..00979db --- /dev/null +++ b/internal/handlers/nodepools/dto.go @@ -0,0 +1,43 @@ +package nodepools + +import ( + "github.com/google/uuid" +) + +type nodePoolResponse struct { + ID uuid.UUID `json:"id"` + Name string `json:"name"` + Servers []serverBrief `json:"servers,omitempty"` +} + +type serverBrief struct { + ID uuid.UUID `json:"id"` + Hostname string `json:"hostname"` + IP string `json:"ip"` + Role string `json:"role"` + Status string `json:"status"` +} + +type createNodePoolRequest struct { + Name string `json:"name"` + ServerIDs []string `json:"server_ids,omitempty"` // optional initial servers +} + +type updateNodePoolRequest struct { + Name *string `json:"name,omitempty"` +} + +type attachServersRequest struct { + ServerIDs []string `json:"server_ids"` +} + +type taintBrief struct { + ID uuid.UUID `json:"id"` + Key string `json:"key"` + Value string `json:"value"` + Effect string `json:"effect"` +} + +type attachTaintsRequest struct { + TaintIDs []string `json:"taint_ids"` +} diff --git a/internal/handlers/nodepools/funcs.go b/internal/handlers/nodepools/funcs.go new file mode 100644 index 0000000..eb98034 --- /dev/null +++ b/internal/handlers/nodepools/funcs.go @@ -0,0 +1,72 @@ +package nodepools + +import ( + "errors" + "fmt" + "strings" + + "github.com/glueops/autoglue/internal/db" + "github.com/glueops/autoglue/internal/db/models" + "github.com/google/uuid" +) + +func toResp(ng models.NodePool, includeServers bool) nodePoolResponse { + resp := nodePoolResponse{ + ID: ng.ID, + Name: ng.Name, + } + if includeServers { + resp.Servers = make([]serverBrief, 0, len(ng.Servers)) + for _, s := range ng.Servers { + resp.Servers = append(resp.Servers, serverBrief{ + ID: s.ID, + Hostname: s.Hostname, + IP: s.IPAddress, + Role: s.Role, + Status: s.Status, + }) + } + } + return resp +} + +func parseUUIDs(ids []string) ([]uuid.UUID, error) { + out := make([]uuid.UUID, 0, len(ids)) + for _, s := range ids { + u, err := uuid.Parse(strings.TrimSpace(s)) + if err != nil { + return nil, err + } + out = append(out, u) + } + return out, nil +} + +func ensureServersBelongToOrg(orgID uuid.UUID, ids []uuid.UUID) error { + var count int64 + if err := db.DB.Model(&models.Server{}). + Where("organization_id = ? AND id IN ?", orgID, ids). + Count(&count).Error; err != nil { + return err + } + if count != int64(len(ids)) { + return fmt.Errorf("some servers do not belong to this organization") + } + return nil +} + +func ensureTaintsBelongToOrg(orgID uuid.UUID, ids []uuid.UUID) error { + if len(ids) == 0 { + return nil + } + var count int64 + if err := db.DB.Model(&models.Taint{}). + Where("organization_id = ? AND id IN ?", orgID, ids). + Count(&count).Error; err != nil { + return err + } + if count != int64(len(ids)) { + return errors.New("some taints not in organization") + } + return nil +} diff --git a/internal/handlers/nodepools/nodepools.go b/internal/handlers/nodepools/nodepools.go new file mode 100644 index 0000000..dc1b2fd --- /dev/null +++ b/internal/handlers/nodepools/nodepools.go @@ -0,0 +1,626 @@ +package nodepools + +import ( + "encoding/json" + "errors" + "net/http" + "strings" + + "github.com/glueops/autoglue/internal/db" + "github.com/glueops/autoglue/internal/db/models" + "github.com/glueops/autoglue/internal/middleware" + "github.com/glueops/autoglue/internal/response" + "github.com/go-chi/chi/v5" + "github.com/google/uuid" + "gorm.io/gorm" +) + +// ListNodePools godoc +// @Summary List node pools (org scoped) +// @Description Returns node pools for the organization in X-Org-ID. Add `include=servers` to include attached servers. Filter by `q` (name contains). +// @Tags node-pools +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param q query string false "Name contains (case-insensitive)" +// @Param include query string false "Optional: servers" +// @Security BearerAuth +// @Success 200 {array} nodePoolResponse +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 500 {string} string "failed to list node groups" +// @Router /api/v1/node-pools [get] +func ListNodePools(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 + } + + q := db.DB.Where("organization_id = ?", ac.OrganizationID) + if needle := strings.TrimSpace(r.URL.Query().Get("q")); needle != "" { + q = q.Where("name ILIKE ?", "%"+needle+"%") + } + + includeServers := strings.EqualFold(strings.TrimSpace(r.URL.Query().Get("include")), "servers") + if includeServers { + q = q.Preload("Servers") + } + + var rows []models.NodePool + if err := q.Order("created_at DESC").Find(&rows).Error; err != nil { + http.Error(w, "failed to list node groups", http.StatusInternalServerError) + return + } + + out := make([]nodePoolResponse, 0, len(rows)) + for _, ng := range rows { + out = append(out, toResp(ng, includeServers)) + } + _ = response.JSON(w, http.StatusOK, out) +} + +// GetNodePool godoc +// @Summary Get node group by ID (org scoped) +// @Description Returns one node group. Add `include=servers` to include servers. +// @Tags node-pools +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Node Group ID (UUID)" +// @Param include query string false "Optional: servers" +// @Security BearerAuth +// @Success 200 {object} nodePoolResponse +// @Failure 400 {string} string "invalid id" +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 404 {string} string "not found" +// @Failure 500 {string} string "fetch failed" +// @Router /api/v1/node-pools/{id} [get] +func GetNodePool(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 + } + + includeServers := strings.EqualFold(strings.TrimSpace(r.URL.Query().Get("include")), "servers") + + var ng models.NodePool + q := db.DB.Where("id = ? AND organization_id = ?", id, ac.OrganizationID) + if includeServers { + q = q.Preload("Servers") + } + if err := q.First(&ng).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 + } + _ = response.JSON(w, http.StatusOK, toResp(ng, includeServers)) +} + +// CreateNodePool godoc +// @Summary Create node group (org scoped) +// @Description Creates a node group. Optionally attach initial servers. +// @Tags node-pools +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param body body createNodePoolRequest true "NodeGroup payload" +// @Security BearerAuth +// @Success 201 {object} nodePoolResponse +// @Failure 400 {string} string "invalid json / missing fields / invalid server_ids" +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 500 {string} string "create failed" +// @Router /api/v1/node-pools [post] +func CreateNodePool(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 + } + + var req createNodePoolRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil || strings.TrimSpace(req.Name) == "" { + http.Error(w, "invalid json or missing name", http.StatusBadRequest) + return + } + + ng := models.NodePool{ + OrganizationID: ac.OrganizationID, + Name: strings.TrimSpace(req.Name), + } + if err := db.DB.Create(&ng).Error; err != nil { + http.Error(w, "create failed", http.StatusInternalServerError) + return + } + + // attach servers if provided + if len(req.ServerIDs) > 0 { + ids, err := parseUUIDs(req.ServerIDs) + if err != nil { + http.Error(w, "invalid server_ids", http.StatusBadRequest) + return + } + if err := ensureServersBelongToOrg(ac.OrganizationID, ids); err != nil { + http.Error(w, "invalid server_ids for this organization", http.StatusBadRequest) + return + } + var servers []models.Server + if err := db.DB.Where("id IN ? AND organization_id = ?", ids, ac.OrganizationID). + Find(&servers).Error; err != nil { + http.Error(w, "attach servers failed", http.StatusInternalServerError) + return + } + if err := db.DB.Model(&ng).Association("Servers").Append(&servers); err != nil { + http.Error(w, "attach servers failed", http.StatusInternalServerError) + return + } + } + + _ = response.JSON(w, http.StatusCreated, toResp(ng, false)) +} + +// UpdateNodePool godoc +// @Summary Update node pool (org scoped) +// @Description Partially update node pool fields. +// @Tags node-pools +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Node Pool ID (UUID)" +// @Param body body updateNodePoolRequest true "Fields to update" +// @Security BearerAuth +// @Success 200 {object} nodePoolResponse +// @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/node-pools/{id} [patch] +func UpdateNodePool(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 ng models.NodePool + if err := db.DB.Where("id = ? AND organization_id = ?", id, ac.OrganizationID).First(&ng).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 updateNodePoolRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "invalid json", http.StatusBadRequest) + return + } + + if req.Name != nil { + ng.Name = strings.TrimSpace(*req.Name) + } + + if err := db.DB.Save(&ng).Error; err != nil { + http.Error(w, "update failed", http.StatusInternalServerError) + return + } + _ = response.JSON(w, http.StatusOK, toResp(ng, false)) +} + +// DeleteNodePool godoc +// @Summary Delete node pool (org scoped) +// @Description Permanently deletes the node pool. +// @Tags node-pools +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Node Group 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/node-pools/{id} [delete] +func DeleteNodePool(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.NodePool{}).Error; err != nil { + http.Error(w, "delete failed", http.StatusInternalServerError) + return + } + w.WriteHeader(http.StatusNoContent) +} + +// ListNodePoolServers godoc +// @Summary List servers attached to a node pool (org scoped) +// @Tags node-pools +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Node Group ID (UUID)" +// @Security BearerAuth +// @Success 200 {array} serverBrief +// @Failure 400 {string} string "invalid id" +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 404 {string} string "not found" +// @Failure 500 {string} string "fetch failed" +// @Router /api/v1/node-pools/{id}/servers [get] +func ListNodePoolServers(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 ng models.NodePool + if err := db.DB.Where("id = ? AND organization_id = ?", id, ac.OrganizationID). + Preload("Servers").First(&ng).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 + } + + out := make([]serverBrief, 0, len(ng.Servers)) + for _, s := range ng.Servers { + out = append(out, serverBrief{ + ID: s.ID, + Hostname: s.Hostname, + IP: s.IPAddress, + Role: s.Role, + Status: s.Status, + }) + } + _ = response.JSON(w, http.StatusOK, out) +} + +// AttachNodePoolServers godoc +// @Summary Attach servers to a node pool (org scoped) +// @Tags node-pools +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Node Group ID (UUID)" +// @Param body body attachServersRequest true "Server IDs to attach" +// @Security BearerAuth +// @Success 204 {string} string "No Content" +// @Failure 400 {string} string "invalid id / invalid server_ids" +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 404 {string} string "not found" +// @Failure 500 {string} string "attach failed" +// @Router /api/v1/node-pools/{id}/servers [post] +func AttachNodePoolServers(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 + } + ngID, err := uuid.Parse(chi.URLParam(r, "id")) + if err != nil { + http.Error(w, "invalid id", http.StatusBadRequest) + return + } + + var ng models.NodePool + if err := db.DB.Where("id = ? AND organization_id = ?", ngID, ac.OrganizationID).First(&ng).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 body struct { + ServerIDs []string `json:"server_ids"` + } + if err := json.NewDecoder(r.Body).Decode(&body); err != nil || len(body.ServerIDs) == 0 { + http.Error(w, "invalid server_ids", http.StatusBadRequest) + return + } + + ids, err := parseUUIDs(body.ServerIDs) + if err != nil { + http.Error(w, "invalid server_ids", http.StatusBadRequest) + return + } + if err := ensureServersBelongToOrg(ac.OrganizationID, ids); err != nil { + http.Error(w, "invalid server_ids for this organization", http.StatusBadRequest) + return + } + + var servers []models.Server + if err := db.DB.Where("id IN ? AND organization_id = ?", ids, ac.OrganizationID). + Find(&servers).Error; err != nil { + http.Error(w, "attach failed", http.StatusInternalServerError) + return + } + if err := db.DB.Model(&ng).Association("Servers").Append(&servers); err != nil { + http.Error(w, "attach failed", http.StatusInternalServerError) + return + } + w.WriteHeader(http.StatusNoContent) +} + +// DetachNodePoolServer godoc +// @Summary Detach one server from a node pool (org scoped) +// @Tags node-pools +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Node Pool ID (UUID)" +// @Param serverId path string true "Server 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 404 {string} string "not found" +// @Failure 500 {string} string "detach failed" +// @Router /api/v1/node-pools/{id}/servers/{serverId} [delete] +func DetachNodePoolServer(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 + } + ngID, err := uuid.Parse(chi.URLParam(r, "id")) + if err != nil { + http.Error(w, "invalid id", http.StatusBadRequest) + return + } + sid, err := uuid.Parse(chi.URLParam(r, "serverId")) + if err != nil { + http.Error(w, "invalid serverId", http.StatusBadRequest) + return + } + + var ng models.NodePool + if err := db.DB.Where("id = ? AND organization_id = ?", ngID, ac.OrganizationID). + Preload("Servers").First(&ng).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 s models.Server + if err := db.DB.Where("id = ? AND organization_id = ?", sid, ac.OrganizationID).First(&s).Error; err != nil { + http.Error(w, "not found", http.StatusNotFound) + return + } + + if err := db.DB.Model(&ng).Association("Servers").Delete(&s); err != nil { + http.Error(w, "detach failed", http.StatusInternalServerError) + return + } + response.NoContent(w) +} + +// ListNodePoolTaints godoc +// @Summary List taints attached to a node pool (org scoped) +// @Tags node-pools +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Node Pool ID (UUID)" +// @Security BearerAuth +// @Success 200 {array} taintBrief +// @Failure 400 {string} string "invalid id" +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 404 {string} string "not found" +// @Failure 500 {string} string "fetch failed" +// @Router /api/v1/node-pools/{id}/taints [get] +func ListNodePoolTaints(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 + } + + ngID, err := uuid.Parse(chi.URLParam(r, "id")) + if err != nil { + http.Error(w, "invalid id", http.StatusBadRequest) + return + } + + var ng models.NodePool + if err := db.DB.Where("id = ? AND organization_id = ?", ngID, ac.OrganizationID). + Preload("Taints"). + First(&ng).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 + } + + out := make([]taintBrief, 0, len(ng.Taints)) + for _, t := range ng.Taints { + out = append(out, taintBrief{ + ID: t.ID, + Key: t.Key, + Value: t.Value, + Effect: t.Effect, + }) + } + _ = response.JSON(w, http.StatusOK, out) +} + +// AttachNodePoolTaints godoc +// @Summary Attach taints to a node pool (org scoped) +// @Tags node-pools +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Node Pool ID (UUID)" +// @Param body body attachTaintsRequest true "Taint IDs to attach" +// @Security BearerAuth +// @Success 204 {string} string "No Content" +// @Failure 400 {string} string "invalid id / invalid taint_ids" +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 404 {string} string "not found" +// @Failure 500 {string} string "attach failed" +// @Router /api/v1/node-pools/{id}/taints [post] +func AttachNodePoolTaints(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 + } + + ngID, err := uuid.Parse(chi.URLParam(r, "id")) + if err != nil { + http.Error(w, "invalid id", http.StatusBadRequest) + return + } + + var ng models.NodePool + if err := db.DB.Where("id = ? AND organization_id = ?", ngID, ac.OrganizationID). + First(&ng).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 body struct { + TaintIDs []string `json:"taint_ids"` + } + if err := json.NewDecoder(r.Body).Decode(&body); err != nil || len(body.TaintIDs) == 0 { + http.Error(w, "invalid taint_ids", http.StatusBadRequest) + return + } + + ids, err := parseUUIDs(body.TaintIDs) + if err != nil { + http.Error(w, "invalid taint_ids", http.StatusBadRequest) + return + } + if err := ensureTaintsBelongToOrg(ac.OrganizationID, ids); err != nil { + http.Error(w, "invalid taint_ids for this organization", http.StatusBadRequest) + return + } + + var taints []models.Taint + if err := db.DB.Where("id IN ? AND organization_id = ?", ids, ac.OrganizationID). + Find(&taints).Error; err != nil { + http.Error(w, "attach failed", http.StatusInternalServerError) + return + } + if err := db.DB.Model(&ng).Association("Taints").Append(&taints); err != nil { + http.Error(w, "attach failed", http.StatusInternalServerError) + return + } + w.WriteHeader(http.StatusNoContent) +} + +// DetachNodePoolTaint godoc +// @Summary Detach one taint from a node pool (org scoped) +// @Tags node-pools +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Node Pool ID (UUID)" +// @Param taintId path string true "Taint 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 404 {string} string "not found" +// @Failure 500 {string} string "detach failed" +// @Router /api/v1/node-pools/{id}/taints/{taintId} [delete] +func DetachNodePoolTaint(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 + } + + ngID, err := uuid.Parse(chi.URLParam(r, "id")) + if err != nil { + http.Error(w, "invalid id", http.StatusBadRequest) + return + } + tid, err := uuid.Parse(chi.URLParam(r, "taintId")) + if err != nil { + http.Error(w, "invalid id", http.StatusBadRequest) + return + } + + var ng models.NodePool + if err := db.DB.Where("id = ? AND organization_id = ?", ngID, ac.OrganizationID). + First(&ng).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 t models.Taint + if err := db.DB.Where("id = ? AND organization_id = ?", tid, 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 + } + + if err := db.DB.Model(&ng).Association("Taints").Delete(&t); err != nil { + http.Error(w, "detach failed", http.StatusInternalServerError) + return + } + response.NoContent(w) +} diff --git a/internal/handlers/taints/dto.go b/internal/handlers/taints/dto.go new file mode 100644 index 0000000..7471b1c --- /dev/null +++ b/internal/handlers/taints/dto.go @@ -0,0 +1,33 @@ +package taints + +import "github.com/google/uuid" + +type taintResponse struct { + ID uuid.UUID `json:"id"` + Key string `json:"key"` + Value string `json:"value"` + Effect string `json:"effect"` + NodeGroups []nodePoolBrief `json:"node_groups,omitempty"` +} + +type nodePoolBrief struct { + ID uuid.UUID `json:"id"` + Name string `json:"name"` +} + +type createTaintRequest struct { + Key string `json:"key"` + Value string `json:"value"` + Effect string `json:"effect"` + NodePoolIDs []string `json:"node_pool_ids,omitempty"` +} + +type updateTaintRequest struct { + Key *string `json:"key,omitempty"` + Value *string `json:"value,omitempty"` + Effect *string `json:"effect,omitempty"` +} + +type addTaintToPoolRequest struct { + NodePoolIDs []string `json:"node_pool_ids"` +} diff --git a/internal/handlers/taints/funcs.go b/internal/handlers/taints/funcs.go new file mode 100644 index 0000000..d387330 --- /dev/null +++ b/internal/handlers/taints/funcs.go @@ -0,0 +1,51 @@ +package taints + +import ( + "fmt" + "strings" + + "github.com/glueops/autoglue/internal/db" + "github.com/glueops/autoglue/internal/db/models" + "github.com/google/uuid" +) + +func toResp(t models.Taint, include bool) taintResponse { + resp := taintResponse{ + ID: t.ID, + Key: t.Key, + Value: t.Value, + Effect: t.Effect, + } + if include { + resp.NodeGroups = make([]nodePoolBrief, 0, len(t.NodePools)) + for _, np := range t.NodePools { + resp.NodeGroups = append(resp.NodeGroups, nodePoolBrief{ID: np.ID, Name: np.Name}) + } + } + return resp +} + +func parseUUIDs(ids []string) ([]uuid.UUID, error) { + out := make([]uuid.UUID, 0, len(ids)) + for _, s := range ids { + u, err := uuid.Parse(strings.TrimSpace(s)) + if err != nil { + return nil, err + } + out = append(out, u) + } + return out, nil +} + +func ensureNodePoolsBelongToOrg(orgID uuid.UUID, ids []uuid.UUID) error { + var count int64 + if err := db.DB.Model(&models.NodePool{}). + Where("organization_id = ? AND id IN ?", orgID, ids). + Count(&count).Error; err != nil { + return err + } + if count != int64(len(ids)) { + return fmt.Errorf("some node groups do not belong to this organization") + } + return nil +} diff --git a/internal/handlers/taints/taints.go b/internal/handlers/taints/taints.go new file mode 100644 index 0000000..7bfeee7 --- /dev/null +++ b/internal/handlers/taints/taints.go @@ -0,0 +1,425 @@ +package taints + +import ( + "encoding/json" + "errors" + "net/http" + "strings" + + "github.com/glueops/autoglue/internal/db" + "github.com/glueops/autoglue/internal/db/models" + "github.com/glueops/autoglue/internal/middleware" + "github.com/glueops/autoglue/internal/response" + "github.com/go-chi/chi/v5" + "github.com/google/uuid" + "gorm.io/gorm" +) + +// ListTaints godoc +// @Summary List node taints (org scoped) +// @Description Returns node taints for the organization in X-Org-ID. Filters: `name`, `value`, and `q` (name contains). Add `include=node_groups` to include linked node groups. +// @Tags taints +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param name query string false "Exact name" +// @Param value query string false "Exact value" +// @Param q query string false "Name contains (case-insensitive)" +// @Param include query string false "Optional: node_pools" +// @Security BearerAuth +// @Success 200 {array} taintResponse +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 500 {string} string "failed to list node taints" +// @Router /api/v1/taints [get] +func ListTaints(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 + } + + q := db.DB.Where("organization_id = ?", ac.OrganizationID) + if needle := strings.TrimSpace(r.URL.Query().Get("q")); needle != "" { + q = q.Where("name ILIKE ?", "%"+needle+"%") + } + + includePools := strings.EqualFold(strings.TrimSpace(r.URL.Query().Get("include")), "node_pools") + if includePools { + q = q.Preload("NodePools") + } + + var rows []models.Taint + if err := q.Order("created_at DESC").Find(&rows).Error; err != nil { + http.Error(w, "failed to list taints", http.StatusInternalServerError) + return + } + + out := make([]taintResponse, 0, len(rows)) + for _, np := range rows { + out = append(out, toResp(np, includePools)) + } + _ = response.JSON(w, http.StatusOK, out) +} + +// GetTaint godoc +// @Summary Get node taint by ID (org scoped) +// @Description Returns one taint. Add `include=node_groups` to include node groups. +// @Tags taints +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Node Taint ID (UUID)" +// @Param include query string false "Optional: node_pools" +// @Security BearerAuth +// @Success 200 {object} taintResponse +// @Failure 400 {string} string "invalid id" +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 404 {string} string "not found" +// @Failure 500 {string} string "fetch failed" +// @Router /api/v1/taints/{id} [get] +func GetTaint(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 taint id", http.StatusBadRequest) + return + } + + include := strings.EqualFold(strings.TrimSpace(r.URL.Query().Get("include")), "node_pools") + + var t models.Taint + q := db.DB.Where("id = ? AND organization_id = ?", id, ac.OrganizationID) + if include { + q = q.Preload("NodePools") + } + + if err := q.First(&t).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + http.Error(w, "taint not found", http.StatusNotFound) + return + } + http.Error(w, "failed to find taint", http.StatusInternalServerError) + return + } + + _ = response.JSON(w, http.StatusOK, toResp(t, include)) +} + +// CreateTaint godoc +// @Summary Create node taint (org scoped) +// @Description Creates a taint. Optionally link to node pools. +// @Tags taints +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param body body createTaintRequest true "Taint payload" +// @Security BearerAuth +// @Success 201 {object} taintResponse +// @Failure 400 {string} string "invalid json / missing fields / invalid node_pool_ids" +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 500 {string} string "create failed" +// @Router /api/v1/taints [post] +func CreateTaint(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 + } + + var req createTaintRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil || req.Key == "" || req.Value == "" || req.Effect == "" { + http.Error(w, "invalid json or missing key/value/effect", http.StatusBadRequest) + return + } + + t := models.Taint{ + OrganizationID: ac.OrganizationID, + Key: req.Key, + Value: req.Value, + Effect: req.Effect, + } + + if err := db.DB.Create(&t).Error; err != nil { + http.Error(w, "failed to create taint", http.StatusInternalServerError) + return + } + + if len(req.NodePoolIDs) > 0 { + ids, err := parseUUIDs(req.NodePoolIDs) + if err != nil { + http.Error(w, "invalid node pool IDs", http.StatusBadRequest) + return + } + if err := ensureNodePoolsBelongToOrg(ac.OrganizationID, ids); err != nil { + http.Error(w, "invalid node pool IDs for this organization", http.StatusBadRequest) + return + } + + var nps []models.NodePool + if err := db.DB.Where("id in ? AND organization_id = ?", ids, ac.OrganizationID).Find(&nps).Error; err != nil { + http.Error(w, "node pools not found for this organization", http.StatusInternalServerError) + return + } + if err := db.DB.Model(&t).Association("NodePools").Append(&nps); err != nil { + http.Error(w, "attach node pools failed", http.StatusInternalServerError) + return + } + } + _ = response.JSON(w, http.StatusCreated, toResp(t, false)) +} + +// UpdateTaint godoc +// @Summary Update node taint (org scoped) +// @Description Partially update taint fields. +// @Tags taints +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Node Taint ID (UUID)" +// @Param body body updateTaintRequest true "Fields to update" +// @Security BearerAuth +// @Success 200 {object} taintResponse +// @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/taints/{id} [patch] +func UpdateTaint(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.Taint + 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 updateTaintRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "invalid json", http.StatusBadRequest) + return + } + if req.Key != nil { + t.Key = strings.TrimSpace(*req.Key) + } + if req.Value != nil { + t.Value = strings.TrimSpace(*req.Value) + } + if req.Effect != nil { + t.Effect = strings.TrimSpace(*req.Effect) + } + + 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)) +} + +// DeleteTaint godoc +// @Summary Delete taint (org scoped) +// @Description Permanently deletes the taint. +// @Tags taints +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Node Taint 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/taints/{id} [delete] +func DeleteTaint(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) +} + +// AddTaintToNodePool godoc +// @Summary Attach taint to node pools (org scoped) +// @Description Links the taint to one or more node pools in the same organization. +// @Tags taints +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Taint ID (UUID)" +// @Param body body addTaintToPoolRequest true "IDs to attach" +// @Param include query string false "Optional: node_pools" +// @Security BearerAuth +// @Success 200 {object} taintResponse +// @Failure 400 {string} string "invalid id / invalid json / invalid node_pool_ids" +// @Failure 401 {string} string "Unauthorized" +// @Failure 403 {string} string "organization required" +// @Failure 404 {string} string "not found" +// @Failure 500 {string} string "attach failed" +// @Router /api/v1/taints/{id}/node_pools [post] +func AddTaintToNodePool(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 + } + + taintID, err := uuid.Parse(chi.URLParam(r, "id")) + if err != nil { + http.Error(w, "invalid id", http.StatusBadRequest) + return + } + + var t models.Taint + if err := db.DB. + Where("id = ? AND organization_id = ?", taintID, 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 in struct { + NodePoolIDs []string `json:"node_pool_ids"` + } + if err := json.NewDecoder(r.Body).Decode(&in); err != nil || len(in.NodePoolIDs) == 0 { + http.Error(w, "invalid json or empty node_pool_ids", http.StatusBadRequest) + return + } + + ids, err := parseUUIDs(in.NodePoolIDs) + if err != nil { + http.Error(w, "invalid node_pool_ids", http.StatusBadRequest) + return + } + if err := ensureNodePoolsBelongToOrg(ac.OrganizationID, ids); err != nil { + http.Error(w, "invalid node_pool_ids for this organization", http.StatusBadRequest) + return + } + + var pools []models.NodePool + if err := db.DB. + Where("id IN ? AND organization_id = ?", ids, ac.OrganizationID). + Find(&pools).Error; err != nil { + http.Error(w, "attach failed", http.StatusInternalServerError) + return + } + if err := db.DB.Model(&t).Association("NodePools").Append(&pools); err != nil { + http.Error(w, "attach failed", http.StatusInternalServerError) + return + } + + includePools := strings.EqualFold(strings.TrimSpace(r.URL.Query().Get("include")), "node_pools") + if includePools { + if err := db.DB.Preload("NodePools"). + First(&t, "id = ? AND organization_id = ?", taintID, ac.OrganizationID).Error; err != nil { + http.Error(w, "fetch failed", http.StatusInternalServerError) + return + } + } + + _ = response.JSON(w, http.StatusOK, toResp(t, includePools)) +} + +// RemoveTaintFromNodePool godoc +// @Summary Detach taint from a node pool (org scoped) +// @Description Unlinks the taint from the specified node pool. +// @Tags taints +// @Accept json +// @Produce json +// @Param X-Org-ID header string true "Organization UUID" +// @Param id path string true "Taint ID (UUID)" +// @Param poolId path string true "Node Pool 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 404 {string} string "not found" +// @Failure 500 {string} string "detach failed" +// @Router /api/v1/taints/{id}/node_pools/{poolId} [delete] +func RemoveTaintFromNodePool(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 + } + + taintID, err := uuid.Parse(chi.URLParam(r, "id")) + if err != nil { + http.Error(w, "invalid id", http.StatusBadRequest) + return + } + poolID, err := uuid.Parse(chi.URLParam(r, "poolId")) + if err != nil { + http.Error(w, "invalid id", http.StatusBadRequest) + return + } + + var t models.Taint + if err := db.DB.Where("id = ? AND organization_id = ?", taintID, 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 p models.NodePool + if err := db.DB.Where("id = ? AND organization_id = ?", poolID, ac.OrganizationID). + First(&p).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 + } + + if err := db.DB.Model(&t).Association("NodePools").Delete(&p); err != nil { + http.Error(w, "detach failed", http.StatusInternalServerError) + return + } + + response.NoContent(w) +} diff --git a/internal/ui/dist/assets/icons-BROtNQ6N.js b/internal/ui/dist/assets/icons-CNkJtX2d.js similarity index 69% rename from internal/ui/dist/assets/icons-BROtNQ6N.js rename to internal/ui/dist/assets/icons-CNkJtX2d.js index 2fae19b..bedccb0 100644 --- a/internal/ui/dist/assets/icons-BROtNQ6N.js +++ b/internal/ui/dist/assets/icons-CNkJtX2d.js @@ -1,9 +1,9 @@ -import{r as d,R as s}from"./vendor-D1z0LlOQ.js";/** +import{r as d,R as s}from"./vendor-DBKlM1wc.js";/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const b=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),x=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,a,c)=>c?c.toUpperCase():a.toLowerCase()),k=e=>{const t=x(e);return t.charAt(0).toUpperCase()+t.slice(1)},v=(...e)=>e.filter((t,a,c)=>!!t&&t.trim()!==""&&c.indexOf(t)===a).join(" ").trim(),z=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0};/** + */const w=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),b=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,a,c)=>c?c.toUpperCase():a.toLowerCase()),k=e=>{const t=b(e);return t.charAt(0).toUpperCase()+t.slice(1)},v=(...e)=>e.filter((t,a,c)=>!!t&&t.trim()!==""&&c.indexOf(t)===a).join(" ").trim(),z=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0};/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. @@ -13,154 +13,174 @@ import{r as d,R as s}from"./vendor-D1z0LlOQ.js";/** * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const N=d.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:a=2,absoluteStrokeWidth:c,className:o="",children:n,iconNode:p,...i},h)=>d.createElement("svg",{ref:h,...j,width:t,height:t,stroke:e,strokeWidth:c?Number(a)*24/Number(t):a,className:v("lucide",o),...!n&&!z(i)&&{"aria-hidden":"true"},...i},[...p.map(([w,_])=>d.createElement(w,_)),...Array.isArray(n)?n:[n]]));/** + */const N=d.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:a=2,absoluteStrokeWidth:c,className:o="",children:r,iconNode:p,...i},h)=>d.createElement("svg",{ref:h,...j,width:t,height:t,stroke:e,strokeWidth:c?Number(a)*24/Number(t):a,className:v("lucide",o),...!r&&!z(i)&&{"aria-hidden":"true"},...i},[...p.map(([g,x])=>d.createElement(g,x)),...Array.isArray(r)?r:[r]]));/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const r=(e,t)=>{const a=d.forwardRef(({className:c,...o},n)=>d.createElement(N,{ref:n,iconNode:t,className:v(`lucide-${b(k(e))}`,`lucide-${e}`,c),...o}));return a.displayName=k(e),a};/** + */const n=(e,t)=>{const a=d.forwardRef(({className:c,...o},r)=>d.createElement(N,{ref:r,iconNode:t,className:v(`lucide-${w(k(e))}`,`lucide-${e}`,c),...o}));return a.displayName=k(e),a};/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const C=[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]],y1=r("boxes",C);/** + */const C=[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]],u1=n("boxes",C);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const O=[["path",{d:"m10.852 14.772-.383.923",key:"11vil6"}],["path",{d:"m10.852 9.228-.383-.923",key:"1fjppe"}],["path",{d:"m13.148 14.772.382.924",key:"je3va1"}],["path",{d:"m13.531 8.305-.383.923",key:"18epck"}],["path",{d:"m14.772 10.852.923-.383",key:"k9m8cz"}],["path",{d:"m14.772 13.148.923.383",key:"1xvhww"}],["path",{d:"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 0 0-5.63-1.446 3 3 0 0 0-.368 1.571 4 4 0 0 0-2.525 5.771",key:"jcbbz1"}],["path",{d:"M17.998 5.125a4 4 0 0 1 2.525 5.771",key:"1kkn7e"}],["path",{d:"M19.505 10.294a4 4 0 0 1-1.5 7.706",key:"18bmuc"}],["path",{d:"M4.032 17.483A4 4 0 0 0 11.464 20c.18-.311.892-.311 1.072 0a4 4 0 0 0 7.432-2.516",key:"uozx0d"}],["path",{d:"M4.5 10.291A4 4 0 0 0 6 18",key:"whdemb"}],["path",{d:"M6.002 5.125a3 3 0 0 0 .4 1.375",key:"1kqy2g"}],["path",{d:"m9.228 10.852-.923-.383",key:"1wtb30"}],["path",{d:"m9.228 13.148-.923.383",key:"1a830x"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],l1=r("brain-cog",O);/** + */const $=[["path",{d:"m10.852 14.772-.383.923",key:"11vil6"}],["path",{d:"m10.852 9.228-.383-.923",key:"1fjppe"}],["path",{d:"m13.148 14.772.382.924",key:"je3va1"}],["path",{d:"m13.531 8.305-.383.923",key:"18epck"}],["path",{d:"m14.772 10.852.923-.383",key:"k9m8cz"}],["path",{d:"m14.772 13.148.923.383",key:"1xvhww"}],["path",{d:"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 0 0-5.63-1.446 3 3 0 0 0-.368 1.571 4 4 0 0 0-2.525 5.771",key:"jcbbz1"}],["path",{d:"M17.998 5.125a4 4 0 0 1 2.525 5.771",key:"1kkn7e"}],["path",{d:"M19.505 10.294a4 4 0 0 1-1.5 7.706",key:"18bmuc"}],["path",{d:"M4.032 17.483A4 4 0 0 0 11.464 20c.18-.311.892-.311 1.072 0a4 4 0 0 0 7.432-2.516",key:"uozx0d"}],["path",{d:"M4.5 10.291A4 4 0 0 0 6 18",key:"whdemb"}],["path",{d:"M6.002 5.125a3 3 0 0 0 .4 1.375",key:"1kqy2g"}],["path",{d:"m9.228 10.852-.923-.383",key:"1wtb30"}],["path",{d:"m9.228 13.148-.923.383",key:"1a830x"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],m1=n("brain-cog",$);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const $=[["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M12 6h.01",key:"1vi96p"}],["path",{d:"M16 10h.01",key:"1m94wz"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M16 6h.01",key:"1x0f13"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M8 6h.01",key:"1dz90k"}],["path",{d:"M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3",key:"cabbwy"}],["rect",{x:"4",y:"2",width:"16",height:"20",rx:"2",key:"1uxh74"}]],p1=r("building",$);/** + */const O=[["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M12 6h.01",key:"1vi96p"}],["path",{d:"M16 10h.01",key:"1m94wz"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M16 6h.01",key:"1x0f13"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M8 6h.01",key:"1dz90k"}],["path",{d:"M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3",key:"cabbwy"}],["rect",{x:"4",y:"2",width:"16",height:"20",rx:"2",key:"1uxh74"}]],v1=n("building",O);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const P=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],k1=r("check",P);/** + */const P=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],f1=n("check",P);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const q=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],u1=r("chevron-down",q);/** + */const q=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],M1=n("chevron-down",q);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const A=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],m1=r("chevron-up",A);/** + */const A=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],_1=n("chevron-up",A);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const V=[["path",{d:"M12 13v8l-4-4",key:"1f5nwf"}],["path",{d:"m12 21 4-4",key:"1lfcce"}],["path",{d:"M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284",key:"ui1hmy"}]],v1=r("cloud-download",V);/** + */const L=[["path",{d:"M12 13v8l-4-4",key:"1f5nwf"}],["path",{d:"m12 21 4-4",key:"1lfcce"}],["path",{d:"M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284",key:"ui1hmy"}]],g1=n("cloud-download",L);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const L=[["path",{d:"M15.536 11.293a1 1 0 0 0 0 1.414l2.376 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z",key:"1uwlt4"}],["path",{d:"M2.297 11.293a1 1 0 0 0 0 1.414l2.377 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414L6.088 8.916a1 1 0 0 0-1.414 0z",key:"10291m"}],["path",{d:"M8.916 17.912a1 1 0 0 0 0 1.415l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.415l-2.377-2.376a1 1 0 0 0-1.414 0z",key:"1tqoq1"}],["path",{d:"M8.916 4.674a1 1 0 0 0 0 1.414l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z",key:"1x6lto"}]],f1=r("component",L);/** + */const V=[["path",{d:"M15.536 11.293a1 1 0 0 0 0 1.414l2.376 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z",key:"1uwlt4"}],["path",{d:"M2.297 11.293a1 1 0 0 0 0 1.414l2.377 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414L6.088 8.916a1 1 0 0 0-1.414 0z",key:"10291m"}],["path",{d:"M8.916 17.912a1 1 0 0 0 0 1.415l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.415l-2.377-2.376a1 1 0 0 0-1.414 0z",key:"1tqoq1"}],["path",{d:"M8.916 4.674a1 1 0 0 0 0 1.414l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z",key:"1x6lto"}]],x1=n("component",V);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const E=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],M1=r("copy",E);/** + */const E=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],w1=n("copy",E);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const H=[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v6",key:"rc0qvx"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["circle",{cx:"4",cy:"16",r:"2",key:"1ehqvc"}],["path",{d:"m10 10-4.5 4.5",key:"7fwrp6"}],["path",{d:"m9 11 1 1",key:"wa6s5q"}]],g1=r("file-key-2",H);/** + */const H=[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v6",key:"rc0qvx"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["circle",{cx:"4",cy:"16",r:"2",key:"1ehqvc"}],["path",{d:"m10 10-4.5 4.5",key:"7fwrp6"}],["path",{d:"m9 11 1 1",key:"wa6s5q"}]],b1=n("file-key-2",H);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const S=[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"1d0kgt"}]],w1=r("house",S);/** + */const S=[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"1d0kgt"}]],z1=n("house",S);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const B=[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]],_1=r("key",B);/** + */const B=[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]],j1=n("key",B);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const D=[["path",{d:"M18 5a2 2 0 0 1 2 2v8.526a2 2 0 0 0 .212.897l1.068 2.127a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45l1.068-2.127A2 2 0 0 0 4 15.526V7a2 2 0 0 1 2-2z",key:"1pdavp"}],["path",{d:"M20.054 15.987H3.946",key:"14rxg9"}]],b1=r("laptop",D);/** + */const U=[["path",{d:"M18 5a2 2 0 0 1 2 2v8.526a2 2 0 0 0 .212.897l1.068 2.127a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45l1.068-2.127A2 2 0 0 0 4 15.526V7a2 2 0 0 1 2-2z",key:"1pdavp"}],["path",{d:"M20.054 15.987H3.946",key:"14rxg9"}]],N1=n("laptop",U);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const U=[["rect",{x:"3",y:"5",width:"6",height:"6",rx:"1",key:"1defrl"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"M13 6h8",key:"15sg57"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 18h8",key:"oe0vm4"}]],x1=r("list-todo",U);/** + */const D=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]],C1=n("link",D);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const I=[["circle",{cx:"12",cy:"16",r:"1",key:"1au0dj"}],["rect",{x:"3",y:"10",width:"18",height:"12",rx:"2",key:"6s8ecr"}],["path",{d:"M7 10V7a5 5 0 0 1 10 0v3",key:"1pqi11"}]],z1=r("lock-keyhole",I);/** + */const R=[["rect",{x:"3",y:"5",width:"6",height:"6",rx:"1",key:"1defrl"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"M13 6h8",key:"15sg57"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 18h8",key:"oe0vm4"}]],$1=n("list-todo",R);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const K=[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]],j1=r("moon",K);/** + */const I=[["circle",{cx:"12",cy:"16",r:"1",key:"1au0dj"}],["rect",{x:"3",y:"10",width:"18",height:"12",rx:"2",key:"6s8ecr"}],["path",{d:"M7 10V7a5 5 0 0 1 10 0v3",key:"1pqi11"}]],O1=n("lock-keyhole",I);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const T=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],N1=r("pencil",T);/** + */const K=[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]],P1=n("moon",K);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const R=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],C1=r("plus",R);/** + */const T=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],q1=n("pencil",T);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const W=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],O1=r("server",W);/** + */const W=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],A1=n("plus",W);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Z=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],$1=r("settings",Z);/** + */const Z=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],L1=n("refresh-cw",Z);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const F=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],P1=r("shield-check",F);/** + */const F=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],V1=n("search",F);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const G=[["path",{d:"M3 3h.01",key:"159qn6"}],["path",{d:"M7 5h.01",key:"1hq22a"}],["path",{d:"M11 7h.01",key:"1osv80"}],["path",{d:"M3 7h.01",key:"1xzrh3"}],["path",{d:"M7 9h.01",key:"19b3jx"}],["path",{d:"M3 11h.01",key:"1eifu7"}],["rect",{width:"4",height:"4",x:"15",y:"5",key:"mri9e4"}],["path",{d:"m19 9 2 2v10c0 .6-.4 1-1 1h-6c-.6 0-1-.4-1-1V11l2-2",key:"aib6hk"}],["path",{d:"m13 14 8-2",key:"1d7bmk"}],["path",{d:"m13 19 8-2",key:"1y2vml"}]],q1=r("spray-can",G);/** + */const G=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],E1=n("server",G);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const X=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],A1=r("sun",X);/** + */const X=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],H1=n("settings",X);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const J=[["path",{d:"M13.172 2a2 2 0 0 1 1.414.586l6.71 6.71a2.4 2.4 0 0 1 0 3.408l-4.592 4.592a2.4 2.4 0 0 1-3.408 0l-6.71-6.71A2 2 0 0 1 6 9.172V3a1 1 0 0 1 1-1z",key:"16rjxf"}],["path",{d:"M2 7v6.172a2 2 0 0 0 .586 1.414l6.71 6.71a2.4 2.4 0 0 0 3.191.193",key:"178nd4"}],["circle",{cx:"10.5",cy:"6.5",r:".5",fill:"currentColor",key:"12ikhr"}]],V1=r("tags",J);/** + */const J=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],S1=n("shield-check",J);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Q=[["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],L1=r("trash",Q);/** + */const Q=[["path",{d:"M3 3h.01",key:"159qn6"}],["path",{d:"M7 5h.01",key:"1hq22a"}],["path",{d:"M11 7h.01",key:"1osv80"}],["path",{d:"M3 7h.01",key:"1xzrh3"}],["path",{d:"M7 9h.01",key:"19b3jx"}],["path",{d:"M3 11h.01",key:"1eifu7"}],["rect",{width:"4",height:"4",x:"15",y:"5",key:"mri9e4"}],["path",{d:"m19 9 2 2v10c0 .6-.4 1-1 1h-6c-.6 0-1-.4-1-1V11l2-2",key:"aib6hk"}],["path",{d:"m13 14 8-2",key:"1d7bmk"}],["path",{d:"m13 19 8-2",key:"1y2vml"}]],B1=n("spray-can",Q);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Y=[["path",{d:"M2 21a8 8 0 0 1 13.292-6",key:"bjp14o"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"M19 16v6",key:"tddt3s"}],["path",{d:"M22 19h-6",key:"vcuq98"}]],E1=r("user-round-plus",Y);/** + */const Y=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],U1=n("sun",Y);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const e1=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],H1=r("user",e1);/** + */const e1=[["path",{d:"M13.172 2a2 2 0 0 1 1.414.586l6.71 6.71a2.4 2.4 0 0 1 0 3.408l-4.592 4.592a2.4 2.4 0 0 1-3.408 0l-6.71-6.71A2 2 0 0 1 6 9.172V3a1 1 0 0 1 1-1z",key:"16rjxf"}],["path",{d:"M2 7v6.172a2 2 0 0 0 .586 1.414l6.71 6.71a2.4 2.4 0 0 0 3.191.193",key:"178nd4"}],["circle",{cx:"10.5",cy:"6.5",r:".5",fill:"currentColor",key:"12ikhr"}]],D1=n("tags",e1);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const t1=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],S1=r("users",t1);/** + */const t1=[["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],R1=n("trash",t1);/** * @license lucide-react v0.542.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const a1=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],B1=r("x",a1);var f={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},u=s.createContext&&s.createContext(f),c1=["attr","size","title"];function r1(e,t){if(e==null)return{};var a=o1(e,t),c,o;if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0)&&Object.prototype.propertyIsEnumerable.call(e,c)&&(a[c]=e[c])}return a}function o1(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 g(e){return t=>s.createElement(i1,y({attr:l({},e.attr)},t),M(e.child))}function i1(e){var t=a=>{var{attr:c,size:o,title:n}=e,p=r1(e,c1),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"}),n&&s.createElement("title",null,n),e.children)};return u!==void 0?s.createElement(u.Consumer,null,a=>t(a)):t(f)}function D1(e){return g({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 U1(e){return g({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{D1 as A,y1 as B,k1 as C,g1 as F,w1 as H,_1 as K,b1 as L,j1 as M,C1 as P,A1 as S,V1 as T,S1 as U,B1 as X,f1 as a,q1 as b,O1 as c,l1 as d,z1 as e,x1 as f,p1 as g,H1 as h,$1 as i,P1 as j,u1 as k,U1 as l,m1 as m,N1 as n,L1 as o,E1 as p,M1 as q,v1 as r}; + */const a1=[["path",{d:"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71",key:"yqzxt4"}],["path",{d:"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71",key:"4qinb0"}],["line",{x1:"8",x2:"8",y1:"2",y2:"5",key:"1041cp"}],["line",{x1:"2",x2:"5",y1:"8",y2:"8",key:"14m1p5"}],["line",{x1:"16",x2:"16",y1:"19",y2:"22",key:"rzdirn"}],["line",{x1:"19",x2:"22",y1:"16",y2:"16",key:"ox905f"}]],I1=n("unlink",a1);/** + * @license lucide-react v0.542.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const c1=[["path",{d:"M2 21a8 8 0 0 1 13.292-6",key:"bjp14o"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"M19 16v6",key:"tddt3s"}],["path",{d:"M22 19h-6",key:"vcuq98"}]],K1=n("user-round-plus",c1);/** + * @license lucide-react v0.542.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const n1=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],T1=n("user",n1);/** + * @license lucide-react v0.542.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const o1=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],W1=n("users",o1);/** + * @license lucide-react v0.542.0 - ISC + * + * 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}; diff --git a/internal/ui/dist/assets/index-C5NwS5VO.js b/internal/ui/dist/assets/index-C5NwS5VO.js deleted file mode 100644 index 88288a9..0000000 --- a/internal/ui/dist/assets/index-C5NwS5VO.js +++ /dev/null @@ -1 +0,0 @@ -import{t as It,m as _t,r as u,j as e,n as Ee,z as st,F as Et,C as zt,p as Ot,q as Dt,v as G,w as L,_ as be,x as Z,y as At,A as U,B,D as p,T as Tt,J as Lt,E as $t}from"./vendor-D1z0LlOQ.js";import{S as xe,R as Ft,a as at,C as rt,b as nt,T as it,D as ot,P as lt,O as dt,c as Mt,d as Rt,e as Pt,f as Vt,g as Ut,A as Bt,h as Ht,i as Gt,j as Kt,k as qt,l as Jt,m as Wt,n as Yt,I as Xt,o as Qt,p as Zt,q as es,r as ts,s as ss,t as as,u as rs,v as ns,w as is,x as os,y as ls,z as ds,B as cs,E as us,V as ms,F as xs,G as hs,H as fs,J as gs,K as ps,L as js,M as bs,N as vs}from"./radix-9eRs70j8.js";import{X as ct,S as ws,M as ys,L as Ns,C as ge,H as Ss,A as Cs,B as ks,a as Is,T as _s,b as Es,c as zs,d as Os,K as Ds,F as As,e as Ts,f as Ls,g as $s,U as Je,h as Fs,i as Ms,j as Rs,k as ze,l as Ps,m as Vs,P as ut,n as Us,o as ve,p as We,q as Bs,r as Hs}from"./icons-BROtNQ6N.js";import{u as we,L as Y,O as Oe,N as De,a as he,b as mt,R as Gs,c as N,B as Ks}from"./router-CcA--AgE.js";(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const d of l)if(d.type==="childList")for(const x of d.addedNodes)x.tagName==="LINK"&&x.rel==="modulepreload"&&r(x)}).observe(document,{childList:!0,subtree:!0});function a(l){const d={};return l.integrity&&(d.integrity=l.integrity),l.referrerPolicy&&(d.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?d.credentials="include":l.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function r(l){if(l.ep)return;l.ep=!0;const d=a(l);fetch(l.href,d)}})();function c(...t){return It(_t(t))}function Ye(t){return t.toLowerCase().trim().replace(/['"]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)+/g,"")}const Ne=768;function qs(){const[t,s]=u.useState(void 0);return u.useEffect(()=>{const a=window.matchMedia(`(max-width: ${Ne-1}px)`),r=()=>{s(window.innerWidtha.removeEventListener("change",r)},[]),!!t}const Ae=Ee("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 g({className:t,variant:s,size:a,asChild:r=!1,...l}){const d=r?xe:"button";return e.jsx(d,{"data-slot":"button",className:c(Ae({variant:s,size:a,className:t})),...l})}function D({className:t,type:s,...a}){return e.jsx("input",{type:s,"data-slot":"input",className:c("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",t),...a})}function re({className:t,orientation:s="horizontal",decorative:a=!0,...r}){return e.jsx(Ft,{"data-slot":"separator",decorative:a,orientation:s,className:c("bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",t),...r})}function Js({...t}){return e.jsx(at,{"data-slot":"sheet",...t})}function Ws({...t}){return e.jsx(lt,{"data-slot":"sheet-portal",...t})}function Ys({className:t,...s}){return e.jsx(dt,{"data-slot":"sheet-overlay",className:c("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",t),...s})}function Xs({className:t,children:s,side:a="right",...r}){return e.jsxs(Ws,{children:[e.jsx(Ys,{}),e.jsxs(rt,{"data-slot":"sheet-content",className:c("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",t),...r,children:[s,e.jsxs(nt,{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(ct,{className:"size-4"}),e.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function Qs({className:t,...s}){return e.jsx("div",{"data-slot":"sheet-header",className:c("flex flex-col gap-1.5 p-4",t),...s})}function Zs({className:t,...s}){return e.jsx(it,{"data-slot":"sheet-title",className:c("text-foreground font-semibold",t),...s})}function ea({className:t,...s}){return e.jsx(ot,{"data-slot":"sheet-description",className:c("text-muted-foreground text-sm",t),...s})}function J({className:t,...s}){return e.jsx("div",{"data-slot":"skeleton",className:c("bg-accent animate-pulse rounded-md",t),...s})}function Te({delayDuration:t=0,...s}){return e.jsx(Mt,{"data-slot":"tooltip-provider",delayDuration:t,...s})}function xt({...t}){return e.jsx(Te,{children:e.jsx(Rt,{"data-slot":"tooltip",...t})})}function ht({...t}){return e.jsx(Pt,{"data-slot":"tooltip-trigger",...t})}function ft({className:t,sideOffset:s=0,children:a,...r}){return e.jsx(Vt,{children:e.jsxs(Ut,{"data-slot":"tooltip-content",sideOffset:s,className:c("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",t),...r,children:[a,e.jsx(Bt,{className:"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]"})]})})}const ta="sidebar_state",sa=3600*24*7,aa="16rem",ra="18rem",na="3rem",ia="b",gt=u.createContext(null);function pt(){const t=u.useContext(gt);if(!t)throw new Error("useSidebar must be used within a SidebarProvider.");return t}function oa({defaultOpen:t=!0,open:s,onOpenChange:a,className:r,style:l,children:d,...x}){const m=qs(),[j,h]=u.useState(!1),[v,w]=u.useState(t),y=s??v,b=u.useCallback(n=>{const o=typeof n=="function"?n(y):n;a?a(o):w(o),document.cookie=`${ta}=${o}; path=/; max-age=${sa}`},[a,y]),A=u.useCallback(()=>m?h(n=>!n):b(n=>!n),[m,b,h]);u.useEffect(()=>{const n=o=>{o.key===ia&&(o.metaKey||o.ctrlKey)&&(o.preventDefault(),A())};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[A]);const O=y?"expanded":"collapsed",V=u.useMemo(()=>({state:O,open:y,setOpen:b,isMobile:m,openMobile:j,setOpenMobile:h,toggleSidebar:A}),[O,y,b,m,j,h,A]);return e.jsx(gt.Provider,{value:V,children:e.jsx(Te,{delayDuration:0,children:e.jsx("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":aa,"--sidebar-width-icon":na,...l},className:c("group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full",r),...x,children:d})})})}function la({side:t="left",variant:s="sidebar",collapsible:a="offcanvas",className:r,children:l,...d}){const{isMobile:x,state:m,openMobile:j,setOpenMobile:h}=pt();return a==="none"?e.jsx("div",{"data-slot":"sidebar",className:c("bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col",r),...d,children:l}):x?e.jsx(Js,{open:j,onOpenChange:h,...d,children:e.jsxs(Xs,{"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":ra},side:t,children:[e.jsxs(Qs,{className:"sr-only",children:[e.jsx(Zs,{children:"Sidebar"}),e.jsx(ea,{children:"Displays the mobile sidebar."})]}),e.jsx("div",{className:"flex h-full w-full flex-col",children:l})]})}):e.jsxs("div",{className:"group peer text-sidebar-foreground hidden md:block","data-state":m,"data-collapsible":m==="collapsed"?a:"","data-variant":s,"data-side":t,"data-slot":"sidebar",children:[e.jsx("div",{"data-slot":"sidebar-gap",className:c("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",s==="floating"||s==="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:c("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",t==="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)]",s==="floating"||s==="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",r),...d,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:l})})]})}function da({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:c("flex flex-col gap-2 p-2",t),...s})}function ca({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-footer","data-sidebar":"footer",className:c("flex flex-col gap-2 p-2",t),...s})}function ua({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:c("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",t),...s})}function ma({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:c("relative flex w-full min-w-0 flex-col p-2",t),...s})}function xa({className:t,asChild:s=!1,...a}){const r=s?xe:"div";return e.jsx(r,{"data-slot":"sidebar-group-label","data-sidebar":"group-label",className:c("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",t),...a})}function ha({className:t,...s}){return e.jsx("div",{"data-slot":"sidebar-group-content","data-sidebar":"group-content",className:c("w-full text-sm",t),...s})}function fa({className:t,...s}){return e.jsx("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:c("flex w-full min-w-0 flex-col gap-1",t),...s})}function ga({className:t,...s}){return e.jsx("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:c("group/menu-item relative",t),...s})}const pa=Ee("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 ja({asChild:t=!1,isActive:s=!1,variant:a="default",size:r="default",tooltip:l,className:d,...x}){const m=t?xe:"button",{isMobile:j,state:h}=pt(),v=e.jsx(m,{"data-slot":"sidebar-menu-button","data-sidebar":"menu-button","data-size":r,"data-active":s,className:c(pa({variant:a,size:r}),d),...x});return l?(typeof l=="string"&&(l={children:l}),e.jsxs(xt,{children:[e.jsx(ht,{asChild:!0,children:v}),e.jsx(ft,{side:"right",align:"center",hidden:h!=="collapsed"||j,...l})]})):v}const pe="";class T extends Error{status;body;constructor(s,a,r){super(a),this.status=s,this.body=r}}function ba(t){const s={};if(!t)return s;if(t instanceof Headers)t.forEach((a,r)=>s[r]=a);else if(Array.isArray(t))for(const[a,r]of t)s[a]=r;else Object.assign(s,t);return s}function va(){const t={},s=localStorage.getItem("access_token");return s&&(t.Authorization=`Bearer ${s}`),t}function wa(){const t=localStorage.getItem("active_org_id");return t?{"X-Org-ID":t}:{}}async function te(t,s,a,r={}){const d={...{"Content-Type":"application/json"},...r.auth===!1?{}:va(),...wa(),...ba(r.headers)},x=await fetch(`${pe}${t}`,{method:s,headers:d,body:a===void 0?void 0:JSON.stringify(a),...r}),j=(x.headers.get("content-type")||"").includes("application/json"),h=j?await x.json().catch(()=>{}):await x.text().catch(()=>"");if(!x.ok){const v=j&&h&&typeof h=="object"&&"error"in h&&h.error||j&&h&&typeof h=="object"&&"message"in h&&h.message||typeof h=="string"&&h||`HTTP ${x.status}`;throw new T(x.status,String(v),h)}return console.debug("API ->",s,`${pe}${t}`,d),j?h:void 0}const E={get:(t,s)=>te(t,"GET",void 0,s),post:(t,s,a)=>te(t,"POST",s,a),put:(t,s,a)=>te(t,"PUT",s,a),patch:(t,s,a)=>te(t,"PATCH",s,a),delete:(t,s)=>te(t,"DELETE",void 0,s)};function ya(t){return t&&(t.user||t.user_id)}function jt(t){return ya(t)?.role==="admin"}function Na(t){return(t?.org_role??"")==="admin"}const P={isAuthenticated(){return!!localStorage.getItem("access_token")},async login(t,s){const a=await E.post("/api/v1/auth/login",{email:t,password:s});localStorage.setItem("access_token",a.access_token),localStorage.setItem("refresh_token",a.refresh_token)},async register(t,s,a){await E.post("/api/v1/auth/register",{name:t,email:s,password:a})},async me(){return await E.get("/api/v1/auth/me")},async logout(){const t=localStorage.getItem("refresh_token");if(t)try{await E.post("/api/v1/auth/logout",{refresh_token:t})}catch{}localStorage.removeItem("access_token"),localStorage.removeItem("refresh_token")},async forgot(t){await E.post("/api/v1/auth/password/forgot",{email:t})},async reset(t,s){await E.post("/api/v1/auth/password/reset",{token:t,new_password:s})},async verify(t){const s=await fetch(`${pe}/api/v1/auth/verify?token=${encodeURIComponent(t)}`);if(!s.ok){const a=await s.text();throw new Error(a)}}};function Sa({...t}){return e.jsx(Ht,{"data-slot":"collapsible",...t})}function Ca({...t}){return e.jsx(Gt,{"data-slot":"collapsible-trigger",...t})}function ka({...t}){return e.jsx(Kt,{"data-slot":"collapsible-content",...t})}function Le({...t}){return e.jsx(qt,{"data-slot":"dropdown-menu",...t})}function $e({...t}){return e.jsx(Jt,{"data-slot":"dropdown-menu-trigger",...t})}function Fe({className:t,sideOffset:s=4,...a}){return e.jsx(Wt,{children:e.jsx(Yt,{"data-slot":"dropdown-menu-content",sideOffset:s,className:c("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",t),...a})})}function W({className:t,inset:s,variant:a="default",...r}){return e.jsx(Xt,{"data-slot":"dropdown-menu-item","data-inset":s,"data-variant":a,className:c("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",t),...r})}function Ia(){const{setTheme:t,theme:s}=st();return e.jsxs(Le,{children:[e.jsx($e,{asChild:!0,children:e.jsx(g,{variant:"outline",size:"icon","aria-label":"Toggle theme",children:s==="light"?e.jsx(ws,{className:"h-5 w-5"}):s==="dark"?e.jsx(ys,{className:"h-5 w-5"}):e.jsx(Ns,{className:"h-5 w-5"})})}),e.jsxs(Fe,{align:"end",children:[e.jsxs(W,{onClick:()=>t("light"),children:[s==="light"&&e.jsx(ge,{}),"Light"]}),e.jsxs(W,{onClick:()=>t("dark"),children:[s==="dark"&&e.jsx(ge,{}),"Dark"]}),e.jsxs(W,{onClick:()=>t("system"),children:[s==="system"&&e.jsx(ge,{}),"System"]})]})]})}const Se="active_org_id",X="active-org-changed",ie="orgs-changed";function q(){return localStorage.getItem(Se)}function ne(t){t?localStorage.setItem(Se,t):localStorage.removeItem(Se),window.dispatchEvent(new CustomEvent(X,{detail:t}))}function Xe(){window.dispatchEvent(new Event(ie))}const _a=()=>{const[t,s]=u.useState([]),[a,r]=u.useState(null);async function l(){try{const m=await E.get("/api/v1/orgs");s(m),!q()&&m.length>0&&(ne(m[0].id),r(m[0].id))}catch(m){const j=m instanceof T?m.message:"Failed to load organizations";console.error(j)}}u.useEffect(()=>{r(q()),l();const m=v=>{v.key==="active_org_id"&&r(v.newValue)};window.addEventListener("storage",m);const j=v=>r(v.detail??null),h=()=>void l();return window.addEventListener(X,j),window.addEventListener(ie,h),()=>{window.removeEventListener("storage",m),window.removeEventListener(X,j),window.removeEventListener(ie,h)}},[]);const d=m=>{ne(m),r(m)},x=t.find(m=>m.id===a)?.name??"Select Org";return e.jsxs(Le,{children:[e.jsx($e,{asChild:!0,children:e.jsx(g,{variant:"outline",className:"w-full justify-start",children:x})}),e.jsx(Fe,{className:"w-48",children:t.length===0?e.jsx(W,{disabled:!0,children:"No organizations"}):t.map(m=>e.jsx(W,{onClick:()=>d(m.id),className:m.id===a?"font-semibold":void 0,children:m.name},m.id))})]})},Qe=[{label:"Dashboard",icon:Ss,to:"/dashboard"},{label:"Core",icon:Os,items:[{label:"Cluster",to:"/core/cluster",icon:Cs},{label:"Node Pools",icon:ks,to:"/core/node-pools"},{label:"Annotations",icon:Is,to:"/core/annotations"},{label:"Labels",icon:_s,to:"/core/labels"},{label:"Taints",icon:Es,to:"/core/taints"},{label:"Servers",icon:zs,to:"/core/servers"}]},{label:"Security",icon:Ts,items:[{label:"Keys & Tokens",icon:Ds,to:"/security/keys"},{label:"SSH Keys",to:"/security/ssh",icon:As}]},{label:"Tasks",icon:Ls,items:[]},{label:"Settings",icon:Ms,items:[{label:"Organizations",to:"/settings/orgs",icon:$s},{label:"Members",to:"/settings/members",icon:Je},{label:"Profile",to:"/settings/me",icon:Fs}]},{label:"Admin",icon:Rs,requiresAdmin:!0,items:[{label:"Users",to:"/admin/users",icon:Je,requiresAdmin:!0}]}];function bt(t,s,a){return t.filter(r=>!(r.requiresAdmin&&!s||r.requiresOrgAdmin&&!a)).map(r=>({...r,items:r.items?bt(r.items,s,a):void 0})).filter(r=>!r.items||r.items.length>0)}const vt=({item:t})=>{const s=we(),a=t.icon;return t.to?e.jsxs(Y,{to:t.to,className:`hover:bg-accent hover:text-accent-foreground flex items-center space-x-2 rounded-md px-4 py-2 text-sm ${s.pathname===t.to?"bg-accent text-accent-foreground":""}`,children:[e.jsx(a,{className:"mr-4 h-4 w-4"}),t.label]}):t.items?e.jsx(Sa,{defaultOpen:!0,className:"group/collapsible",children:e.jsxs(ma,{children:[e.jsx(xa,{asChild:!0,children:e.jsxs(Ca,{children:[e.jsx(a,{className:"mr-4 h-4 w-4"}),t.label,e.jsx(ze,{className:"ml-auto transition-transform group-data-[state=open]/collapsible:rotate-180"})]})}),e.jsx(ka,{children:e.jsx(ha,{children:e.jsx(fa,{children:t.items.map((r,l)=>e.jsx(ga,{children:e.jsx(ja,{asChild:!0,children:e.jsx(vt,{item:r})})},l))})})})]})}):null},Ea=()=>{const[t,s]=u.useState(null),[a,r]=u.useState(!0);u.useEffect(()=>{let d=!0;return(async()=>{try{const x=await P.me();if(!d)return;s(x)}catch{}finally{if(!d)return;r(!1)}})(),()=>{d=!1}},[]);const l=u.useMemo(()=>{const d=jt(t),x=Na(t);return bt(Qe,d,x)},[t]);return e.jsxs(la,{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(ua,{children:(a?Qe:l).map((d,x)=>e.jsx(vt,{item:d},x))}),e.jsxs(ca,{className:"space-y-2 p-4",children:[e.jsx(_a,{}),e.jsx(Ia,{}),e.jsx(g,{onClick:()=>{localStorage.clear(),window.location.reload()},className:"w-full",children:"Logout"})]})]})};function za(){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(Ps,{className:"h-5 w-5"})})})]})})}function Oa(){return e.jsx("div",{className:"flex h-screen",children:e.jsxs(oa,{children:[e.jsx(Ea,{}),e.jsxs("div",{className:"flex flex-1 flex-col",children:[e.jsx("main",{className:"flex-1 overflow-auto p-4",children:e.jsx(Oe,{})}),e.jsx(za,{})]})]})})}function Da({children:t}){const s=we();return P.isAuthenticated()?t?e.jsx(e.Fragment,{children:t}):e.jsx(Oe,{}):e.jsx(De,{to:"/auth/login",state:{from:s},replace:!0})}function Aa({children:t}){const[s,a]=u.useState(!0),[r,l]=u.useState(!1),d=we();return u.useEffect(()=>{let x=!0;return(async()=>{try{const m=await P.me();if(!x)return;l(jt(m))}catch{if(!x)return;l(!1)}finally{if(a(!1),!x)return}})(),()=>{x=!1}},[]),s?null:r?t?e.jsx(e.Fragment,{children:t}):e.jsx(Oe,{}):e.jsx(De,{to:"/403",replace:!0,state:{from:d}})}function Me({...t}){return e.jsx(Qt,{"data-slot":"alert-dialog",...t})}function Re({...t}){return e.jsx(Zt,{"data-slot":"alert-dialog-trigger",...t})}function Ta({...t}){return e.jsx(ns,{"data-slot":"alert-dialog-portal",...t})}function La({className:t,...s}){return e.jsx(is,{"data-slot":"alert-dialog-overlay",className:c("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",t),...s})}function Pe({className:t,...s}){return e.jsxs(Ta,{children:[e.jsx(La,{}),e.jsx(es,{"data-slot":"alert-dialog-content",className:c("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",t),...s})]})}function Ve({className:t,...s}){return e.jsx("div",{"data-slot":"alert-dialog-header",className:c("flex flex-col gap-2 text-center sm:text-left",t),...s})}function Ue({className:t,...s}){return e.jsx("div",{"data-slot":"alert-dialog-footer",className:c("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",t),...s})}function Be({className:t,...s}){return e.jsx(ts,{"data-slot":"alert-dialog-title",className:c("text-lg font-semibold",t),...s})}function He({className:t,...s}){return e.jsx(ss,{"data-slot":"alert-dialog-description",className:c("text-muted-foreground text-sm",t),...s})}function Ge({className:t,...s}){return e.jsx(rs,{className:c(Ae(),t),...s})}function Ke({className:t,...s}){return e.jsx(as,{className:c(Ae({variant:"outline"}),t),...s})}function F({className:t,...s}){return e.jsx("div",{"data-slot":"card",className:c("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",t),...s})}function M({className:t,...s}){return e.jsx("div",{"data-slot":"card-header",className:c("@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",t),...s})}function K({className:t,...s}){return e.jsx("div",{"data-slot":"card-title",className:c("leading-none font-semibold",t),...s})}function R({className:t,...s}){return e.jsx("div",{"data-slot":"card-content",className:c("px-6",t),...s})}function oe({className:t,...s}){return e.jsx("div",{"data-slot":"card-footer",className:c("flex items-center px-6 [.border-t]:pt-6",t),...s})}function le({...t}){return e.jsx(at,{"data-slot":"dialog",...t})}function wt({...t}){return e.jsx(os,{"data-slot":"dialog-trigger",...t})}function $a({...t}){return e.jsx(lt,{"data-slot":"dialog-portal",...t})}function Fa({className:t,...s}){return e.jsx(dt,{"data-slot":"dialog-overlay",className:c("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",t),...s})}function de({className:t,children:s,showCloseButton:a=!0,...r}){return e.jsxs($a,{"data-slot":"dialog-portal",children:[e.jsx(Fa,{}),e.jsxs(rt,{"data-slot":"dialog-content",className:c("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",t),...r,children:[s,a&&e.jsxs(nt,{"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(ct,{}),e.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function ce({className:t,...s}){return e.jsx("div",{"data-slot":"dialog-header",className:c("flex flex-col gap-2 text-center sm:text-left",t),...s})}function ue({className:t,...s}){return e.jsx("div",{"data-slot":"dialog-footer",className:c("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",t),...s})}function me({className:t,...s}){return e.jsx(it,{"data-slot":"dialog-title",className:c("text-lg leading-none font-semibold",t),...s})}function je({className:t,...s}){return e.jsx(ot,{"data-slot":"dialog-description",className:c("text-muted-foreground text-sm",t),...s})}function Ma({className:t,...s}){return e.jsx(ls,{"data-slot":"label",className:c("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",t),...s})}const H=Et,yt=u.createContext({}),S=({...t})=>e.jsx(yt.Provider,{value:{name:t.name},children:e.jsx(zt,{...t})}),ye=()=>{const t=u.useContext(yt),s=u.useContext(Nt),{getFieldState:a}=Ot(),r=Dt({name:t.name}),l=a(t.name,r);if(!t)throw new Error("useFormField should be used within ");const{id:d}=s;return{id:d,name:t.name,formItemId:`${d}-form-item`,formDescriptionId:`${d}-form-item-description`,formMessageId:`${d}-form-item-message`,...l}},Nt=u.createContext({});function C({className:t,...s}){const a=u.useId();return e.jsx(Nt.Provider,{value:{id:a},children:e.jsx("div",{"data-slot":"form-item",className:c("grid gap-2",t),...s})})}function k({className:t,...s}){const{error:a,formItemId:r}=ye();return e.jsx(Ma,{"data-slot":"form-label","data-error":!!a,className:c("data-[error=true]:text-destructive",t),htmlFor:r,...s})}function I({...t}){const{error:s,formItemId:a,formDescriptionId:r,formMessageId:l}=ye();return e.jsx(xe,{"data-slot":"form-control",id:a,"aria-describedby":s?`${r} ${l}`:`${r}`,"aria-invalid":!!s,...t})}function Ze({className:t,...s}){const{formDescriptionId:a}=ye();return e.jsx("p",{"data-slot":"form-description",id:a,className:c("text-muted-foreground text-sm",t),...s})}function _({className:t,...s}){const{error:a,formMessageId:r}=ye(),l=a?String(a?.message??""):s.children;return l?e.jsx("p",{"data-slot":"form-message",id:r,className:c("text-destructive text-sm",t),...s,children:l}):null}function Ce({...t}){return e.jsx(ds,{"data-slot":"select",...t})}function ke({...t}){return e.jsx(ms,{"data-slot":"select-value",...t})}function Ie({className:t,size:s="default",children:a,...r}){return e.jsxs(cs,{"data-slot":"select-trigger","data-size":s,className:c("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",t),...r,children:[a,e.jsx(us,{asChild:!0,children:e.jsx(ze,{className:"size-4 opacity-50"})})]})}function _e({className:t,children:s,position:a="popper",...r}){return e.jsx(xs,{children:e.jsxs(hs,{"data-slot":"select-content",className:c("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",t),position:a,...r,children:[e.jsx(Ra,{}),e.jsx(fs,{className:c("p-1",a==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:s}),e.jsx(Pa,{})]})})}function Q({className:t,children:s,...a}){return e.jsxs(gs,{"data-slot":"select-item",className:c("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",t),...a,children:[e.jsx("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:e.jsx(ps,{children:e.jsx(ge,{className:"size-4"})})}),e.jsx(js,{children:s})]})}function Ra({className:t,...s}){return e.jsx(bs,{"data-slot":"select-scroll-up-button",className:c("flex cursor-default items-center justify-center py-1",t),...s,children:e.jsx(Vs,{className:"size-4"})})}function Pa({className:t,...s}){return e.jsx(vs,{"data-slot":"select-scroll-down-button",className:c("flex cursor-default items-center justify-center py-1",t),...s,children:e.jsx(ze,{className:"size-4"})})}const Va=G({name:L().min(1,"Name required"),email:Z("Enter a valid email"),role:be(["user","admin"]),password:L().min(8,"Min 8 characters")}),Ua=G({name:L().min(1,"Name required"),email:Z("Enter a valid email"),role:be(["user","admin"]),password:L().min(8,"Min 8 characters").optional().or(At(""))});function Ba(){const[t,s]=u.useState([]),[a,r]=u.useState(!0),[l,d]=u.useState(!1),[x,m]=u.useState(!1),[j,h]=u.useState(null),[v,w]=u.useState(null),y=U({resolver:B(Va),mode:"onChange",defaultValues:{name:"",email:"",role:"user",password:""}}),b=U({resolver:B(Ua),mode:"onChange",defaultValues:{name:"",email:"",role:"user",password:""}});async function A(){r(!0);try{const i=await E.get("/api/v1/admin/users?page=1&page_size=100");s(i.users??[])}catch(i){p.error(i instanceof T?i.message:"Failed to load users")}finally{r(!1)}}u.useEffect(()=>{A()},[]);async function O(i){try{const f=await E.post("/api/v1/admin/users",i);s(z=>[f,...z]),d(!1),y.reset({name:"",email:"",role:"user",password:""}),p.success(`Created ${f.email}`)}catch(f){p.error(f instanceof T?f.message:"Failed to create user")}}function V(i){h(i),b.reset({name:i.name||"",email:i.email,role:i.role??"user",password:""}),m(!0)}async function n(i){if(!j)return;const f={name:i.name,email:i.email,role:i.role};i.password&&i.password.length>=8&&(f.password=i.password);try{const z=await E.patch(`/api/v1/admin/users/${j.id}`,f);s($=>$.map(fe=>fe.id===z.id?z:fe)),m(!1),h(null),p.success(`Updated ${z.email}`)}catch(z){p.error(z instanceof T?z.message:"Failed to update user")}}async function o(i){try{w(i),await E.delete(`/api/v1/admin/users/${i}`),s(f=>f.filter(z=>z.id!==i)),p.success("User deleted")}catch(f){p.error(f instanceof T?f.message:"Failed to delete user")}finally{w(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(g,{onClick:()=>d(!0),children:[e.jsx(ut,{className:"mr-2 h-4 w-4"}),"New user"]})]}),e.jsx(re,{}),a?e.jsx("div",{className:"text-muted-foreground text-sm",children:"Loading…"}):t.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:t.map(i=>e.jsxs(F,{className:"flex flex-col",children:[e.jsx(M,{children:e.jsx(K,{className:"text-base",children:i.name||i.email})}),e.jsxs(R,{className:"text-muted-foreground space-y-1 text-sm",children:[e.jsxs("div",{children:["Email: ",i.email]}),e.jsxs("div",{children:["Role: ",i.role]}),e.jsxs("div",{children:["Verified: ",i.email_verified?"Yes":"No"]}),e.jsxs("div",{children:["Joined: ",new Date(i.created_at).toLocaleString()]})]}),e.jsxs(oe,{className:"mt-auto w-full flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs(g,{variant:"outline",onClick:()=>V(i),children:[e.jsx(Us,{className:"mr-2 h-4 w-4"})," Edit"]}),e.jsxs(Me,{children:[e.jsx(Re,{asChild:!0,children:e.jsxs(g,{variant:"destructive",disabled:v===i.id,children:[e.jsx(ve,{className:"mr-2 h-4 w-4"}),v===i.id?"Deleting…":"Delete"]})}),e.jsxs(Pe,{children:[e.jsxs(Ve,{children:[e.jsx(Be,{children:"Delete user?"}),e.jsxs(He,{children:["This will permanently delete ",e.jsx("b",{children:i.email}),"."]})]}),e.jsxs(Ue,{className:"sm:justify-between",children:[e.jsx(Ke,{disabled:v===i.id,children:"Cancel"}),e.jsx(Ge,{asChild:!0,disabled:v===i.id,children:e.jsx(g,{variant:"destructive",onClick:()=>o(i.id),children:"Confirm delete"})})]})]})]})]})]},i.id))}),e.jsx(le,{open:l,onOpenChange:d,children:e.jsxs(de,{className:"sm:max-w-[520px]",children:[e.jsxs(ce,{children:[e.jsx(me,{children:"Create user"}),e.jsx(je,{children:"Add a new user account."})]}),e.jsx(H,{...y,children:e.jsxs("form",{onSubmit:y.handleSubmit(O),className:"grid gap-4 py-2",children:[e.jsx(S,{name:"name",control:y.control,render:({field:i})=>e.jsxs(C,{children:[e.jsx(k,{children:"Name"}),e.jsx(I,{children:e.jsx(D,{...i,placeholder:"Jane Doe"})}),e.jsx(_,{})]})}),e.jsx(S,{name:"email",control:y.control,render:({field:i})=>e.jsxs(C,{children:[e.jsx(k,{children:"Email"}),e.jsx(I,{children:e.jsx(D,{type:"email",...i,placeholder:"jane@example.com"})}),e.jsx(_,{})]})}),e.jsx(S,{name:"role",control:y.control,render:({field:i})=>e.jsxs(C,{children:[e.jsx(k,{children:"Role"}),e.jsxs(Ce,{value:i.value,onValueChange:i.onChange,children:[e.jsx(I,{children:e.jsx(Ie,{className:"w-[200px]",children:e.jsx(ke,{placeholder:"Select role"})})}),e.jsxs(_e,{children:[e.jsx(Q,{value:"user",children:"User"}),e.jsx(Q,{value:"admin",children:"Admin"})]})]}),e.jsx(_,{})]})}),e.jsx(S,{name:"password",control:y.control,render:({field:i})=>e.jsxs(C,{children:[e.jsx(k,{children:"Password"}),e.jsx(I,{children:e.jsx(D,{type:"password",...i,placeholder:"••••••••"})}),e.jsx(_,{})]})}),e.jsxs(ue,{className:"mt-2 flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(g,{type:"button",variant:"outline",onClick:()=>d(!1),children:"Cancel"}),e.jsx(g,{type:"submit",disabled:!y.formState.isValid||y.formState.isSubmitting,children:y.formState.isSubmitting?"Creating…":"Create"})]})]})})]})}),e.jsx(le,{open:x,onOpenChange:m,children:e.jsxs(de,{className:"sm:max-w-[520px]",children:[e.jsxs(ce,{children:[e.jsx(me,{children:"Edit user"}),e.jsx(je,{children:"Update user details. Leave password blank to keep it unchanged."})]}),e.jsx(H,{...b,children:e.jsxs("form",{onSubmit:b.handleSubmit(n),className:"grid gap-4 py-2",children:[e.jsx(S,{name:"name",control:b.control,render:({field:i})=>e.jsxs(C,{children:[e.jsx(k,{children:"Name"}),e.jsx(I,{children:e.jsx(D,{...i})}),e.jsx(_,{})]})}),e.jsx(S,{name:"email",control:b.control,render:({field:i})=>e.jsxs(C,{children:[e.jsx(k,{children:"Email"}),e.jsx(I,{children:e.jsx(D,{type:"email",...i})}),e.jsx(_,{})]})}),e.jsx(S,{name:"role",control:b.control,render:({field:i})=>e.jsxs(C,{children:[e.jsx(k,{children:"Role"}),e.jsxs(Ce,{value:i.value,onValueChange:i.onChange,children:[e.jsx(I,{children:e.jsx(Ie,{className:"w-[200px]",children:e.jsx(ke,{placeholder:"Select role"})})}),e.jsxs(_e,{children:[e.jsx(Q,{value:"user",children:"User"}),e.jsx(Q,{value:"admin",children:"Admin"})]})]}),e.jsx(_,{})]})}),e.jsx(S,{name:"password",control:b.control,render:({field:i})=>e.jsxs(C,{children:[e.jsx(k,{children:"New password (optional)"}),e.jsx(I,{children:e.jsx(D,{type:"password",...i,placeholder:"Leave blank to keep"})}),e.jsx(_,{})]})}),e.jsxs(ue,{className:"mt-2 flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(g,{type:"button",variant:"outline",onClick:()=>m(!1),children:"Cancel"}),e.jsx(g,{type:"submit",disabled:!b.formState.isValid||b.formState.isSubmitting,children:b.formState.isSubmitting?"Saving…":"Save changes"})]})]})})]})})]})}const Ha=G({email:Z()});function Ga(){const t=U({resolver:B(Ha),defaultValues:{email:""}});async function s(a){try{await P.forgot(a.email),p.success("If that email exists, we've sent instructions.")}catch(r){p.error(r.message||"Something went wrong")}}return e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(F,{children:[e.jsx(M,{children:e.jsx(K,{children:"Forgot password"})}),e.jsx(R,{children:e.jsx(H,{...t,children:e.jsxs("form",{onSubmit:t.handleSubmit(s),className:"space-y-4",children:[e.jsx(S,{name:"email",control:t.control,render:({field:a})=>e.jsxs(C,{children:[e.jsx(k,{children:"Email"}),e.jsx(I,{children:e.jsx(D,{placeholder:"you@example.com",...a})}),e.jsx(_,{})]})}),e.jsx(g,{type:"submit",className:"w-full",children:"Send reset link"})]})})})]})})}const Ka=G({email:Z(),password:L().min(6)});function qa(){const t=he(),s=we(),a=U({resolver:B(Ka),defaultValues:{email:"",password:""}});async function r(l){try{await P.login(l.email,l.password),p.success("Welcome back!");const d=s.state?.from?.pathname??"/settings/me";t(d,{replace:!0})}catch(d){p.error(d.message||"Login failed")}}return e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(F,{children:[e.jsx(M,{children:e.jsx(K,{children:"Sign in"})}),e.jsxs(R,{children:[e.jsx(H,{...a,children:e.jsxs("form",{onSubmit:a.handleSubmit(r),className:"space-y-4",children:[e.jsx(S,{name:"email",control:a.control,render:({field:l})=>e.jsxs(C,{children:[e.jsx(k,{children:"Email"}),e.jsx(I,{children:e.jsx(D,{placeholder:"you@example.com",...l})}),e.jsx(_,{})]})}),e.jsx(S,{name:"password",control:a.control,render:({field:l})=>e.jsxs(C,{children:[e.jsx(k,{children:"Password"}),e.jsx(I,{children:e.jsx(D,{type:"password",placeholder:"••••••••",...l})}),e.jsx(_,{})]})}),e.jsx(g,{type:"submit",className:"w-full",children:"Sign in"})]})}),e.jsxs("div",{className:"mt-4 flex justify-between text-sm",children:[e.jsx(Y,{to:"/auth/forgot",className:"underline",children:"Forgot password?"}),e.jsx(Y,{to:"/auth/register",className:"underline",children:"Create an account"})]})]})]})})}function Ja(){const[t,s]=u.useState(null),a=he();u.useEffect(()=>{(async()=>{try{const l=await P.me();s(l)}catch(l){p.error(l.message||"Failed to load profile")}})()},[]);async function r(){await P.logout(),a("/auth/login")}return e.jsx("div",{className:"mx-auto max-w-xl",children:e.jsxs(F,{children:[e.jsx(M,{children:e.jsx(K,{children:"My Account"})}),e.jsxs(R,{className:"space-y-3",children:[t?e.jsx("pre",{className:"bg-muted overflow-auto rounded p-3 text-sm",children:JSON.stringify(t,null,2)}):e.jsx("p",{children:"Loading…"}),e.jsx(g,{onClick:r,children:"Sign out"})]})]})})}const Wa=G({name:L().min(2),email:Z(),password:L().min(6)});function Ya(){const t=he(),s=U({resolver:B(Wa),defaultValues:{name:"",email:"",password:""}});async function a(r){try{await P.register(r.name,r.email,r.password),p.success("Account created! Check your email to verify."),t("/auth/login")}catch(l){p.error(l.message||"Registration failed")}}return e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(F,{children:[e.jsx(M,{children:e.jsx(K,{children:"Create account"})}),e.jsxs(R,{children:[e.jsx(H,{...s,children:e.jsxs("form",{onSubmit:s.handleSubmit(a),className:"space-y-4",children:[e.jsx(S,{name:"name",control:s.control,render:({field:r})=>e.jsxs(C,{children:[e.jsx(k,{children:"Name"}),e.jsx(I,{children:e.jsx(D,{placeholder:"Jane Doe",...r})}),e.jsx(_,{})]})}),e.jsx(S,{name:"email",control:s.control,render:({field:r})=>e.jsxs(C,{children:[e.jsx(k,{children:"Email"}),e.jsx(I,{children:e.jsx(D,{placeholder:"you@example.com",...r})}),e.jsx(_,{})]})}),e.jsx(S,{name:"password",control:s.control,render:({field:r})=>e.jsxs(C,{children:[e.jsx(k,{children:"Password"}),e.jsx(I,{children:e.jsx(D,{type:"password",placeholder:"••••••••",...r})}),e.jsx(_,{})]})}),e.jsx(g,{type:"submit",className:"w-full",children:"Create account"})]})}),e.jsxs("div",{className:"mt-4 text-sm",children:["Already have an account?"," ",e.jsx(Y,{to:"/auth/login",className:"underline",children:"Sign in"})]})]})]})})}const Xa=G({new_password:L().min(6)});function Qa(){const[t]=mt(),s=t.get("token"),a=U({resolver:B(Xa),defaultValues:{new_password:""}}),r=he();async function l(d){if(!s){p.error("Missing token");return}try{await P.reset(s,d.new_password),p.success("Password updated. Please sign in."),r("/auth/login")}catch(x){p.error(x.message||"Reset failed")}}return e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(F,{children:[e.jsx(M,{children:e.jsx(K,{children:"Reset password"})}),e.jsxs(R,{children:[e.jsx(H,{...a,children:e.jsxs("form",{onSubmit:a.handleSubmit(l),className:"space-y-4",children:[e.jsx(S,{name:"new_password",control:a.control,render:({field:d})=>e.jsxs(C,{children:[e.jsx(k,{children:"New password"}),e.jsx(I,{children:e.jsx(D,{type:"password",placeholder:"••••••••",...d})}),e.jsx(_,{})]})}),e.jsx(g,{type:"submit",className:"w-full",children:"Update password"})]})}),e.jsx("div",{className:"mt-4 text-sm",children:e.jsx(Y,{to:"/auth/login",className:"underline",children:"Back to sign in"})})]})]})})}function Za(){const[t]=mt(),s=t.get("token"),[a,r]=u.useState("idle");return u.useEffect(()=>{async function l(){if(!s){r("error");return}try{await P.verify(s),r("ok")}catch(d){p.error(d.message||"Verification failed"),r("error")}}l()},[s]),e.jsx("div",{className:"mx-auto max-w-md",children:e.jsxs(F,{children:[e.jsx(M,{children:e.jsx(K,{children:"Email verification"})}),e.jsxs(R,{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(g,{asChild:!0,className:"mt-3",children:e.jsx(Y,{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(g,{asChild:!0,className:"mt-3",children:e.jsx(Y,{to:"/auth/login",children:"Back to sign in"})})]})]})]})})}function er(){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 et=()=>{const t=he();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(g,{onClick:()=>t("/dashboard"),children:"Go back to Dashboard"})]})};function tr(t){const s=t?.user_id??t?.UserID??t?.user?.id??t?.User?.ID??"",a=t?.email??t?.Email??t?.user?.email??t?.User?.Email,r=t?.name??t?.Name??t?.user?.name??t?.User?.Name,l=t?.role??t?.Role??"member",d=t?.created_at??t?.CreatedAt;return{userId:String(s),email:a,name:r,role:String(l),joinedAt:d}}const sr=G({email:Z("Enter a valid email"),role:be(["member","admin"])}),ar=()=>{const[t,s]=u.useState(!0),[a,r]=u.useState([]),[l,d]=u.useState(null),[x,m]=u.useState(!1),[j,h]=u.useState(!1),[v,w]=u.useState(null),y=u.useMemo(()=>q(),[]),b=U({resolver:B(sr),defaultValues:{email:"",role:"member"},mode:"onChange"});async function A(){try{const o=await E.get("/api/v1/auth/me");d(o)}catch{}}async function O(o){if(!o){r([]),s(!1);return}s(!0);try{const i=await E.get("/api/v1/orgs/members");r((i??[]).map(tr))}catch(i){const f=i instanceof T?i.message:"Failed to load members";p.error(f)}finally{s(!1)}}u.useEffect(()=>{A(),O(y)},[y]),u.useEffect(()=>{const o=()=>void O(q()),i=f=>{f.key==="active_org_id"&&o()};return window.addEventListener(X,o),window.addEventListener("storage",i),()=>{window.removeEventListener(X,o),window.removeEventListener("storage",i)}},[]);async function V(o){const i=q();if(!i){p.error("Select an organization first");return}try{h(!0),await E.post("/api/v1/orgs/invite",o),p.success(`Invited ${o.email}`),m(!1),b.reset({email:"",role:"member"}),O(i)}catch(f){const z=f instanceof T?f.message:"Failed to invite member";p.error(z)}finally{h(!1)}}async function n(o){const i=q();if(!i){p.error("Select an organization first");return}try{w(o),await E.delete(`/api/v1/orgs/members/${o}`,{headers:{"X-Org-ID":i}}),r(f=>f.filter(z=>z.userId!==o)),p.success("Member removed")}catch(f){const z=f instanceof T?f.message:"Failed to remove member";p.error(z)}finally{w(null)}}return t?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(g,{disabled:!0,children:[e.jsx(We,{className:"mr-2 h-4 w-4"}),"Invite"]})]}),e.jsx(re,{}),e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[...Array(6)].map((o,i)=>e.jsxs(F,{children:[e.jsx(M,{children:e.jsx(J,{className:"h-5 w-40"})}),e.jsxs(R,{className:"space-y-2",children:[e.jsx(J,{className:"h-4 w-56"}),e.jsx(J,{className:"h-4 w-40"})]}),e.jsx(oe,{children:e.jsx(J,{className:"h-9 w-24"})})]},i))})]}):q()?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(le,{open:x,onOpenChange:m,children:[e.jsx(wt,{asChild:!0,children:e.jsxs(g,{children:[e.jsx(We,{className:"mr-2 h-4 w-4"}),"Invite"]})}),e.jsxs(de,{className:"sm:max-w-[520px]",children:[e.jsxs(ce,{children:[e.jsx(me,{children:"Invite member"}),e.jsx(je,{children:"Send an invite to join this organization."})]}),e.jsx(H,{...b,children:e.jsxs("form",{onSubmit:b.handleSubmit(V),className:"grid gap-4 py-2",children:[e.jsx(S,{control:b.control,name:"email",render:({field:o})=>e.jsxs(C,{children:[e.jsx(k,{children:"Email"}),e.jsx(I,{children:e.jsx(D,{type:"email",placeholder:"jane@example.com",...o})}),e.jsx(_,{})]})}),e.jsx(S,{control:b.control,name:"role",render:({field:o})=>e.jsxs(C,{children:[e.jsx(k,{children:"Role"}),e.jsxs(Ce,{onValueChange:o.onChange,defaultValue:o.value,children:[e.jsx(I,{children:e.jsx(Ie,{className:"w-[200px]",children:e.jsx(ke,{placeholder:"Select role"})})}),e.jsxs(_e,{children:[e.jsx(Q,{value:"member",children:"Member"}),e.jsx(Q,{value:"admin",children:"Admin"})]})]}),e.jsx(_,{})]})}),e.jsxs(ue,{className:"mt-2 flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(g,{type:"button",variant:"outline",onClick:()=>m(!1),children:"Cancel"}),e.jsx(g,{type:"submit",disabled:!b.formState.isValid||j,children:j?"Sending…":"Send invite"})]})]})})]})]})]}),e.jsx(re,{}),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(o=>{const i=l?.id&&o.userId===l.id;return e.jsxs(F,{className:"flex flex-col",children:[e.jsx(M,{children:e.jsx(K,{className:"text-base",children:o.name||o.email||o.userId})}),e.jsxs(R,{className:"text-muted-foreground space-y-1 text-sm",children:[o.email&&e.jsxs("div",{children:["Email: ",o.email]}),e.jsxs("div",{children:["Role: ",o.role]}),o.joinedAt&&e.jsxs("div",{children:["Joined: ",new Date(o.joinedAt).toLocaleString()]})]}),e.jsxs(oe,{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(Me,{children:[e.jsx(Re,{asChild:!0,children:e.jsxs(g,{variant:"destructive",disabled:i||v===o.userId,className:"ml-auto",children:[e.jsx(ve,{className:"mr-2 h-5 w-5"}),v===o.userId?"Removing…":"Remove"]})}),e.jsxs(Pe,{children:[e.jsxs(Ve,{children:[e.jsx(Be,{children:"Remove member?"}),e.jsxs(He,{children:["This will remove ",e.jsx("b",{children:o.name||o.email||o.userId})," from the organization."]})]}),e.jsxs(Ue,{className:"sm:justify-between",children:[e.jsx(Ke,{disabled:v===o.userId,children:"Cancel"}),e.jsx(Ge,{asChild:!0,disabled:v===o.userId,children:e.jsx(g,{variant:"destructive",onClick:()=>n(o.userId),children:"Confirm remove"})})]})]})]})]})]},o.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(re,{}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"No organization selected. Choose an organization to manage its members."})]})},rr=G({name:L().min(2).max(100),slug:L().min(2).max(50).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/,"Use lowercase letters, numbers, and hyphens.")}),nr=()=>{const[t,s]=u.useState([]),[a,r]=u.useState(!0),[l,d]=u.useState(!1),[x,m]=u.useState(null),[j,h]=u.useState(null),v=u.useRef(!1),w=U({resolver:B(rr),mode:"onChange",defaultValues:{name:"",slug:""}}),y=w.watch("name");u.useEffect(()=>{v.current||w.setValue("slug",Ye(y||""),{shouldValidate:!0})},[y,w]);const b=async()=>{r(!0);try{const n=await E.get("/api/v1/orgs");s(n),d(n.length===0)}catch(n){const o=n instanceof T?n.message:"Failed to load organizations";p.error(o)}finally{r(!1)}};u.useEffect(()=>{m(q()),b();const n=f=>{f.key==="active_org_id"&&m(f.newValue)};window.addEventListener("storage",n);const o=f=>{const z=f.detail??null;m(z)};window.addEventListener(X,o);const i=()=>void b();return window.addEventListener(ie,i),()=>{window.removeEventListener("storage",n),window.removeEventListener(X,o),window.removeEventListener(ie,i)}},[]);async function A(n){try{const o=await E.post("/api/v1/orgs",n);s(i=>[o,...i]),ne(o.id),m(o.id),Xe(),p.success(`Created ${o.name}`),d(!1),w.reset({name:"",slug:""}),v.current=!1}catch(o){const i=o instanceof T?o.message:"Failed to create organization";p.error(i)}}function O(n){ne(n.id),m(n.id),p.success(`Switched to ${n.name}`)}async function V(n){try{h(n.id),await E.delete(`/api/v1/orgs/${n.id}`),s(o=>{const i=o.filter(f=>f.id!==n.id);if(x===n.id){const f=i[0]?.id??null;ne(f),m(f)}return i}),Xe(),p.success(`Deleted ${n.name}`)}catch(o){const i=o instanceof T?o.message:"Failed to delete organization";p.error(i)}finally{h(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((n,o)=>e.jsxs(F,{children:[e.jsx(M,{children:e.jsx(J,{className:"h-5 w-40"})}),e.jsxs(R,{children:[e.jsx(J,{className:"mb-2 h-4 w-24"}),e.jsx(J,{className:"h-4 w-48"})]}),e.jsx(oe,{children:e.jsx(J,{className:"h-9 w-24"})})]},o))})]}):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(g,{onClick:()=>d(!0),children:"New organization"})]}),e.jsx(re,{}),t.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:t.map(n=>e.jsxs(F,{className:"flex flex-col",children:[e.jsx(M,{children:e.jsx(K,{className:"text-base",children:n.name})}),e.jsxs(R,{className:"text-muted-foreground text-sm",children:[e.jsxs("div",{children:["Slug: ",n.slug]}),e.jsxs("div",{className:"mt-1",children:["ID: ",n.id]})]}),e.jsxs(oe,{className:"mt-auto w-full flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(g,{onClick:()=>O(n),children:n.id===x?"Selected":"Select"}),e.jsxs(Me,{children:[e.jsx(Re,{asChild:!0,children:e.jsxs(g,{variant:"destructive",className:"ml-auto",disabled:j===n.id,children:[e.jsx(ve,{className:"mr-2 h-5 w-5"}),j===n.id?"Deleting…":"Delete"]})}),e.jsxs(Pe,{children:[e.jsxs(Ve,{children:[e.jsx(Be,{children:"Delete organization?"}),e.jsxs(He,{children:["This will permanently delete ",e.jsx("b",{children:n.name}),". This action cannot be undone."]})]}),e.jsxs(Ue,{className:"sm:justify-between",children:[e.jsx(Ke,{disabled:j===n.id,children:"Cancel"}),e.jsx(Ge,{asChild:!0,disabled:j===n.id,children:e.jsx(g,{variant:"destructive",onClick:()=>V(n),children:"Confirm delete"})})]})]})]})]})]},n.id))}),e.jsx(le,{open:l,onOpenChange:d,children:e.jsxs(de,{className:"sm:max-w-[480px]",children:[e.jsxs(ce,{children:[e.jsx(me,{children:"Create organization"}),e.jsx(je,{children:"Set a name and a URL-friendly slug."})]}),e.jsx(H,{...w,children:e.jsxs("form",{onSubmit:w.handleSubmit(A),className:"space-y-4",children:[e.jsx(S,{control:w.control,name:"name",render:({field:n})=>e.jsxs(C,{children:[e.jsx(k,{children:"Name"}),e.jsx(I,{children:e.jsx(D,{placeholder:"Acme Inc",autoFocus:!0,...n})}),e.jsx(Ze,{children:"This is your organization’s display name."}),e.jsx(_,{})]})}),e.jsx(S,{control:w.control,name:"slug",render:({field:n})=>e.jsxs(C,{children:[e.jsx(k,{children:"Slug"}),e.jsx(I,{children:e.jsx(D,{placeholder:"acme-inc",...n,onChange:o=>{v.current=!0,n.onChange(o)},onBlur:o=>{const i=Ye(o.target.value);w.setValue("slug",i,{shouldValidate:!0}),n.onBlur()}})}),e.jsx(Ze,{children:"Lowercase, numbers and hyphens only."}),e.jsx(_,{})]})}),e.jsxs(ue,{className:"flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(g,{type:"button",variant:"outline",onClick:()=>{w.reset(),d(!1),v.current=!1},children:"Cancel"}),e.jsx(g,{type:"submit",disabled:!w.formState.isValid||w.formState.isSubmitting,children:w.formState.isSubmitting?"Creating...":"Create"})]})]})})]})})]})},ir=Ee("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 or({className:t,variant:s,asChild:a=!1,...r}){const l=a?xe:"span";return e.jsx(l,{"data-slot":"badge",className:c(ir({variant:s}),t),...r})}function lr({className:t,...s}){return e.jsx("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:e.jsx("table",{"data-slot":"table",className:c("w-full caption-bottom text-sm",t),...s})})}function dr({className:t,...s}){return e.jsx("thead",{"data-slot":"table-header",className:c("[&_tr]:border-b",t),...s})}function cr({className:t,...s}){return e.jsx("tbody",{"data-slot":"table-body",className:c("[&_tr:last-child]:border-0",t),...s})}function tt({className:t,...s}){return e.jsx("tr",{"data-slot":"table-row",className:c("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",t),...s})}function se({className:t,...s}){return e.jsx("th",{"data-slot":"table-head",className:c("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...s})}function ae({className:t,...s}){return e.jsx("td",{"data-slot":"table-cell",className:c("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...s})}const ur=G({name:L().min(1,"Name is required").max(100,"Max 100 characters"),comment:L().trim().max(100,"Max 100 characters").default(""),bits:be(["2048","3072","4096"])});function mr(t,s="download.bin"){if(!t)return s;const a=/filename\*=UTF-8''([^;]+)/i.exec(t);return a?.[1]?decodeURIComponent(a[1]):/filename="?([^"]+)"?/i.exec(t)?.[1]??s}function xr(t,s=24){return!t||t.length<=s*2+3?t:`${t.slice(0,s)}…${t.slice(-s)}`}function hr(t){return t?.split(/\s+/)?.[0]??"ssh-key"}async function fr(t){try{await navigator.clipboard.writeText(t)}catch{const s=document.createElement("textarea");s.value=t,s.setAttribute("readonly",""),s.style.position="absolute",s.style.left="-9999px",document.body.appendChild(s),s.select(),document.execCommand("copy"),document.body.removeChild(s)}}const gr=()=>{const[t,s]=u.useState([]),[a,r]=u.useState(null),[l,d]=u.useState(!0),[x,m]=u.useState(""),[j,h]=u.useState(!1),v=u.useMemo(()=>!!localStorage.getItem("active_org_id"),[]);async function w(){d(!0),r(null);try{if(!v){s([]),r("Select an organization first.");return}const n=await E.get("/api/v1/ssh");s(n??[])}catch(n){console.error(n),r("Failed to fetch SSH keys")}finally{d(!1)}}u.useEffect(()=>{w();const n=o=>{o.key==="active_org_id"&&w()};return window.addEventListener("storage",n),()=>window.removeEventListener("storage",n)},[]);const y=t.filter(n=>`${n.name} ${n.public_keys} ${n.fingerprint}`.toLowerCase().includes(x.toLowerCase()));async function b(n,o="both"){const i=localStorage.getItem("access_token"),f=localStorage.getItem("active_org_id"),z=`${pe}/api/v1/ssh/${encodeURIComponent(n)}/download?part=${encodeURIComponent(o)}`;try{const $=await fetch(z,{method:"GET",headers:{...i?{Authorization:`Bearer ${i}`}:{},...f?{"X-Org-ID":f}:{}}});if(!$.ok){const kt=await $.text().catch(()=>"");throw new Error(kt||`HTTP ${$.status}`)}const fe=await $.blob(),St=o==="both"?`ssh_key_${n}.zip`:o==="public"?`id_rsa_${n}.pub`:`id_rsa_${n}.pem`,Ct=mr($.headers.get("content-disposition")??void 0,St),qe=URL.createObjectURL(fe),ee=document.createElement("a");ee.href=qe,ee.download=Ct,document.body.appendChild(ee),ee.click(),ee.remove(),URL.revokeObjectURL(qe)}catch($){console.error($),alert($ instanceof Error?$.message:"Download failed")}}async function A(n){try{await E.delete(`/api/v1/ssh/${encodeURIComponent(n)}`),await w()}catch(o){console.error(o),alert("Failed to delete key")}}const O=U({resolver:B(ur),defaultValues:{name:"",comment:"deploy@autoglue",bits:"4096"}});async function V(n){try{await E.post("/api/v1/ssh",{bits:Number(n.bits),comment:n.comment?.trim()??"",name:n.name.trim(),download:"none"}),h(!1),O.reset(),await w()}catch(o){console.error(o),alert("Failed to create key")}}return l?e.jsx("div",{className:"p-6",children:"Loading SSH Keys…"}):a?e.jsx("div",{className:"p-6 text-red-500",children:a}):e.jsx(Te,{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:x,onChange:n=>m(n.target.value),placeholder:"Search by name, fingerprint or key"})}),e.jsxs(le,{open:j,onOpenChange:h,children:[e.jsx(wt,{asChild:!0,children:e.jsxs(g,{onClick:()=>h(!0),children:[e.jsx(ut,{className:"mr-2 h-4 w-4"}),"Create New Keypair"]})}),e.jsxs(de,{className:"sm:max-w-lg",children:[e.jsx(ce,{children:e.jsx(me,{children:"Create SSH Keypair"})}),e.jsx(H,{...O,children:e.jsxs("form",{onSubmit:O.handleSubmit(V),className:"space-y-4",children:[e.jsx(S,{control:O.control,name:"name",render:({field:n})=>e.jsxs(C,{children:[e.jsx(k,{children:"Name"}),e.jsx(I,{children:e.jsx(D,{placeholder:"e.g., CI deploy key",...n})}),e.jsx(_,{})]})}),e.jsx(S,{control:O.control,name:"comment",render:({field:n})=>e.jsxs(C,{children:[e.jsx(k,{children:"Comment"}),e.jsx(I,{children:e.jsx(D,{placeholder:"e.g., deploy@autoglue",...n})}),e.jsx(_,{})]})}),e.jsx(S,{control:O.control,name:"bits",render:({field:n})=>e.jsxs(C,{children:[e.jsx(k,{children:"Key size"}),e.jsx(I,{children:e.jsxs("select",{className:"bg-background w-full rounded-md border px-3 py-2 text-sm",value:n.value,onChange:n.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(_,{})]})}),e.jsxs(ue,{className:"gap-2",children:[e.jsx(g,{type:"button",variant:"outline",onClick:()=>h(!1),children:"Cancel"}),e.jsx(g,{type:"submit",disabled:O.formState.isSubmitting,children:O.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(lr,{children:[e.jsx(dr,{children:e.jsxs(tt,{children:[e.jsx(se,{children:"Name"}),e.jsx(se,{className:"min-w-[360px]",children:"Public Key"}),e.jsx(se,{children:"Fingerprint"}),e.jsx(se,{children:"Created"}),e.jsx(se,{className:"w-[160px] text-right",children:"Actions"})]})}),e.jsx(cr,{children:y.map(n=>{const o=hr(n.public_keys),i=xr(n.public_keys,18);return e.jsxs(tt,{children:[e.jsx(ae,{className:"align-top",children:n.name}),e.jsx(ae,{className:"align-top",children:e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(or,{variant:"secondary",className:"whitespace-nowrap",children:o}),e.jsxs(xt,{children:[e.jsx(ht,{asChild:!0,children:e.jsx("code",{className:"font-mono text-sm break-all md:max-w-[48ch] md:truncate md:break-normal",children:i})}),e.jsx(ft,{className:"max-w-[70vw]",children:e.jsx("div",{className:"max-w-full",children:e.jsx("p",{className:"font-mono text-xs break-all",children:n.public_keys})})})]})]})}),e.jsx(ae,{className:"align-top",children:e.jsx("code",{className:"font-mono text-sm",children:n.fingerprint})}),e.jsx(ae,{className:"align-top",children:new Date(n.created_at).toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"})}),e.jsx(ae,{className:"align-top",children:e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsxs(g,{variant:"outline",size:"sm",onClick:()=>fr(n.public_keys),title:"Copy public key",children:[e.jsx(Bs,{className:"mr-2 h-4 w-4"}),"Copy"]}),e.jsxs(Le,{children:[e.jsx($e,{asChild:!0,children:e.jsxs(g,{variant:"outline",size:"sm",children:[e.jsx(Hs,{className:"mr-2 h-4 w-4"}),"Download"]})}),e.jsxs(Fe,{align:"end",children:[e.jsx(W,{onClick:()=>b(n.id,"both"),children:"Public + Private (.zip)"}),e.jsx(W,{onClick:()=>b(n.id,"public"),children:"Public only (.pub)"}),e.jsx(W,{onClick:()=>b(n.id,"private"),children:"Private only (.pem)"})]})]}),e.jsxs(g,{variant:"destructive",size:"sm",onClick:()=>A(n.id),children:[e.jsx(ve,{className:"mr-2 h-4 w-4"}),"Delete"]})]})})]},n.id)})})]})})})]})})};function pr(){return e.jsxs(Gs,{children:[e.jsx(N,{path:"/403",element:e.jsx(er,{})}),e.jsx(N,{path:"/",element:e.jsx(De,{to:"/auth/login",replace:!0})}),e.jsxs(N,{path:"/auth",children:[e.jsx(N,{path:"login",element:e.jsx(qa,{})}),e.jsx(N,{path:"register",element:e.jsx(Ya,{})}),e.jsx(N,{path:"forgot",element:e.jsx(Ga,{})}),e.jsx(N,{path:"reset",element:e.jsx(Qa,{})}),e.jsx(N,{path:"verify",element:e.jsx(Za,{})})]}),e.jsx(N,{element:e.jsx(Da,{}),children:e.jsxs(N,{element:e.jsx(Oa,{}),children:[e.jsx(N,{element:e.jsx(Aa,{}),children:e.jsx(N,{path:"/admin",children:e.jsx(N,{path:"users",element:e.jsx(Ba,{})})})}),e.jsx(N,{path:"/core"}),e.jsx(N,{path:"/security",children:e.jsx(N,{path:"ssh",element:e.jsx(gr,{})})}),e.jsxs(N,{path:"/settings",children:[e.jsx(N,{path:"orgs",element:e.jsx(nr,{})}),e.jsx(N,{path:"members",element:e.jsx(ar,{})}),e.jsx(N,{path:"me",element:e.jsx(Ja,{})})]}),e.jsx(N,{path:"*",element:e.jsx(et,{})})]})}),e.jsx(N,{path:"*",element:e.jsx(et,{})})]})}const jr=({...t})=>{const{theme:s="system"}=st();return e.jsx(Tt,{theme:s,className:"toaster group",style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)"},...t})};function br({children:t,defaultTheme:s="system",storageKey:a="vite-ui-theme"}){return e.jsx(Lt,{attribute:"class",defaultTheme:s,enableSystem:!0,storageKey:a,disableTransitionOnChange:!0,children:t})}$t.createRoot(document.getElementById("root")).render(e.jsx(u.StrictMode,{children:e.jsx(Ks,{children:e.jsxs(br,{defaultTheme:"system",storageKey:"dragon-theme",children:[e.jsx(pr,{}),e.jsx(jr,{richColors:!0,position:"top-right"})]})})})); diff --git a/internal/ui/dist/assets/index-D2Vr0ZQJ.css b/internal/ui/dist/assets/index-D2Vr0ZQJ.css new file mode 100644 index 0000000..6751885 --- /dev/null +++ b/internal/ui/dist/assets/index-D2Vr0ZQJ.css @@ -0,0 +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))}} diff --git a/internal/ui/dist/assets/index-DXA6UWYz.css b/internal/ui/dist/assets/index-DXA6UWYz.css deleted file mode 100644 index 4d11639..0000000 --- a/internal/ui/dist/assets/index-DXA6UWYz.css +++ /dev/null @@ -1 +0,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;--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-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-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-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-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)}.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\/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-40{width:calc(var(--spacing)*40)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-\[160px\]{width:160px}.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}.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}.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-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-10{padding-block:calc(var(--spacing)*10)}.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}.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-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)}.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-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-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.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\=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-\[480px\]{max-width:480px}.sm\:max-w-\[520px\]{max-width:520px}.sm\:max-w-lg{max-width:var(--container-lg)}.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-\[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-eleTxiqf.js b/internal/ui/dist/assets/index-eleTxiqf.js new file mode 100644 index 0000000..fb26c56 --- /dev/null +++ b/internal/ui/dist/assets/index-eleTxiqf.js @@ -0,0 +1 @@ +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-9eRs70j8.js b/internal/ui/dist/assets/radix-9eRs70j8.js deleted file mode 100644 index 0209055..0000000 --- a/internal/ui/dist/assets/radix-9eRs70j8.js +++ /dev/null @@ -1,11 +0,0 @@ -import{r as s,j as l,a as xt,b as on,c as Sr,h as wt,d as Ct,u as br,o as Rr,s as Pr,f as _r,e as Tr,g as Ir,i as Mr,l as Ar,k as Dr,R as me}from"./vendor-D1z0LlOQ.js";function Vt(e,n){if(typeof e=="function")return e(n);e!=null&&(e.current=n)}function Ge(...e){return n=>{let t=!1;const o=e.map(r=>{const a=Vt(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(Or);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 vc=ge("Slot");function Nr(e){const n=s.forwardRef((t,o)=>{const{children:r,...a}=t;if(s.isValidElement(r)){const i=Lr(r),c=jr(a,r.props);return r.type!==s.Fragment&&(c.ref=o?Ge(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 rn=Symbol("radix.slottable");function sn(e){const n=({children:t})=>l.jsx(l.Fragment,{children:t});return n.displayName=`${e}.Slottable`,n.__radixId=rn,n}function Or(e){return s.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===rn}function jr(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 Lr(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 Fr=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],_=Fr.reduce((e,n)=>{const t=ge(`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 an(e,n){e&&xt.flushSync(()=>e.dispatchEvent(n))}var kr="Separator",zt="horizontal",$r=["horizontal","vertical"],cn=s.forwardRef((e,n)=>{const{decorative:t,orientation:o=zt,...r}=e,a=Br(o)?o:zt,c=t?{role:"none"}:{"aria-orientation":a==="vertical"?a:void 0,role:"separator"};return l.jsx(_.div,{"data-orientation":a,...c,...r,ref:n})});cn.displayName=kr;function Br(e){return $r.includes(e)}var mc=cn;function E(e,n,{checkForDefaultPrevented:t=!0}={}){return function(r){if(e?.(r),t===!1||!r.defaultPrevented)return n?.(r)}}function Ur(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 ie(e,n=[]){let t=[];function o(a,i){const c=s.createContext(i),u=t.length;t=[...t,i];const d=p=>{const{scope:g,children:h,...w}=p,v=g?.[e]?.[u]||c,m=s.useMemo(()=>w,Object.values(w));return l.jsx(v.Provider,{value:m,children:h})};d.displayName=a+"Provider";function f(p,g){const h=g?.[e]?.[u]||c,w=s.useContext(h);if(w)return w;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,Hr(r,...n)]}function Hr(...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:()=>{},Gr=on[" useId ".trim().toString()]||(()=>{}),Kr=0;function oe(e){const[n,t]=s.useState(Gr());return K(()=>{t(o=>o??String(Kr++))},[e]),e||(n?`radix-${n}`:"")}var Wr=on[" useInsertionEffect ".trim().toString()]||K;function he({prop:e,defaultProp:n,onChange:t=()=>{},caller:o}){const[r,a,i]=Vr({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=zr(f)?f(e):f;p!==e&&i.current?.(p)}else a(f)},[c,e,a,i]);return[u,d]}function Vr({defaultProp:e,onChange:n}){const[t,o]=s.useState(e),r=s.useRef(t),a=s.useRef(n);return Wr(()=>{a.current=n},[n]),s.useEffect(()=>{r.current!==t&&(a.current?.(t),r.current=t)},[t,r]),[t,o,a]}function zr(e){return typeof e=="function"}function ae(e){const n=s.useRef(e);return s.useEffect(()=>{n.current=e}),s.useMemo(()=>(...t)=>n.current?.(...t),[])}function Yr(e,n=globalThis?.document){const t=ae(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 Xr="DismissableLayer",ct="dismissableLayer.update",qr="dismissableLayer.pointerDownOutside",Zr="dismissableLayer.focusOutside",Yt,ln=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(ln),[f,p]=s.useState(null),g=f?.ownerDocument??globalThis?.document,[,h]=s.useState({}),w=M(n,P=>p(P)),v=Array.from(d.layers),[m]=[...d.layersWithOutsidePointerEventsDisabled].slice(-1),C=v.indexOf(m),x=f?v.indexOf(f):-1,y=d.layersWithOutsidePointerEventsDisabled.size>0,b=x>=C,I=es(P=>{const T=P.target,k=[...d.branches].some(F=>F.contains(T));!b||k||(r?.(P),i?.(P),P.defaultPrevented||c?.())},g),O=ts(P=>{const T=P.target;[...d.branches].some(F=>F.contains(T))||(a?.(P),i?.(P),P.defaultPrevented||c?.())},g);return Yr(P=>{x===d.layers.size-1&&(o?.(P),!P.defaultPrevented&&c&&(P.preventDefault(),c()))},g),s.useEffect(()=>{if(f)return t&&(d.layersWithOutsidePointerEventsDisabled.size===0&&(Yt=g.body.style.pointerEvents,g.body.style.pointerEvents="none"),d.layersWithOutsidePointerEventsDisabled.add(f)),d.layers.add(f),Xt(),()=>{t&&d.layersWithOutsidePointerEventsDisabled.size===1&&(g.body.style.pointerEvents=Yt)}},[f,g,t,d]),s.useEffect(()=>()=>{f&&(d.layers.delete(f),d.layersWithOutsidePointerEventsDisabled.delete(f),Xt())},[f,d]),s.useEffect(()=>{const P=()=>h({});return document.addEventListener(ct,P),()=>document.removeEventListener(ct,P)},[]),l.jsx(_.div,{...u,ref:w,style:{pointerEvents:y?b?"auto":"none":void 0,...e.style},onFocusCapture:E(e.onFocusCapture,O.onFocusCapture),onBlurCapture:E(e.onBlurCapture,O.onBlurCapture),onPointerDownCapture:E(e.onPointerDownCapture,I.onPointerDownCapture)})});De.displayName=Xr;var Jr="DismissableLayerBranch",Qr=s.forwardRef((e,n)=>{const t=s.useContext(ln),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})});Qr.displayName=Jr;function es(e,n=globalThis?.document){const t=ae(e),o=s.useRef(!1),r=s.useRef(()=>{});return s.useEffect(()=>{const a=c=>{if(c.target&&!o.current){let u=function(){un(qr,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 ts(e,n=globalThis?.document){const t=ae(e),o=s.useRef(!1);return s.useEffect(()=>{const r=a=>{a.target&&!o.current&&un(Zr,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 Xt(){const e=new CustomEvent(ct);document.dispatchEvent(e)}function un(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?an(r,a):r.dispatchEvent(a)}var rt="focusScope.autoFocusOnMount",st="focusScope.autoFocusOnUnmount",qt={bubbles:!1,cancelable:!0},ns="FocusScope",Ke=s.forwardRef((e,n)=>{const{loop:t=!1,trapped:o=!1,onMountAutoFocus:r,onUnmountAutoFocus:a,...i}=e,[c,u]=s.useState(null),d=ae(r),f=ae(a),p=s.useRef(null),g=M(n,v=>u(v)),h=s.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;s.useEffect(()=>{if(o){let v=function(y){if(h.paused||!c)return;const b=y.target;c.contains(b)?p.current=b:de(p.current,{select:!0})},m=function(y){if(h.paused||!c)return;const b=y.relatedTarget;b!==null&&(c.contains(b)||de(p.current,{select:!0}))},C=function(y){if(document.activeElement===document.body)for(const I of y)I.removedNodes.length>0&&de(c)};document.addEventListener("focusin",v),document.addEventListener("focusout",m);const x=new MutationObserver(C);return c&&x.observe(c,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",v),document.removeEventListener("focusout",m),x.disconnect()}}},[o,c,h.paused]),s.useEffect(()=>{if(c){Jt.add(h);const v=document.activeElement;if(!c.contains(v)){const C=new CustomEvent(rt,qt);c.addEventListener(rt,d),c.dispatchEvent(C),C.defaultPrevented||(os(cs(dn(c)),{select:!0}),document.activeElement===v&&de(c))}return()=>{c.removeEventListener(rt,d),setTimeout(()=>{const C=new CustomEvent(st,qt);c.addEventListener(st,f),c.dispatchEvent(C),C.defaultPrevented||de(v??document.body,{select:!0}),c.removeEventListener(st,f),Jt.remove(h)},0)}}},[c,d,f,h]);const w=s.useCallback(v=>{if(!t&&!o||h.paused)return;const m=v.key==="Tab"&&!v.altKey&&!v.ctrlKey&&!v.metaKey,C=document.activeElement;if(m&&C){const x=v.currentTarget,[y,b]=rs(x);y&&b?!v.shiftKey&&C===b?(v.preventDefault(),t&&de(y,{select:!0})):v.shiftKey&&C===y&&(v.preventDefault(),t&&de(b,{select:!0})):C===x&&v.preventDefault()}},[t,o,h.paused]);return l.jsx(_.div,{tabIndex:-1,...i,ref:g,onKeyDown:w})});Ke.displayName=ns;function os(e,{select:n=!1}={}){const t=document.activeElement;for(const o of e)if(de(o,{select:n}),document.activeElement!==t)return}function rs(e){const n=dn(e),t=Zt(n,e),o=Zt(n.reverse(),e);return[t,o]}function dn(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 Zt(e,n){for(const t of e)if(!ss(t,{upTo:n}))return t}function ss(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 as(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&&as(e)&&n&&e.select()}}var Jt=is();function is(){let e=[];return{add(n){const t=e[0];n!==t&&t?.pause(),e=Qt(e,n),e.unshift(n)},remove(n){e=Qt(e,n),e[0]?.resume()}}}function Qt(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 ls="Portal",Ne=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?Sr.createPortal(l.jsx(_.div,{...o,ref:n}),i):null});Ne.displayName=ls;function us(e,n){return s.useReducer((t,o)=>n[t][o]??t,e)}var re=e=>{const{present:n,children:t}=e,o=ds(n),r=typeof t=="function"?t({present:o.isPresent}):s.Children.only(t),a=M(o.ref,fs(r));return typeof t=="function"||o.isPresent?s.cloneElement(r,{ref:a}):null};re.displayName="Presence";function ds(e){const[n,t]=s.useState(),o=s.useRef(null),r=s.useRef(e),a=s.useRef("none"),i=e?"mounted":"unmounted",[c,u]=us(i,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return s.useEffect(()=>{const d=ke(o.current);a.current=c==="mounted"?d:"none"},[c]),K(()=>{const d=o.current,f=r.current;if(f!==e){const g=a.current,h=ke(d);e?u("MOUNT"):h==="none"||d?.display==="none"?u("UNMOUNT"):u(f&&g!==h?"ANIMATION_OUT":"UNMOUNT"),r.current=e}},[e,u]),K(()=>{if(n){let d;const f=n.ownerDocument.defaultView??window,p=h=>{const v=ke(o.current).includes(CSS.escape(h.animationName));if(h.target===n&&v&&(u("ANIMATION_END"),!r.current)){const m=n.style.animationFillMode;n.style.animationFillMode="forwards",d=f.setTimeout(()=>{n.style.animationFillMode==="forwards"&&(n.style.animationFillMode=m)})}},g=h=>{h.target===n&&(a.current=ke(o.current))};return n.addEventListener("animationstart",g),n.addEventListener("animationcancel",p),n.addEventListener("animationend",p),()=>{f.clearTimeout(d),n.removeEventListener("animationstart",g),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 ke(e){return e?.animationName||"none"}function fs(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 at=0;function yt(){s.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??en()),document.body.insertAdjacentElement("beforeend",e[1]??en()),at++,()=>{at===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(n=>n.remove()),at--}},[])}function en(){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 We="Dialog",[fn,pn]=ie(We),[ps,se]=fn(We),vn=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]=he({prop:o,defaultProp:r??!1,onChange:a,caller:We});return l.jsx(ps,{scope:n,triggerRef:c,contentRef:u,contentId:oe(),titleId:oe(),descriptionId:oe(),open:d,onOpenChange:f,onOpenToggle:s.useCallback(()=>f(p=>!p),[f]),modal:i,children:t})};vn.displayName=We;var mn="DialogTrigger",gn=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=se(mn,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":bt(r.open),...o,ref:a,onClick:E(e.onClick,r.onOpenToggle)})});gn.displayName=mn;var Et="DialogPortal",[vs,hn]=fn(Et,{forceMount:void 0}),xn=e=>{const{__scopeDialog:n,forceMount:t,children:o,container:r}=e,a=se(Et,n);return l.jsx(vs,{scope:n,forceMount:t,children:s.Children.map(o,i=>l.jsx(re,{present:t||a.open,children:l.jsx(Ne,{asChild:!0,container:r,children:i})}))})};xn.displayName=Et;var $e="DialogOverlay",wn=s.forwardRef((e,n)=>{const t=hn($e,e.__scopeDialog),{forceMount:o=t.forceMount,...r}=e,a=se($e,e.__scopeDialog);return a.modal?l.jsx(re,{present:o||a.open,children:l.jsx(gs,{...r,ref:n})}):null});wn.displayName=$e;var ms=ge("DialogOverlay.RemoveScroll"),gs=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=se($e,t);return l.jsx(Ct,{as:ms,allowPinchZoom:!0,shards:[r.contentRef],children:l.jsx(_.div,{"data-state":bt(r.open),...o,ref:n,style:{pointerEvents:"auto",...o.style}})})}),xe="DialogContent",Cn=s.forwardRef((e,n)=>{const t=hn(xe,e.__scopeDialog),{forceMount:o=t.forceMount,...r}=e,a=se(xe,e.__scopeDialog);return l.jsx(re,{present:o||a.open,children:a.modal?l.jsx(hs,{...r,ref:n}):l.jsx(xs,{...r,ref:n})})});Cn.displayName=xe;var hs=s.forwardRef((e,n)=>{const t=se(xe,e.__scopeDialog),o=s.useRef(null),r=M(n,t.contentRef,o);return s.useEffect(()=>{const a=o.current;if(a)return wt(a)},[]),l.jsx(yn,{...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())})}),xs=s.forwardRef((e,n)=>{const t=se(xe,e.__scopeDialog),o=s.useRef(!1),r=s.useRef(!1);return l.jsx(yn,{...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()}})}),yn=s.forwardRef((e,n)=>{const{__scopeDialog:t,trapFocus:o,onOpenAutoFocus:r,onCloseAutoFocus:a,...i}=e,c=se(xe,t),u=s.useRef(null),d=M(n,u);return yt(),l.jsxs(l.Fragment,{children:[l.jsx(Ke,{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":bt(c.open),...i,ref:d,onDismiss:()=>c.onOpenChange(!1)})}),l.jsxs(l.Fragment,{children:[l.jsx(Cs,{titleId:c.titleId}),l.jsx(Es,{contentRef:u,descriptionId:c.descriptionId})]})]})}),St="DialogTitle",En=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=se(St,t);return l.jsx(_.h2,{id:r.titleId,...o,ref:n})});En.displayName=St;var Sn="DialogDescription",bn=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=se(Sn,t);return l.jsx(_.p,{id:r.descriptionId,...o,ref:n})});bn.displayName=Sn;var Rn="DialogClose",Pn=s.forwardRef((e,n)=>{const{__scopeDialog:t,...o}=e,r=se(Rn,t);return l.jsx(_.button,{type:"button",...o,ref:n,onClick:E(e.onClick,()=>r.onOpenChange(!1))})});Pn.displayName=Rn;function bt(e){return e?"open":"closed"}var _n="DialogTitleWarning",[ws,Tn]=Ur(_n,{contentName:xe,titleName:St,docsSlug:"dialog"}),Cs=({titleId:e})=>{const n=Tn(_n),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. - -For more information, see https://radix-ui.com/primitives/docs/components/${n.docsSlug}`;return s.useEffect(()=>{e&&(document.getElementById(e)||console.error(t))},[t,e]),null},ys="DialogDescriptionWarning",Es=({contentRef:e,descriptionId:n})=>{const o=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Tn(ys).contentName}}.`;return s.useEffect(()=>{const r=e.current?.getAttribute("aria-describedby");n&&r&&(document.getElementById(n)||console.warn(o))},[o,e,n]),null},Ss=vn,bs=gn,Rs=xn,Ps=wn,_s=Cn,Ts=En,Is=bn,In=Pn,Ms="Arrow",Mn=s.forwardRef((e,n)=>{const{children:t,width:o=10,height:r=5,...a}=e;return l.jsx(_.svg,{...a,ref:n,width:o,height:r,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?t:l.jsx("polygon",{points:"0,0 30,0 15,10"})})});Mn.displayName=Ms;var As=Mn;function Ds(e){const[n,t]=s.useState(void 0);return K(()=>{if(e){t({width:e.offsetWidth,height:e.offsetHeight});const o=new ResizeObserver(r=>{if(!Array.isArray(r)||!r.length)return;const a=r[0];let i,c;if("borderBoxSize"in a){const u=a.borderBoxSize,d=Array.isArray(u)?u[0]:u;i=d.inlineSize,c=d.blockSize}else i=e.offsetWidth,c=e.offsetHeight;t({width:i,height:c})});return o.observe(e,{box:"border-box"}),()=>o.unobserve(e)}else t(void 0)},[e]),n}var Rt="Popper",[An,Re]=ie(Rt),[Ns,Dn]=An(Rt),Nn=e=>{const{__scopePopper:n,children:t}=e,[o,r]=s.useState(null);return l.jsx(Ns,{scope:n,anchor:o,onAnchorChange:r,children:t})};Nn.displayName=Rt;var On="PopperAnchor",jn=s.forwardRef((e,n)=>{const{__scopePopper:t,virtualRef:o,...r}=e,a=Dn(On,t),i=s.useRef(null),c=M(n,i),u=s.useRef(null);return s.useEffect(()=>{const d=u.current;u.current=o?.current||i.current,d!==u.current&&a.onAnchorChange(u.current)}),o?null:l.jsx(_.div,{...r,ref:c})});jn.displayName=On;var Pt="PopperContent",[Os,js]=An(Pt),Ln=s.forwardRef((e,n)=>{const{__scopePopper:t,side:o="bottom",sideOffset:r=0,align:a="center",alignOffset:i=0,arrowPadding:c=0,avoidCollisions:u=!0,collisionBoundary:d=[],collisionPadding:f=0,sticky:p="partial",hideWhenDetached:g=!1,updatePositionStrategy:h="optimized",onPlaced:w,...v}=e,m=Dn(Pt,t),[C,x]=s.useState(null),y=M(n,S=>x(S)),[b,I]=s.useState(null),O=Ds(b),P=O?.width??0,T=O?.height??0,k=o+(a!=="center"?"-"+a:""),F=typeof f=="number"?f:{top:0,right:0,bottom:0,left:0,...f},B=Array.isArray(d)?d:[d],H=B.length>0,U={padding:F,boundary:B.filter(Fs),altBoundary:H},{refs:W,floatingStyles:V,placement:A,isPositioned:G,middlewareData:L}=br({strategy:"fixed",placement:k,whileElementsMounted:(...S)=>Dr(...S,{animationFrame:h==="always"}),elements:{reference:m.anchor},middleware:[Rr({mainAxis:r+T,alignmentAxis:i}),u&&Pr({mainAxis:!0,crossAxis:!1,limiter:p==="partial"?Ar():void 0,...U}),u&&_r({...U}),Tr({...U,apply:({elements:S,rects:D,availableWidth:Y,availableHeight:N})=>{const{width:j,height:$}=D.reference,Q=S.floating.style;Q.setProperty("--radix-popper-available-width",`${Y}px`),Q.setProperty("--radix-popper-available-height",`${N}px`),Q.setProperty("--radix-popper-anchor-width",`${j}px`),Q.setProperty("--radix-popper-anchor-height",`${$}px`)}}),b&&Ir({element:b,padding:c}),ks({arrowWidth:P,arrowHeight:T}),g&&Mr({strategy:"referenceHidden",...U})]}),[R,Z]=$n(A),z=ae(w);K(()=>{G&&z?.()},[G,z]);const te=L.arrow?.x,ce=L.arrow?.y,J=L.arrow?.centerOffset!==0,[le,q]=s.useState();return K(()=>{C&&q(window.getComputedStyle(C).zIndex)},[C]),l.jsx("div",{ref:W.setFloating,"data-radix-popper-content-wrapper":"",style:{...V,transform:G?V.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:le,"--radix-popper-transform-origin":[L.transformOrigin?.x,L.transformOrigin?.y].join(" "),...L.hide?.referenceHidden&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:l.jsx(Os,{scope:t,placedSide:R,onArrowChange:I,arrowX:te,arrowY:ce,shouldHideArrow:J,children:l.jsx(_.div,{"data-side":R,"data-align":Z,...v,ref:y,style:{...v.style,animation:G?void 0:"none"}})})})});Ln.displayName=Pt;var Fn="PopperArrow",Ls={top:"bottom",right:"left",bottom:"top",left:"right"},kn=s.forwardRef(function(n,t){const{__scopePopper:o,...r}=n,a=js(Fn,o),i=Ls[a.placedSide];return l.jsx("span",{ref:a.onArrowChange,style:{position:"absolute",left:a.arrowX,top:a.arrowY,[i]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[a.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[a.placedSide],visibility:a.shouldHideArrow?"hidden":void 0},children:l.jsx(As,{...r,ref:t,style:{...r.style,display:"block"}})})});kn.displayName=Fn;function Fs(e){return e!==null}var ks=e=>({name:"transformOrigin",options:e,fn(n){const{placement:t,rects:o,middlewareData:r}=n,i=r.arrow?.centerOffset!==0,c=i?0:e.arrowWidth,u=i?0:e.arrowHeight,[d,f]=$n(t),p={start:"0%",center:"50%",end:"100%"}[f],g=(r.arrow?.x??0)+c/2,h=(r.arrow?.y??0)+u/2;let w="",v="";return d==="bottom"?(w=i?p:`${g}px`,v=`${-u}px`):d==="top"?(w=i?p:`${g}px`,v=`${o.floating.height+u}px`):d==="right"?(w=`${-u}px`,v=i?p:`${h}px`):d==="left"&&(w=`${o.floating.width+u}px`,v=i?p:`${h}px`),{data:{x:w,y:v}}}});function $n(e){const[n,t="center"]=e.split("-");return[n,t]}var _t=Nn,Tt=jn,It=Ln,Mt=kn,Bn=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),$s="VisuallyHidden",Un=s.forwardRef((e,n)=>l.jsx(_.span,{...e,ref:n,style:{...Bn,...e.style}}));Un.displayName=$s;var Bs=Un,[Ve,gc]=ie("Tooltip",[Re]),ze=Re(),Hn="TooltipProvider",Us=700,lt="tooltip.open",[Hs,At]=Ve(Hn),Gn=e=>{const{__scopeTooltip:n,delayDuration:t=Us,skipDelayDuration:o=300,disableHoverableContent:r=!1,children:a}=e,i=s.useRef(!0),c=s.useRef(!1),u=s.useRef(0);return s.useEffect(()=>{const d=u.current;return()=>window.clearTimeout(d)},[]),l.jsx(Hs,{scope:n,isOpenDelayedRef:i,delayDuration:t,onOpen:s.useCallback(()=>{window.clearTimeout(u.current),i.current=!1},[]),onClose:s.useCallback(()=>{window.clearTimeout(u.current),u.current=window.setTimeout(()=>i.current=!0,o)},[o]),isPointerInTransitRef:c,onPointerInTransitChange:s.useCallback(d=>{c.current=d},[]),disableHoverableContent:r,children:a})};Gn.displayName=Hn;var Ie="Tooltip",[Gs,Oe]=Ve(Ie),Kn=e=>{const{__scopeTooltip:n,children:t,open:o,defaultOpen:r,onOpenChange:a,disableHoverableContent:i,delayDuration:c}=e,u=At(Ie,e.__scopeTooltip),d=ze(n),[f,p]=s.useState(null),g=oe(),h=s.useRef(0),w=i??u.disableHoverableContent,v=c??u.delayDuration,m=s.useRef(!1),[C,x]=he({prop:o,defaultProp:r??!1,onChange:P=>{P?(u.onOpen(),document.dispatchEvent(new CustomEvent(lt))):u.onClose(),a?.(P)},caller:Ie}),y=s.useMemo(()=>C?m.current?"delayed-open":"instant-open":"closed",[C]),b=s.useCallback(()=>{window.clearTimeout(h.current),h.current=0,m.current=!1,x(!0)},[x]),I=s.useCallback(()=>{window.clearTimeout(h.current),h.current=0,x(!1)},[x]),O=s.useCallback(()=>{window.clearTimeout(h.current),h.current=window.setTimeout(()=>{m.current=!0,x(!0),h.current=0},v)},[v,x]);return s.useEffect(()=>()=>{h.current&&(window.clearTimeout(h.current),h.current=0)},[]),l.jsx(_t,{...d,children:l.jsx(Gs,{scope:n,contentId:g,open:C,stateAttribute:y,trigger:f,onTriggerChange:p,onTriggerEnter:s.useCallback(()=>{u.isOpenDelayedRef.current?O():b()},[u.isOpenDelayedRef,O,b]),onTriggerLeave:s.useCallback(()=>{w?I():(window.clearTimeout(h.current),h.current=0)},[I,w]),onOpen:b,onClose:I,disableHoverableContent:w,children:t})})};Kn.displayName=Ie;var ut="TooltipTrigger",Wn=s.forwardRef((e,n)=>{const{__scopeTooltip:t,...o}=e,r=Oe(ut,t),a=At(ut,t),i=ze(t),c=s.useRef(null),u=M(n,c,r.onTriggerChange),d=s.useRef(!1),f=s.useRef(!1),p=s.useCallback(()=>d.current=!1,[]);return s.useEffect(()=>()=>document.removeEventListener("pointerup",p),[p]),l.jsx(Tt,{asChild:!0,...i,children:l.jsx(_.button,{"aria-describedby":r.open?r.contentId:void 0,"data-state":r.stateAttribute,...o,ref:u,onPointerMove:E(e.onPointerMove,g=>{g.pointerType!=="touch"&&!f.current&&!a.isPointerInTransitRef.current&&(r.onTriggerEnter(),f.current=!0)}),onPointerLeave:E(e.onPointerLeave,()=>{r.onTriggerLeave(),f.current=!1}),onPointerDown:E(e.onPointerDown,()=>{r.open&&r.onClose(),d.current=!0,document.addEventListener("pointerup",p,{once:!0})}),onFocus:E(e.onFocus,()=>{d.current||r.onOpen()}),onBlur:E(e.onBlur,r.onClose),onClick:E(e.onClick,r.onClose)})})});Wn.displayName=ut;var Dt="TooltipPortal",[Ks,Ws]=Ve(Dt,{forceMount:void 0}),Vn=e=>{const{__scopeTooltip:n,forceMount:t,children:o,container:r}=e,a=Oe(Dt,n);return l.jsx(Ks,{scope:n,forceMount:t,children:l.jsx(re,{present:t||a.open,children:l.jsx(Ne,{asChild:!0,container:r,children:o})})})};Vn.displayName=Dt;var be="TooltipContent",zn=s.forwardRef((e,n)=>{const t=Ws(be,e.__scopeTooltip),{forceMount:o=t.forceMount,side:r="top",...a}=e,i=Oe(be,e.__scopeTooltip);return l.jsx(re,{present:o||i.open,children:i.disableHoverableContent?l.jsx(Yn,{side:r,...a,ref:n}):l.jsx(Vs,{side:r,...a,ref:n})})}),Vs=s.forwardRef((e,n)=>{const t=Oe(be,e.__scopeTooltip),o=At(be,e.__scopeTooltip),r=s.useRef(null),a=M(n,r),[i,c]=s.useState(null),{trigger:u,onClose:d}=t,f=r.current,{onPointerInTransitChange:p}=o,g=s.useCallback(()=>{c(null),p(!1)},[p]),h=s.useCallback((w,v)=>{const m=w.currentTarget,C={x:w.clientX,y:w.clientY},x=qs(C,m.getBoundingClientRect()),y=Zs(C,x),b=Js(v.getBoundingClientRect()),I=ea([...y,...b]);c(I),p(!0)},[p]);return s.useEffect(()=>()=>g(),[g]),s.useEffect(()=>{if(u&&f){const w=m=>h(m,f),v=m=>h(m,u);return u.addEventListener("pointerleave",w),f.addEventListener("pointerleave",v),()=>{u.removeEventListener("pointerleave",w),f.removeEventListener("pointerleave",v)}}},[u,f,h,g]),s.useEffect(()=>{if(i){const w=v=>{const m=v.target,C={x:v.clientX,y:v.clientY},x=u?.contains(m)||f?.contains(m),y=!Qs(C,i);x?g():y&&(g(),d())};return document.addEventListener("pointermove",w),()=>document.removeEventListener("pointermove",w)}},[u,f,i,d,g]),l.jsx(Yn,{...e,ref:a})}),[zs,Ys]=Ve(Ie,{isInside:!1}),Xs=sn("TooltipContent"),Yn=s.forwardRef((e,n)=>{const{__scopeTooltip:t,children:o,"aria-label":r,onEscapeKeyDown:a,onPointerDownOutside:i,...c}=e,u=Oe(be,t),d=ze(t),{onClose:f}=u;return s.useEffect(()=>(document.addEventListener(lt,f),()=>document.removeEventListener(lt,f)),[f]),s.useEffect(()=>{if(u.trigger){const p=g=>{g.target?.contains(u.trigger)&&f()};return window.addEventListener("scroll",p,{capture:!0}),()=>window.removeEventListener("scroll",p,{capture:!0})}},[u.trigger,f]),l.jsx(De,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:a,onPointerDownOutside:i,onFocusOutside:p=>p.preventDefault(),onDismiss:f,children:l.jsxs(It,{"data-state":u.stateAttribute,...d,...c,ref:n,style:{...c.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[l.jsx(Xs,{children:o}),l.jsx(zs,{scope:t,isInside:!0,children:l.jsx(Bs,{id:u.contentId,role:"tooltip",children:r||o})})]})})});zn.displayName=be;var Xn="TooltipArrow",qn=s.forwardRef((e,n)=>{const{__scopeTooltip:t,...o}=e,r=ze(t);return Ys(Xn,t).isInside?null:l.jsx(Mt,{...r,...o,ref:n})});qn.displayName=Xn;function qs(e,n){const t=Math.abs(n.top-e.y),o=Math.abs(n.bottom-e.y),r=Math.abs(n.right-e.x),a=Math.abs(n.left-e.x);switch(Math.min(t,o,r,a)){case a:return"left";case r:return"right";case t:return"top";case o:return"bottom";default:throw new Error("unreachable")}}function Zs(e,n,t=5){const o=[];switch(n){case"top":o.push({x:e.x-t,y:e.y+t},{x:e.x+t,y:e.y+t});break;case"bottom":o.push({x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t});break;case"left":o.push({x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t});break;case"right":o.push({x:e.x-t,y:e.y-t},{x:e.x-t,y:e.y+t});break}return o}function Js(e){const{top:n,right:t,bottom:o,left:r}=e;return[{x:r,y:n},{x:t,y:n},{x:t,y:o},{x:r,y:o}]}function Qs(e,n){const{x:t,y:o}=e;let r=!1;for(let a=0,i=n.length-1;ao!=g>o&&t<(p-d)*(o-f)/(g-f)+d&&(r=!r)}return r}function ea(e){const n=e.slice();return n.sort((t,o)=>t.xo.x?1:t.yo.y?1:0),ta(n)}function ta(e){if(e.length<=1)return e.slice();const n=[];for(let o=0;o=2;){const a=n[n.length-1],i=n[n.length-2];if((a.x-i.x)*(r.y-i.y)>=(a.y-i.y)*(r.x-i.x))n.pop();else break}n.push(r)}n.pop();const t=[];for(let o=e.length-1;o>=0;o--){const r=e[o];for(;t.length>=2;){const a=t[t.length-1],i=t[t.length-2];if((a.x-i.x)*(r.y-i.y)>=(a.y-i.y)*(r.x-i.x))t.pop();else break}t.push(r)}return t.pop(),n.length===1&&t.length===1&&n[0].x===t[0].x&&n[0].y===t[0].y?n:n.concat(t)}var hc=Gn,xc=Kn,wc=Wn,Cc=Vn,yc=zn,Ec=qn,Ye="Collapsible",[na,Sc]=ie(Ye),[oa,Nt]=na(Ye),Zn=s.forwardRef((e,n)=>{const{__scopeCollapsible:t,open:o,defaultOpen:r,disabled:a,onOpenChange:i,...c}=e,[u,d]=he({prop:o,defaultProp:r??!1,onChange:i,caller:Ye});return l.jsx(oa,{scope:t,disabled:a,contentId:oe(),open:u,onOpenToggle:s.useCallback(()=>d(f=>!f),[d]),children:l.jsx(_.div,{"data-state":jt(u),"data-disabled":a?"":void 0,...c,ref:n})})});Zn.displayName=Ye;var Jn="CollapsibleTrigger",ra=s.forwardRef((e,n)=>{const{__scopeCollapsible:t,...o}=e,r=Nt(Jn,t);return l.jsx(_.button,{type:"button","aria-controls":r.contentId,"aria-expanded":r.open||!1,"data-state":jt(r.open),"data-disabled":r.disabled?"":void 0,disabled:r.disabled,...o,ref:n,onClick:E(e.onClick,r.onOpenToggle)})});ra.displayName=Jn;var Ot="CollapsibleContent",sa=s.forwardRef((e,n)=>{const{forceMount:t,...o}=e,r=Nt(Ot,e.__scopeCollapsible);return l.jsx(re,{present:t||r.open,children:({present:a})=>l.jsx(aa,{...o,ref:n,present:a})})});sa.displayName=Ot;var aa=s.forwardRef((e,n)=>{const{__scopeCollapsible:t,present:o,children:r,...a}=e,i=Nt(Ot,t),[c,u]=s.useState(o),d=s.useRef(null),f=M(n,d),p=s.useRef(0),g=p.current,h=s.useRef(0),w=h.current,v=i.open||c,m=s.useRef(v),C=s.useRef(void 0);return s.useEffect(()=>{const x=requestAnimationFrame(()=>m.current=!1);return()=>cancelAnimationFrame(x)},[]),K(()=>{const x=d.current;if(x){C.current=C.current||{transitionDuration:x.style.transitionDuration,animationName:x.style.animationName},x.style.transitionDuration="0s",x.style.animationName="none";const y=x.getBoundingClientRect();p.current=y.height,h.current=y.width,m.current||(x.style.transitionDuration=C.current.transitionDuration,x.style.animationName=C.current.animationName),u(o)}},[i.open,o]),l.jsx(_.div,{"data-state":jt(i.open),"data-disabled":i.disabled?"":void 0,id:i.contentId,hidden:!v,...a,ref:f,style:{"--radix-collapsible-content-height":g?`${g}px`:void 0,"--radix-collapsible-content-width":w?`${w}px`:void 0,...e.style},children:v&&r})});function jt(e){return e?"open":"closed"}var bc=Zn;function Lt(e){const n=e+"CollectionProvider",[t,o]=ie(n),[r,a]=t(n,{collectionRef:{current:null},itemMap:new Map}),i=v=>{const{scope:m,children:C}=v,x=me.useRef(null),y=me.useRef(new Map).current;return l.jsx(r,{scope:m,itemMap:y,collectionRef:x,children:C})};i.displayName=n;const c=e+"CollectionSlot",u=ge(c),d=me.forwardRef((v,m)=>{const{scope:C,children:x}=v,y=a(c,C),b=M(m,y.collectionRef);return l.jsx(u,{ref:b,children:x})});d.displayName=c;const f=e+"CollectionItemSlot",p="data-radix-collection-item",g=ge(f),h=me.forwardRef((v,m)=>{const{scope:C,children:x,...y}=v,b=me.useRef(null),I=M(m,b),O=a(f,C);return me.useEffect(()=>(O.itemMap.set(b,{ref:b,...y}),()=>void O.itemMap.delete(b))),l.jsx(g,{[p]:"",ref:I,children:x})});h.displayName=f;function w(v){const m=a(e+"CollectionConsumer",v);return me.useCallback(()=>{const x=m.collectionRef.current;if(!x)return[];const y=Array.from(x.querySelectorAll(`[${p}]`));return Array.from(m.itemMap.values()).sort((O,P)=>y.indexOf(O.ref.current)-y.indexOf(P.ref.current))},[m.collectionRef,m.itemMap])}return[{Provider:i,Slot:d,ItemSlot:h},w,o]}var ia=s.createContext(void 0);function Ft(e){const n=s.useContext(ia);return e||n||"ltr"}var it="rovingFocusGroup.onEntryFocus",ca={bubbles:!1,cancelable:!0},je="RovingFocusGroup",[dt,Qn,la]=Lt(je),[ua,eo]=ie(je,[la]),[da,fa]=ua(je),to=s.forwardRef((e,n)=>l.jsx(dt.Provider,{scope:e.__scopeRovingFocusGroup,children:l.jsx(dt.Slot,{scope:e.__scopeRovingFocusGroup,children:l.jsx(pa,{...e,ref:n})})}));to.displayName=je;var pa=s.forwardRef((e,n)=>{const{__scopeRovingFocusGroup:t,orientation:o,loop:r=!1,dir:a,currentTabStopId:i,defaultCurrentTabStopId:c,onCurrentTabStopIdChange:u,onEntryFocus:d,preventScrollOnEntryFocus:f=!1,...p}=e,g=s.useRef(null),h=M(n,g),w=Ft(a),[v,m]=he({prop:i,defaultProp:c??null,onChange:u,caller:je}),[C,x]=s.useState(!1),y=ae(d),b=Qn(t),I=s.useRef(!1),[O,P]=s.useState(0);return s.useEffect(()=>{const T=g.current;if(T)return T.addEventListener(it,y),()=>T.removeEventListener(it,y)},[y]),l.jsx(da,{scope:t,orientation:o,dir:w,loop:r,currentTabStopId:v,onItemFocus:s.useCallback(T=>m(T),[m]),onItemShiftTab:s.useCallback(()=>x(!0),[]),onFocusableItemAdd:s.useCallback(()=>P(T=>T+1),[]),onFocusableItemRemove:s.useCallback(()=>P(T=>T-1),[]),children:l.jsx(_.div,{tabIndex:C||O===0?-1:0,"data-orientation":o,...p,ref:h,style:{outline:"none",...e.style},onMouseDown:E(e.onMouseDown,()=>{I.current=!0}),onFocus:E(e.onFocus,T=>{const k=!I.current;if(T.target===T.currentTarget&&k&&!C){const F=new CustomEvent(it,ca);if(T.currentTarget.dispatchEvent(F),!F.defaultPrevented){const B=b().filter(A=>A.focusable),H=B.find(A=>A.active),U=B.find(A=>A.id===v),V=[H,U,...B].filter(Boolean).map(A=>A.ref.current);ro(V,f)}}I.current=!1}),onBlur:E(e.onBlur,()=>x(!1))})})}),no="RovingFocusGroupItem",oo=s.forwardRef((e,n)=>{const{__scopeRovingFocusGroup:t,focusable:o=!0,active:r=!1,tabStopId:a,children:i,...c}=e,u=oe(),d=a||u,f=fa(no,t),p=f.currentTabStopId===d,g=Qn(t),{onFocusableItemAdd:h,onFocusableItemRemove:w,currentTabStopId:v}=f;return s.useEffect(()=>{if(o)return h(),()=>w()},[o,h,w]),l.jsx(dt.ItemSlot,{scope:t,id:d,focusable:o,active:r,children:l.jsx(_.span,{tabIndex:p?0:-1,"data-orientation":f.orientation,...c,ref:n,onMouseDown:E(e.onMouseDown,m=>{o?f.onItemFocus(d):m.preventDefault()}),onFocus:E(e.onFocus,()=>f.onItemFocus(d)),onKeyDown:E(e.onKeyDown,m=>{if(m.key==="Tab"&&m.shiftKey){f.onItemShiftTab();return}if(m.target!==m.currentTarget)return;const C=ga(m,f.orientation,f.dir);if(C!==void 0){if(m.metaKey||m.ctrlKey||m.altKey||m.shiftKey)return;m.preventDefault();let y=g().filter(b=>b.focusable).map(b=>b.ref.current);if(C==="last")y.reverse();else if(C==="prev"||C==="next"){C==="prev"&&y.reverse();const b=y.indexOf(m.currentTarget);y=f.loop?ha(y,b+1):y.slice(b+1)}setTimeout(()=>ro(y))}}),children:typeof i=="function"?i({isCurrentTabStop:p,hasTabStop:v!=null}):i})})});oo.displayName=no;var va={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function ma(e,n){return n!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function ga(e,n,t){const o=ma(e.key,t);if(!(n==="vertical"&&["ArrowLeft","ArrowRight"].includes(o))&&!(n==="horizontal"&&["ArrowUp","ArrowDown"].includes(o)))return va[o]}function ro(e,n=!1){const t=document.activeElement;for(const o of e)if(o===t||(o.focus({preventScroll:n}),document.activeElement!==t))return}function ha(e,n){return e.map((t,o)=>e[(n+o)%e.length])}var xa=to,wa=oo,ft=["Enter"," "],Ca=["ArrowDown","PageUp","Home"],so=["ArrowUp","PageDown","End"],ya=[...Ca,...so],Ea={ltr:[...ft,"ArrowRight"],rtl:[...ft,"ArrowLeft"]},Sa={ltr:["ArrowLeft"],rtl:["ArrowRight"]},Le="Menu",[Me,ba,Ra]=Lt(Le),[ye,ao]=ie(Le,[Ra,Re,eo]),Xe=Re(),io=eo(),[Pa,Ee]=ye(Le),[_a,Fe]=ye(Le),co=e=>{const{__scopeMenu:n,open:t=!1,children:o,dir:r,onOpenChange:a,modal:i=!0}=e,c=Xe(n),[u,d]=s.useState(null),f=s.useRef(!1),p=ae(a),g=Ft(r);return s.useEffect(()=>{const h=()=>{f.current=!0,document.addEventListener("pointerdown",w,{capture:!0,once:!0}),document.addEventListener("pointermove",w,{capture:!0,once:!0})},w=()=>f.current=!1;return document.addEventListener("keydown",h,{capture:!0}),()=>{document.removeEventListener("keydown",h,{capture:!0}),document.removeEventListener("pointerdown",w,{capture:!0}),document.removeEventListener("pointermove",w,{capture:!0})}},[]),l.jsx(_t,{...c,children:l.jsx(Pa,{scope:n,open:t,onOpenChange:p,content:u,onContentChange:d,children:l.jsx(_a,{scope:n,onClose:s.useCallback(()=>p(!1),[p]),isUsingKeyboardRef:f,dir:g,modal:i,children:o})})})};co.displayName=Le;var Ta="MenuAnchor",kt=s.forwardRef((e,n)=>{const{__scopeMenu:t,...o}=e,r=Xe(t);return l.jsx(Tt,{...r,...o,ref:n})});kt.displayName=Ta;var $t="MenuPortal",[Ia,lo]=ye($t,{forceMount:void 0}),uo=e=>{const{__scopeMenu:n,forceMount:t,children:o,container:r}=e,a=Ee($t,n);return l.jsx(Ia,{scope:n,forceMount:t,children:l.jsx(re,{present:t||a.open,children:l.jsx(Ne,{asChild:!0,container:r,children:o})})})};uo.displayName=$t;var ee="MenuContent",[Ma,Bt]=ye(ee),fo=s.forwardRef((e,n)=>{const t=lo(ee,e.__scopeMenu),{forceMount:o=t.forceMount,...r}=e,a=Ee(ee,e.__scopeMenu),i=Fe(ee,e.__scopeMenu);return l.jsx(Me.Provider,{scope:e.__scopeMenu,children:l.jsx(re,{present:o||a.open,children:l.jsx(Me.Slot,{scope:e.__scopeMenu,children:i.modal?l.jsx(Aa,{...r,ref:n}):l.jsx(Da,{...r,ref:n})})})})}),Aa=s.forwardRef((e,n)=>{const t=Ee(ee,e.__scopeMenu),o=s.useRef(null),r=M(n,o);return s.useEffect(()=>{const a=o.current;if(a)return wt(a)},[]),l.jsx(Ut,{...e,ref:r,trapFocus:t.open,disableOutsidePointerEvents:t.open,disableOutsideScroll:!0,onFocusOutside:E(e.onFocusOutside,a=>a.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>t.onOpenChange(!1)})}),Da=s.forwardRef((e,n)=>{const t=Ee(ee,e.__scopeMenu);return l.jsx(Ut,{...e,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>t.onOpenChange(!1)})}),Na=ge("MenuContent.ScrollLock"),Ut=s.forwardRef((e,n)=>{const{__scopeMenu:t,loop:o=!1,trapFocus:r,onOpenAutoFocus:a,onCloseAutoFocus:i,disableOutsidePointerEvents:c,onEntryFocus:u,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:p,onInteractOutside:g,onDismiss:h,disableOutsideScroll:w,...v}=e,m=Ee(ee,t),C=Fe(ee,t),x=Xe(t),y=io(t),b=ba(t),[I,O]=s.useState(null),P=s.useRef(null),T=M(n,P,m.onContentChange),k=s.useRef(0),F=s.useRef(""),B=s.useRef(0),H=s.useRef(null),U=s.useRef("right"),W=s.useRef(0),V=w?Ct:s.Fragment,A=w?{as:Na,allowPinchZoom:!0}:void 0,G=R=>{const Z=F.current+R,z=b().filter(S=>!S.disabled),te=document.activeElement,ce=z.find(S=>S.ref.current===te)?.textValue,J=z.map(S=>S.textValue),le=Wa(J,Z,ce),q=z.find(S=>S.textValue===le)?.ref.current;(function S(D){F.current=D,window.clearTimeout(k.current),D!==""&&(k.current=window.setTimeout(()=>S(""),1e3))})(Z),q&&setTimeout(()=>q.focus())};s.useEffect(()=>()=>window.clearTimeout(k.current),[]),yt();const L=s.useCallback(R=>U.current===H.current?.side&&za(R,H.current?.area),[]);return l.jsx(Ma,{scope:t,searchRef:F,onItemEnter:s.useCallback(R=>{L(R)&&R.preventDefault()},[L]),onItemLeave:s.useCallback(R=>{L(R)||(P.current?.focus(),O(null))},[L]),onTriggerLeave:s.useCallback(R=>{L(R)&&R.preventDefault()},[L]),pointerGraceTimerRef:B,onPointerGraceIntentChange:s.useCallback(R=>{H.current=R},[]),children:l.jsx(V,{...A,children:l.jsx(Ke,{asChild:!0,trapped:r,onMountAutoFocus:E(a,R=>{R.preventDefault(),P.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:i,children:l.jsx(De,{asChild:!0,disableOutsidePointerEvents:c,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:p,onInteractOutside:g,onDismiss:h,children:l.jsx(xa,{asChild:!0,...y,dir:C.dir,orientation:"vertical",loop:o,currentTabStopId:I,onCurrentTabStopIdChange:O,onEntryFocus:E(u,R=>{C.isUsingKeyboardRef.current||R.preventDefault()}),preventScrollOnEntryFocus:!0,children:l.jsx(It,{role:"menu","aria-orientation":"vertical","data-state":To(m.open),"data-radix-menu-content":"",dir:C.dir,...x,...v,ref:T,style:{outline:"none",...v.style},onKeyDown:E(v.onKeyDown,R=>{const z=R.target.closest("[data-radix-menu-content]")===R.currentTarget,te=R.ctrlKey||R.altKey||R.metaKey,ce=R.key.length===1;z&&(R.key==="Tab"&&R.preventDefault(),!te&&ce&&G(R.key));const J=P.current;if(R.target!==J||!ya.includes(R.key))return;R.preventDefault();const q=b().filter(S=>!S.disabled).map(S=>S.ref.current);so.includes(R.key)&&q.reverse(),Ga(q)}),onBlur:E(e.onBlur,R=>{R.currentTarget.contains(R.target)||(window.clearTimeout(k.current),F.current="")}),onPointerMove:E(e.onPointerMove,Ae(R=>{const Z=R.target,z=W.current!==R.clientX;if(R.currentTarget.contains(Z)&&z){const te=R.clientX>W.current?"right":"left";U.current=te,W.current=R.clientX}}))})})})})})})});fo.displayName=ee;var Oa="MenuGroup",Ht=s.forwardRef((e,n)=>{const{__scopeMenu:t,...o}=e;return l.jsx(_.div,{role:"group",...o,ref:n})});Ht.displayName=Oa;var ja="MenuLabel",po=s.forwardRef((e,n)=>{const{__scopeMenu:t,...o}=e;return l.jsx(_.div,{...o,ref:n})});po.displayName=ja;var Be="MenuItem",tn="menu.itemSelect",qe=s.forwardRef((e,n)=>{const{disabled:t=!1,onSelect:o,...r}=e,a=s.useRef(null),i=Fe(Be,e.__scopeMenu),c=Bt(Be,e.__scopeMenu),u=M(n,a),d=s.useRef(!1),f=()=>{const p=a.current;if(!t&&p){const g=new CustomEvent(tn,{bubbles:!0,cancelable:!0});p.addEventListener(tn,h=>o?.(h),{once:!0}),an(p,g),g.defaultPrevented?d.current=!1:i.onClose()}};return l.jsx(vo,{...r,ref:u,disabled:t,onClick:E(e.onClick,f),onPointerDown:p=>{e.onPointerDown?.(p),d.current=!0},onPointerUp:E(e.onPointerUp,p=>{d.current||p.currentTarget?.click()}),onKeyDown:E(e.onKeyDown,p=>{const g=c.searchRef.current!=="";t||g&&p.key===" "||ft.includes(p.key)&&(p.currentTarget.click(),p.preventDefault())})})});qe.displayName=Be;var vo=s.forwardRef((e,n)=>{const{__scopeMenu:t,disabled:o=!1,textValue:r,...a}=e,i=Bt(Be,t),c=io(t),u=s.useRef(null),d=M(n,u),[f,p]=s.useState(!1),[g,h]=s.useState("");return s.useEffect(()=>{const w=u.current;w&&h((w.textContent??"").trim())},[a.children]),l.jsx(Me.ItemSlot,{scope:t,disabled:o,textValue:r??g,children:l.jsx(wa,{asChild:!0,...c,focusable:!o,children:l.jsx(_.div,{role:"menuitem","data-highlighted":f?"":void 0,"aria-disabled":o||void 0,"data-disabled":o?"":void 0,...a,ref:d,onPointerMove:E(e.onPointerMove,Ae(w=>{o?i.onItemLeave(w):(i.onItemEnter(w),w.defaultPrevented||w.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:E(e.onPointerLeave,Ae(w=>i.onItemLeave(w))),onFocus:E(e.onFocus,()=>p(!0)),onBlur:E(e.onBlur,()=>p(!1))})})})}),La="MenuCheckboxItem",mo=s.forwardRef((e,n)=>{const{checked:t=!1,onCheckedChange:o,...r}=e;return l.jsx(Co,{scope:e.__scopeMenu,checked:t,children:l.jsx(qe,{role:"menuitemcheckbox","aria-checked":Ue(t)?"mixed":t,...r,ref:n,"data-state":Kt(t),onSelect:E(r.onSelect,()=>o?.(Ue(t)?!0:!t),{checkForDefaultPrevented:!1})})})});mo.displayName=La;var go="MenuRadioGroup",[Fa,ka]=ye(go,{value:void 0,onValueChange:()=>{}}),ho=s.forwardRef((e,n)=>{const{value:t,onValueChange:o,...r}=e,a=ae(o);return l.jsx(Fa,{scope:e.__scopeMenu,value:t,onValueChange:a,children:l.jsx(Ht,{...r,ref:n})})});ho.displayName=go;var xo="MenuRadioItem",wo=s.forwardRef((e,n)=>{const{value:t,...o}=e,r=ka(xo,e.__scopeMenu),a=t===r.value;return l.jsx(Co,{scope:e.__scopeMenu,checked:a,children:l.jsx(qe,{role:"menuitemradio","aria-checked":a,...o,ref:n,"data-state":Kt(a),onSelect:E(o.onSelect,()=>r.onValueChange?.(t),{checkForDefaultPrevented:!1})})})});wo.displayName=xo;var Gt="MenuItemIndicator",[Co,$a]=ye(Gt,{checked:!1}),yo=s.forwardRef((e,n)=>{const{__scopeMenu:t,forceMount:o,...r}=e,a=$a(Gt,t);return l.jsx(re,{present:o||Ue(a.checked)||a.checked===!0,children:l.jsx(_.span,{...r,ref:n,"data-state":Kt(a.checked)})})});yo.displayName=Gt;var Ba="MenuSeparator",Eo=s.forwardRef((e,n)=>{const{__scopeMenu:t,...o}=e;return l.jsx(_.div,{role:"separator","aria-orientation":"horizontal",...o,ref:n})});Eo.displayName=Ba;var Ua="MenuArrow",So=s.forwardRef((e,n)=>{const{__scopeMenu:t,...o}=e,r=Xe(t);return l.jsx(Mt,{...r,...o,ref:n})});So.displayName=Ua;var Ha="MenuSub",[Rc,bo]=ye(Ha),_e="MenuSubTrigger",Ro=s.forwardRef((e,n)=>{const t=Ee(_e,e.__scopeMenu),o=Fe(_e,e.__scopeMenu),r=bo(_e,e.__scopeMenu),a=Bt(_e,e.__scopeMenu),i=s.useRef(null),{pointerGraceTimerRef:c,onPointerGraceIntentChange:u}=a,d={__scopeMenu:e.__scopeMenu},f=s.useCallback(()=>{i.current&&window.clearTimeout(i.current),i.current=null},[]);return s.useEffect(()=>f,[f]),s.useEffect(()=>{const p=c.current;return()=>{window.clearTimeout(p),u(null)}},[c,u]),l.jsx(kt,{asChild:!0,...d,children:l.jsx(vo,{id:r.triggerId,"aria-haspopup":"menu","aria-expanded":t.open,"aria-controls":r.contentId,"data-state":To(t.open),...e,ref:Ge(n,r.onTriggerChange),onClick:p=>{e.onClick?.(p),!(e.disabled||p.defaultPrevented)&&(p.currentTarget.focus(),t.open||t.onOpenChange(!0))},onPointerMove:E(e.onPointerMove,Ae(p=>{a.onItemEnter(p),!p.defaultPrevented&&!e.disabled&&!t.open&&!i.current&&(a.onPointerGraceIntentChange(null),i.current=window.setTimeout(()=>{t.onOpenChange(!0),f()},100))})),onPointerLeave:E(e.onPointerLeave,Ae(p=>{f();const g=t.content?.getBoundingClientRect();if(g){const h=t.content?.dataset.side,w=h==="right",v=w?-5:5,m=g[w?"left":"right"],C=g[w?"right":"left"];a.onPointerGraceIntentChange({area:[{x:p.clientX+v,y:p.clientY},{x:m,y:g.top},{x:C,y:g.top},{x:C,y:g.bottom},{x:m,y:g.bottom}],side:h}),window.clearTimeout(c.current),c.current=window.setTimeout(()=>a.onPointerGraceIntentChange(null),300)}else{if(a.onTriggerLeave(p),p.defaultPrevented)return;a.onPointerGraceIntentChange(null)}})),onKeyDown:E(e.onKeyDown,p=>{const g=a.searchRef.current!=="";e.disabled||g&&p.key===" "||Ea[o.dir].includes(p.key)&&(t.onOpenChange(!0),t.content?.focus(),p.preventDefault())})})})});Ro.displayName=_e;var Po="MenuSubContent",_o=s.forwardRef((e,n)=>{const t=lo(ee,e.__scopeMenu),{forceMount:o=t.forceMount,...r}=e,a=Ee(ee,e.__scopeMenu),i=Fe(ee,e.__scopeMenu),c=bo(Po,e.__scopeMenu),u=s.useRef(null),d=M(n,u);return l.jsx(Me.Provider,{scope:e.__scopeMenu,children:l.jsx(re,{present:o||a.open,children:l.jsx(Me.Slot,{scope:e.__scopeMenu,children:l.jsx(Ut,{id:c.contentId,"aria-labelledby":c.triggerId,...r,ref:d,align:"start",side:i.dir==="rtl"?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:f=>{i.isUsingKeyboardRef.current&&u.current?.focus(),f.preventDefault()},onCloseAutoFocus:f=>f.preventDefault(),onFocusOutside:E(e.onFocusOutside,f=>{f.target!==c.trigger&&a.onOpenChange(!1)}),onEscapeKeyDown:E(e.onEscapeKeyDown,f=>{i.onClose(),f.preventDefault()}),onKeyDown:E(e.onKeyDown,f=>{const p=f.currentTarget.contains(f.target),g=Sa[i.dir].includes(f.key);p&&g&&(a.onOpenChange(!1),c.trigger?.focus(),f.preventDefault())})})})})})});_o.displayName=Po;function To(e){return e?"open":"closed"}function Ue(e){return e==="indeterminate"}function Kt(e){return Ue(e)?"indeterminate":e?"checked":"unchecked"}function Ga(e){const n=document.activeElement;for(const t of e)if(t===n||(t.focus(),document.activeElement!==n))return}function Ka(e,n){return e.map((t,o)=>e[(n+o)%e.length])}function Wa(e,n,t){const r=n.length>1&&Array.from(n).every(d=>d===n[0])?n[0]:n,a=t?e.indexOf(t):-1;let i=Ka(e,Math.max(a,0));r.length===1&&(i=i.filter(d=>d!==t));const u=i.find(d=>d.toLowerCase().startsWith(r.toLowerCase()));return u!==t?u:void 0}function Va(e,n){const{x:t,y:o}=e;let r=!1;for(let a=0,i=n.length-1;ao!=g>o&&t<(p-d)*(o-f)/(g-f)+d&&(r=!r)}return r}function za(e,n){if(!n)return!1;const t={x:e.clientX,y:e.clientY};return Va(t,n)}function Ae(e){return n=>n.pointerType==="mouse"?e(n):void 0}var Ya=co,Xa=kt,qa=uo,Za=fo,Ja=Ht,Qa=po,ei=qe,ti=mo,ni=ho,oi=wo,ri=yo,si=Eo,ai=So,ii=Ro,ci=_o,Ze="DropdownMenu",[li,Pc]=ie(Ze,[ao]),X=ao(),[ui,Io]=li(Ze),Mo=e=>{const{__scopeDropdownMenu:n,children:t,dir:o,open:r,defaultOpen:a,onOpenChange:i,modal:c=!0}=e,u=X(n),d=s.useRef(null),[f,p]=he({prop:r,defaultProp:a??!1,onChange:i,caller:Ze});return l.jsx(ui,{scope:n,triggerId:oe(),triggerRef:d,contentId:oe(),open:f,onOpenChange:p,onOpenToggle:s.useCallback(()=>p(g=>!g),[p]),modal:c,children:l.jsx(Ya,{...u,open:f,onOpenChange:p,dir:o,modal:c,children:t})})};Mo.displayName=Ze;var Ao="DropdownMenuTrigger",Do=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,disabled:o=!1,...r}=e,a=Io(Ao,t),i=X(t);return l.jsx(Xa,{asChild:!0,...i,children:l.jsx(_.button,{type:"button",id:a.triggerId,"aria-haspopup":"menu","aria-expanded":a.open,"aria-controls":a.open?a.contentId:void 0,"data-state":a.open?"open":"closed","data-disabled":o?"":void 0,disabled:o,...r,ref:Ge(n,a.triggerRef),onPointerDown:E(e.onPointerDown,c=>{!o&&c.button===0&&c.ctrlKey===!1&&(a.onOpenToggle(),a.open||c.preventDefault())}),onKeyDown:E(e.onKeyDown,c=>{o||(["Enter"," "].includes(c.key)&&a.onOpenToggle(),c.key==="ArrowDown"&&a.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(c.key)&&c.preventDefault())})})})});Do.displayName=Ao;var di="DropdownMenuPortal",No=e=>{const{__scopeDropdownMenu:n,...t}=e,o=X(n);return l.jsx(qa,{...o,...t})};No.displayName=di;var Oo="DropdownMenuContent",jo=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=Io(Oo,t),a=X(t),i=s.useRef(!1);return l.jsx(Za,{id:r.contentId,"aria-labelledby":r.triggerId,...a,...o,ref:n,onCloseAutoFocus:E(e.onCloseAutoFocus,c=>{i.current||r.triggerRef.current?.focus(),i.current=!1,c.preventDefault()}),onInteractOutside:E(e.onInteractOutside,c=>{const u=c.detail.originalEvent,d=u.button===0&&u.ctrlKey===!0,f=u.button===2||d;(!r.modal||f)&&(i.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});jo.displayName=Oo;var fi="DropdownMenuGroup",pi=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(Ja,{...r,...o,ref:n})});pi.displayName=fi;var vi="DropdownMenuLabel",mi=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(Qa,{...r,...o,ref:n})});mi.displayName=vi;var gi="DropdownMenuItem",Lo=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(ei,{...r,...o,ref:n})});Lo.displayName=gi;var hi="DropdownMenuCheckboxItem",xi=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(ti,{...r,...o,ref:n})});xi.displayName=hi;var wi="DropdownMenuRadioGroup",Ci=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(ni,{...r,...o,ref:n})});Ci.displayName=wi;var yi="DropdownMenuRadioItem",Ei=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(oi,{...r,...o,ref:n})});Ei.displayName=yi;var Si="DropdownMenuItemIndicator",bi=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(ri,{...r,...o,ref:n})});bi.displayName=Si;var Ri="DropdownMenuSeparator",Pi=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(si,{...r,...o,ref:n})});Pi.displayName=Ri;var _i="DropdownMenuArrow",Ti=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(ai,{...r,...o,ref:n})});Ti.displayName=_i;var Ii="DropdownMenuSubTrigger",Mi=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(ii,{...r,...o,ref:n})});Mi.displayName=Ii;var Ai="DropdownMenuSubContent",Di=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(ci,{...r,...o,ref:n,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});Di.displayName=Ai;var _c=Mo,Tc=Do,Ic=No,Mc=jo,Ac=Lo,Fo="AlertDialog",[Ni,Dc]=ie(Fo,[pn]),ue=pn(),ko=e=>{const{__scopeAlertDialog:n,...t}=e,o=ue(n);return l.jsx(Ss,{...o,...t,modal:!0})};ko.displayName=Fo;var Oi="AlertDialogTrigger",$o=s.forwardRef((e,n)=>{const{__scopeAlertDialog:t,...o}=e,r=ue(t);return l.jsx(bs,{...r,...o,ref:n})});$o.displayName=Oi;var ji="AlertDialogPortal",Bo=e=>{const{__scopeAlertDialog:n,...t}=e,o=ue(n);return l.jsx(Rs,{...o,...t})};Bo.displayName=ji;var Li="AlertDialogOverlay",Uo=s.forwardRef((e,n)=>{const{__scopeAlertDialog:t,...o}=e,r=ue(t);return l.jsx(Ps,{...r,...o,ref:n})});Uo.displayName=Li;var Se="AlertDialogContent",[Fi,ki]=Ni(Se),$i=sn("AlertDialogContent"),Ho=s.forwardRef((e,n)=>{const{__scopeAlertDialog:t,children:o,...r}=e,a=ue(t),i=s.useRef(null),c=M(n,i),u=s.useRef(null);return l.jsx(ws,{contentName:Se,titleName:Go,docsSlug:"alert-dialog",children:l.jsx(Fi,{scope:t,cancelRef:u,children:l.jsxs(_s,{role:"alertdialog",...a,...r,ref:c,onOpenAutoFocus:E(r.onOpenAutoFocus,d=>{d.preventDefault(),u.current?.focus({preventScroll:!0})}),onPointerDownOutside:d=>d.preventDefault(),onInteractOutside:d=>d.preventDefault(),children:[l.jsx($i,{children:o}),l.jsx(Ui,{contentRef:i})]})})})});Ho.displayName=Se;var Go="AlertDialogTitle",Ko=s.forwardRef((e,n)=>{const{__scopeAlertDialog:t,...o}=e,r=ue(t);return l.jsx(Ts,{...r,...o,ref:n})});Ko.displayName=Go;var Wo="AlertDialogDescription",Vo=s.forwardRef((e,n)=>{const{__scopeAlertDialog:t,...o}=e,r=ue(t);return l.jsx(Is,{...r,...o,ref:n})});Vo.displayName=Wo;var Bi="AlertDialogAction",zo=s.forwardRef((e,n)=>{const{__scopeAlertDialog:t,...o}=e,r=ue(t);return l.jsx(In,{...r,...o,ref:n})});zo.displayName=Bi;var Yo="AlertDialogCancel",Xo=s.forwardRef((e,n)=>{const{__scopeAlertDialog:t,...o}=e,{cancelRef:r}=ki(Yo,t),a=ue(t),i=M(n,r);return l.jsx(In,{...a,...o,ref:i})});Xo.displayName=Yo;var Ui=({contentRef:e})=>{const n=`\`${Se}\` requires a description for the component to be accessible for screen reader users. - -You can add a description to the \`${Se}\` by passing a \`${Wo}\` component as a child, which also benefits sighted users by adding visible context to the dialog. - -Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${Se}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component. - -For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;return s.useEffect(()=>{document.getElementById(e.current?.getAttribute("aria-describedby"))||console.warn(n)},[n,e]),null},Nc=ko,Oc=$o,jc=Bo,Lc=Uo,Fc=Ho,kc=zo,$c=Xo,Bc=Ko,Uc=Vo,Hi="Label",qo=s.forwardRef((e,n)=>l.jsx(_.label,{...e,ref:n,onMouseDown:t=>{t.target.closest("button, input, select, textarea")||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));qo.displayName=Hi;var Hc=qo;function nn(e,[n,t]){return Math.min(t,Math.max(n,e))}function Gi(e){const n=s.useRef({value:e,previous:e});return s.useMemo(()=>(n.current.value!==e&&(n.current.previous=n.current.value,n.current.value=e),n.current.previous),[e])}var Ki=[" ","Enter","ArrowUp","ArrowDown"],Wi=[" ","Enter"],we="Select",[Je,Qe,Vi]=Lt(we),[Pe,Gc]=ie(we,[Vi,Re]),et=Re(),[zi,fe]=Pe(we),[Yi,Xi]=Pe(we),Zo=e=>{const{__scopeSelect:n,children:t,open:o,defaultOpen:r,onOpenChange:a,value:i,defaultValue:c,onValueChange:u,dir:d,name:f,autoComplete:p,disabled:g,required:h,form:w}=e,v=et(n),[m,C]=s.useState(null),[x,y]=s.useState(null),[b,I]=s.useState(!1),O=Ft(d),[P,T]=he({prop:o,defaultProp:r??!1,onChange:a,caller:we}),[k,F]=he({prop:i,defaultProp:c,onChange:u,caller:we}),B=s.useRef(null),H=m?w||!!m.closest("form"):!0,[U,W]=s.useState(new Set),V=Array.from(U).map(A=>A.props.value).join(";");return l.jsx(_t,{...v,children:l.jsxs(zi,{required:h,scope:n,trigger:m,onTriggerChange:C,valueNode:x,onValueNodeChange:y,valueNodeHasChildren:b,onValueNodeHasChildrenChange:I,contentId:oe(),value:k,onValueChange:F,open:P,onOpenChange:T,dir:O,triggerPointerDownPosRef:B,disabled:g,children:[l.jsx(Je.Provider,{scope:n,children:l.jsx(Yi,{scope:e.__scopeSelect,onNativeOptionAdd:s.useCallback(A=>{W(G=>new Set(G).add(A))},[]),onNativeOptionRemove:s.useCallback(A=>{W(G=>{const L=new Set(G);return L.delete(A),L})},[]),children:t})}),H?l.jsxs(wr,{"aria-hidden":!0,required:h,tabIndex:-1,name:f,autoComplete:p,value:k,onChange:A=>F(A.target.value),disabled:g,form:w,children:[k===void 0?l.jsx("option",{value:""}):null,Array.from(U)]},V):null]})})};Zo.displayName=we;var Jo="SelectTrigger",Qo=s.forwardRef((e,n)=>{const{__scopeSelect:t,disabled:o=!1,...r}=e,a=et(t),i=fe(Jo,t),c=i.disabled||o,u=M(n,i.onTriggerChange),d=Qe(t),f=s.useRef("touch"),[p,g,h]=yr(v=>{const m=d().filter(y=>!y.disabled),C=m.find(y=>y.value===i.value),x=Er(m,v,C);x!==void 0&&i.onValueChange(x.value)}),w=v=>{c||(i.onOpenChange(!0),h()),v&&(i.triggerPointerDownPosRef.current={x:Math.round(v.pageX),y:Math.round(v.pageY)})};return l.jsx(Tt,{asChild:!0,...a,children:l.jsx(_.button,{type:"button",role:"combobox","aria-controls":i.contentId,"aria-expanded":i.open,"aria-required":i.required,"aria-autocomplete":"none",dir:i.dir,"data-state":i.open?"open":"closed",disabled:c,"data-disabled":c?"":void 0,"data-placeholder":Cr(i.value)?"":void 0,...r,ref:u,onClick:E(r.onClick,v=>{v.currentTarget.focus(),f.current!=="mouse"&&w(v)}),onPointerDown:E(r.onPointerDown,v=>{f.current=v.pointerType;const m=v.target;m.hasPointerCapture(v.pointerId)&&m.releasePointerCapture(v.pointerId),v.button===0&&v.ctrlKey===!1&&v.pointerType==="mouse"&&(w(v),v.preventDefault())}),onKeyDown:E(r.onKeyDown,v=>{const m=p.current!=="";!(v.ctrlKey||v.altKey||v.metaKey)&&v.key.length===1&&g(v.key),!(m&&v.key===" ")&&Ki.includes(v.key)&&(w(),v.preventDefault())})})})});Qo.displayName=Jo;var er="SelectValue",tr=s.forwardRef((e,n)=>{const{__scopeSelect:t,className:o,style:r,children:a,placeholder:i="",...c}=e,u=fe(er,t),{onValueNodeHasChildrenChange:d}=u,f=a!==void 0,p=M(n,u.onValueNodeChange);return K(()=>{d(f)},[d,f]),l.jsx(_.span,{...c,ref:p,style:{pointerEvents:"none"},children:Cr(u.value)?l.jsx(l.Fragment,{children:i}):a})});tr.displayName=er;var qi="SelectIcon",nr=s.forwardRef((e,n)=>{const{__scopeSelect:t,children:o,...r}=e;return l.jsx(_.span,{"aria-hidden":!0,...r,ref:n,children:o||"▼"})});nr.displayName=qi;var Zi="SelectPortal",or=e=>l.jsx(Ne,{asChild:!0,...e});or.displayName=Zi;var Ce="SelectContent",rr=s.forwardRef((e,n)=>{const t=fe(Ce,e.__scopeSelect),[o,r]=s.useState();if(K(()=>{r(new DocumentFragment)},[]),!t.open){const a=o;return a?xt.createPortal(l.jsx(sr,{scope:e.__scopeSelect,children:l.jsx(Je.Slot,{scope:e.__scopeSelect,children:l.jsx("div",{children:e.children})})}),a):null}return l.jsx(ar,{...e,ref:n})});rr.displayName=Ce;var ne=10,[sr,pe]=Pe(Ce),Ji="SelectContentImpl",Qi=ge("SelectContent.RemoveScroll"),ar=s.forwardRef((e,n)=>{const{__scopeSelect:t,position:o="item-aligned",onCloseAutoFocus:r,onEscapeKeyDown:a,onPointerDownOutside:i,side:c,sideOffset:u,align:d,alignOffset:f,arrowPadding:p,collisionBoundary:g,collisionPadding:h,sticky:w,hideWhenDetached:v,avoidCollisions:m,...C}=e,x=fe(Ce,t),[y,b]=s.useState(null),[I,O]=s.useState(null),P=M(n,S=>b(S)),[T,k]=s.useState(null),[F,B]=s.useState(null),H=Qe(t),[U,W]=s.useState(!1),V=s.useRef(!1);s.useEffect(()=>{if(y)return wt(y)},[y]),yt();const A=s.useCallback(S=>{const[D,...Y]=H().map($=>$.ref.current),[N]=Y.slice(-1),j=document.activeElement;for(const $ of S)if($===j||($?.scrollIntoView({block:"nearest"}),$===D&&I&&(I.scrollTop=0),$===N&&I&&(I.scrollTop=I.scrollHeight),$?.focus(),document.activeElement!==j))return},[H,I]),G=s.useCallback(()=>A([T,y]),[A,T,y]);s.useEffect(()=>{U&&G()},[U,G]);const{onOpenChange:L,triggerPointerDownPosRef:R}=x;s.useEffect(()=>{if(y){let S={x:0,y:0};const D=N=>{S={x:Math.abs(Math.round(N.pageX)-(R.current?.x??0)),y:Math.abs(Math.round(N.pageY)-(R.current?.y??0))}},Y=N=>{S.x<=10&&S.y<=10?N.preventDefault():y.contains(N.target)||L(!1),document.removeEventListener("pointermove",D),R.current=null};return R.current!==null&&(document.addEventListener("pointermove",D),document.addEventListener("pointerup",Y,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",D),document.removeEventListener("pointerup",Y,{capture:!0})}}},[y,L,R]),s.useEffect(()=>{const S=()=>L(!1);return window.addEventListener("blur",S),window.addEventListener("resize",S),()=>{window.removeEventListener("blur",S),window.removeEventListener("resize",S)}},[L]);const[Z,z]=yr(S=>{const D=H().filter(j=>!j.disabled),Y=D.find(j=>j.ref.current===document.activeElement),N=Er(D,S,Y);N&&setTimeout(()=>N.ref.current.focus())}),te=s.useCallback((S,D,Y)=>{const N=!V.current&&!Y;(x.value!==void 0&&x.value===D||N)&&(k(S),N&&(V.current=!0))},[x.value]),ce=s.useCallback(()=>y?.focus(),[y]),J=s.useCallback((S,D,Y)=>{const N=!V.current&&!Y;(x.value!==void 0&&x.value===D||N)&&B(S)},[x.value]),le=o==="popper"?pt:ir,q=le===pt?{side:c,sideOffset:u,align:d,alignOffset:f,arrowPadding:p,collisionBoundary:g,collisionPadding:h,sticky:w,hideWhenDetached:v,avoidCollisions:m}:{};return l.jsx(sr,{scope:t,content:y,viewport:I,onViewportChange:O,itemRefCallback:te,selectedItem:T,onItemLeave:ce,itemTextRefCallback:J,focusSelectedItem:G,selectedItemText:F,position:o,isPositioned:U,searchRef:Z,children:l.jsx(Ct,{as:Qi,allowPinchZoom:!0,children:l.jsx(Ke,{asChild:!0,trapped:x.open,onMountAutoFocus:S=>{S.preventDefault()},onUnmountAutoFocus:E(r,S=>{x.trigger?.focus({preventScroll:!0}),S.preventDefault()}),children:l.jsx(De,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:a,onPointerDownOutside:i,onFocusOutside:S=>S.preventDefault(),onDismiss:()=>x.onOpenChange(!1),children:l.jsx(le,{role:"listbox",id:x.contentId,"data-state":x.open?"open":"closed",dir:x.dir,onContextMenu:S=>S.preventDefault(),...C,...q,onPlaced:()=>W(!0),ref:P,style:{display:"flex",flexDirection:"column",outline:"none",...C.style},onKeyDown:E(C.onKeyDown,S=>{const D=S.ctrlKey||S.altKey||S.metaKey;if(S.key==="Tab"&&S.preventDefault(),!D&&S.key.length===1&&z(S.key),["ArrowUp","ArrowDown","Home","End"].includes(S.key)){let N=H().filter(j=>!j.disabled).map(j=>j.ref.current);if(["ArrowUp","End"].includes(S.key)&&(N=N.slice().reverse()),["ArrowUp","ArrowDown"].includes(S.key)){const j=S.target,$=N.indexOf(j);N=N.slice($+1)}setTimeout(()=>A(N)),S.preventDefault()}})})})})})})});ar.displayName=Ji;var ec="SelectItemAlignedPosition",ir=s.forwardRef((e,n)=>{const{__scopeSelect:t,onPlaced:o,...r}=e,a=fe(Ce,t),i=pe(Ce,t),[c,u]=s.useState(null),[d,f]=s.useState(null),p=M(n,P=>f(P)),g=Qe(t),h=s.useRef(!1),w=s.useRef(!0),{viewport:v,selectedItem:m,selectedItemText:C,focusSelectedItem:x}=i,y=s.useCallback(()=>{if(a.trigger&&a.valueNode&&c&&d&&v&&m&&C){const P=a.trigger.getBoundingClientRect(),T=d.getBoundingClientRect(),k=a.valueNode.getBoundingClientRect(),F=C.getBoundingClientRect();if(a.dir!=="rtl"){const j=F.left-T.left,$=k.left-j,Q=P.left-$,ve=P.width+Q,tt=Math.max(ve,T.width),nt=window.innerWidth-ne,ot=nn($,[ne,Math.max(ne,nt-tt)]);c.style.minWidth=ve+"px",c.style.left=ot+"px"}else{const j=T.right-F.right,$=window.innerWidth-k.right-j,Q=window.innerWidth-P.right-$,ve=P.width+Q,tt=Math.max(ve,T.width),nt=window.innerWidth-ne,ot=nn($,[ne,Math.max(ne,nt-tt)]);c.style.minWidth=ve+"px",c.style.right=ot+"px"}const B=g(),H=window.innerHeight-ne*2,U=v.scrollHeight,W=window.getComputedStyle(d),V=parseInt(W.borderTopWidth,10),A=parseInt(W.paddingTop,10),G=parseInt(W.borderBottomWidth,10),L=parseInt(W.paddingBottom,10),R=V+A+U+L+G,Z=Math.min(m.offsetHeight*5,R),z=window.getComputedStyle(v),te=parseInt(z.paddingTop,10),ce=parseInt(z.paddingBottom,10),J=P.top+P.height/2-ne,le=H-J,q=m.offsetHeight/2,S=m.offsetTop+q,D=V+A+S,Y=R-D;if(D<=J){const j=B.length>0&&m===B[B.length-1].ref.current;c.style.bottom="0px";const $=d.clientHeight-v.offsetTop-v.offsetHeight,Q=Math.max(le,q+(j?ce:0)+$+G),ve=D+Q;c.style.height=ve+"px"}else{const j=B.length>0&&m===B[0].ref.current;c.style.top="0px";const Q=Math.max(J,V+v.offsetTop+(j?te:0)+q)+Y;c.style.height=Q+"px",v.scrollTop=D-J+v.offsetTop}c.style.margin=`${ne}px 0`,c.style.minHeight=Z+"px",c.style.maxHeight=H+"px",o?.(),requestAnimationFrame(()=>h.current=!0)}},[g,a.trigger,a.valueNode,c,d,v,m,C,a.dir,o]);K(()=>y(),[y]);const[b,I]=s.useState();K(()=>{d&&I(window.getComputedStyle(d).zIndex)},[d]);const O=s.useCallback(P=>{P&&w.current===!0&&(y(),x?.(),w.current=!1)},[y,x]);return l.jsx(nc,{scope:t,contentWrapper:c,shouldExpandOnScrollRef:h,onScrollButtonChange:O,children:l.jsx("div",{ref:u,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:b},children:l.jsx(_.div,{...r,ref:p,style:{boxSizing:"border-box",maxHeight:"100%",...r.style}})})})});ir.displayName=ec;var tc="SelectPopperPosition",pt=s.forwardRef((e,n)=>{const{__scopeSelect:t,align:o="start",collisionPadding:r=ne,...a}=e,i=et(t);return l.jsx(It,{...i,...a,ref:n,align:o,collisionPadding:r,style:{boxSizing:"border-box",...a.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});pt.displayName=tc;var[nc,Wt]=Pe(Ce,{}),vt="SelectViewport",cr=s.forwardRef((e,n)=>{const{__scopeSelect:t,nonce:o,...r}=e,a=pe(vt,t),i=Wt(vt,t),c=M(n,a.onViewportChange),u=s.useRef(0);return l.jsxs(l.Fragment,{children:[l.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:o}),l.jsx(Je.Slot,{scope:t,children:l.jsx(_.div,{"data-radix-select-viewport":"",role:"presentation",...r,ref:c,style:{position:"relative",flex:1,overflow:"hidden auto",...r.style},onScroll:E(r.onScroll,d=>{const f=d.currentTarget,{contentWrapper:p,shouldExpandOnScrollRef:g}=i;if(g?.current&&p){const h=Math.abs(u.current-f.scrollTop);if(h>0){const w=window.innerHeight-ne*2,v=parseFloat(p.style.minHeight),m=parseFloat(p.style.height),C=Math.max(v,m);if(C0?b:0,p.style.justifyContent="flex-end")}}}u.current=f.scrollTop})})})]})});cr.displayName=vt;var lr="SelectGroup",[oc,rc]=Pe(lr),sc=s.forwardRef((e,n)=>{const{__scopeSelect:t,...o}=e,r=oe();return l.jsx(oc,{scope:t,id:r,children:l.jsx(_.div,{role:"group","aria-labelledby":r,...o,ref:n})})});sc.displayName=lr;var ur="SelectLabel",ac=s.forwardRef((e,n)=>{const{__scopeSelect:t,...o}=e,r=rc(ur,t);return l.jsx(_.div,{id:r.id,...o,ref:n})});ac.displayName=ur;var He="SelectItem",[ic,dr]=Pe(He),fr=s.forwardRef((e,n)=>{const{__scopeSelect:t,value:o,disabled:r=!1,textValue:a,...i}=e,c=fe(He,t),u=pe(He,t),d=c.value===o,[f,p]=s.useState(a??""),[g,h]=s.useState(!1),w=M(n,x=>u.itemRefCallback?.(x,o,r)),v=oe(),m=s.useRef("touch"),C=()=>{r||(c.onValueChange(o),c.onOpenChange(!1))};if(o==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return l.jsx(ic,{scope:t,value:o,disabled:r,textId:v,isSelected:d,onItemTextChange:s.useCallback(x=>{p(y=>y||(x?.textContent??"").trim())},[]),children:l.jsx(Je.ItemSlot,{scope:t,value:o,disabled:r,textValue:f,children:l.jsx(_.div,{role:"option","aria-labelledby":v,"data-highlighted":g?"":void 0,"aria-selected":d&&g,"data-state":d?"checked":"unchecked","aria-disabled":r||void 0,"data-disabled":r?"":void 0,tabIndex:r?void 0:-1,...i,ref:w,onFocus:E(i.onFocus,()=>h(!0)),onBlur:E(i.onBlur,()=>h(!1)),onClick:E(i.onClick,()=>{m.current!=="mouse"&&C()}),onPointerUp:E(i.onPointerUp,()=>{m.current==="mouse"&&C()}),onPointerDown:E(i.onPointerDown,x=>{m.current=x.pointerType}),onPointerMove:E(i.onPointerMove,x=>{m.current=x.pointerType,r?u.onItemLeave?.():m.current==="mouse"&&x.currentTarget.focus({preventScroll:!0})}),onPointerLeave:E(i.onPointerLeave,x=>{x.currentTarget===document.activeElement&&u.onItemLeave?.()}),onKeyDown:E(i.onKeyDown,x=>{u.searchRef?.current!==""&&x.key===" "||(Wi.includes(x.key)&&C(),x.key===" "&&x.preventDefault())})})})})});fr.displayName=He;var Te="SelectItemText",pr=s.forwardRef((e,n)=>{const{__scopeSelect:t,className:o,style:r,...a}=e,i=fe(Te,t),c=pe(Te,t),u=dr(Te,t),d=Xi(Te,t),[f,p]=s.useState(null),g=M(n,C=>p(C),u.onItemTextChange,C=>c.itemTextRefCallback?.(C,u.value,u.disabled)),h=f?.textContent,w=s.useMemo(()=>l.jsx("option",{value:u.value,disabled:u.disabled,children:h},u.value),[u.disabled,u.value,h]),{onNativeOptionAdd:v,onNativeOptionRemove:m}=d;return K(()=>(v(w),()=>m(w)),[v,m,w]),l.jsxs(l.Fragment,{children:[l.jsx(_.span,{id:u.textId,...a,ref:g}),u.isSelected&&i.valueNode&&!i.valueNodeHasChildren?xt.createPortal(a.children,i.valueNode):null]})});pr.displayName=Te;var vr="SelectItemIndicator",mr=s.forwardRef((e,n)=>{const{__scopeSelect:t,...o}=e;return dr(vr,t).isSelected?l.jsx(_.span,{"aria-hidden":!0,...o,ref:n}):null});mr.displayName=vr;var mt="SelectScrollUpButton",gr=s.forwardRef((e,n)=>{const t=pe(mt,e.__scopeSelect),o=Wt(mt,e.__scopeSelect),[r,a]=s.useState(!1),i=M(n,o.onScrollButtonChange);return K(()=>{if(t.viewport&&t.isPositioned){let c=function(){const d=u.scrollTop>0;a(d)};const u=t.viewport;return c(),u.addEventListener("scroll",c),()=>u.removeEventListener("scroll",c)}},[t.viewport,t.isPositioned]),r?l.jsx(xr,{...e,ref:i,onAutoScroll:()=>{const{viewport:c,selectedItem:u}=t;c&&u&&(c.scrollTop=c.scrollTop-u.offsetHeight)}}):null});gr.displayName=mt;var gt="SelectScrollDownButton",hr=s.forwardRef((e,n)=>{const t=pe(gt,e.__scopeSelect),o=Wt(gt,e.__scopeSelect),[r,a]=s.useState(!1),i=M(n,o.onScrollButtonChange);return K(()=>{if(t.viewport&&t.isPositioned){let c=function(){const d=u.scrollHeight-u.clientHeight,f=Math.ceil(u.scrollTop)u.removeEventListener("scroll",c)}},[t.viewport,t.isPositioned]),r?l.jsx(xr,{...e,ref:i,onAutoScroll:()=>{const{viewport:c,selectedItem:u}=t;c&&u&&(c.scrollTop=c.scrollTop+u.offsetHeight)}}):null});hr.displayName=gt;var xr=s.forwardRef((e,n)=>{const{__scopeSelect:t,onAutoScroll:o,...r}=e,a=pe("SelectScrollButton",t),i=s.useRef(null),c=Qe(t),u=s.useCallback(()=>{i.current!==null&&(window.clearInterval(i.current),i.current=null)},[]);return s.useEffect(()=>()=>u(),[u]),K(()=>{c().find(f=>f.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:"nearest"})},[c]),l.jsx(_.div,{"aria-hidden":!0,...r,ref:n,style:{flexShrink:0,...r.style},onPointerDown:E(r.onPointerDown,()=>{i.current===null&&(i.current=window.setInterval(o,50))}),onPointerMove:E(r.onPointerMove,()=>{a.onItemLeave?.(),i.current===null&&(i.current=window.setInterval(o,50))}),onPointerLeave:E(r.onPointerLeave,()=>{u()})})}),cc="SelectSeparator",lc=s.forwardRef((e,n)=>{const{__scopeSelect:t,...o}=e;return l.jsx(_.div,{"aria-hidden":!0,...o,ref:n})});lc.displayName=cc;var ht="SelectArrow",uc=s.forwardRef((e,n)=>{const{__scopeSelect:t,...o}=e,r=et(t),a=fe(ht,t),i=pe(ht,t);return a.open&&i.position==="popper"?l.jsx(Mt,{...r,...o,ref:n}):null});uc.displayName=ht;var dc="SelectBubbleInput",wr=s.forwardRef(({__scopeSelect:e,value:n,...t},o)=>{const r=s.useRef(null),a=M(o,r),i=Gi(n);return s.useEffect(()=>{const c=r.current;if(!c)return;const u=window.HTMLSelectElement.prototype,f=Object.getOwnPropertyDescriptor(u,"value").set;if(i!==n&&f){const p=new Event("change",{bubbles:!0});f.call(c,n),c.dispatchEvent(p)}},[i,n]),l.jsx(_.select,{...t,style:{...Bn,...t.style},ref:a,defaultValue:n})});wr.displayName=dc;function Cr(e){return e===""||e===void 0}function yr(e){const n=ae(e),t=s.useRef(""),o=s.useRef(0),r=s.useCallback(i=>{const c=t.current+i;n(c),(function u(d){t.current=d,window.clearTimeout(o.current),d!==""&&(o.current=window.setTimeout(()=>u(""),1e3))})(c)},[n]),a=s.useCallback(()=>{t.current="",window.clearTimeout(o.current)},[]);return s.useEffect(()=>()=>window.clearTimeout(o.current),[]),[t,r,a]}function Er(e,n,t){const r=n.length>1&&Array.from(n).every(d=>d===n[0])?n[0]:n,a=t?e.indexOf(t):-1;let i=fc(e,Math.max(a,0));r.length===1&&(i=i.filter(d=>d!==t));const u=i.find(d=>d.textValue.toLowerCase().startsWith(r.toLowerCase()));return u!==t?u:void 0}function fc(e,n){return e.map((t,o)=>e[(n+o)%e.length])}var Kc=Zo,Wc=Qo,Vc=tr,zc=nr,Yc=or,Xc=rr,qc=cr,Zc=fr,Jc=pr,Qc=mr,el=gr,tl=hr;export{Ec as A,Wc as B,_s as C,Is as D,zc as E,Yc as F,Xc as G,qc as H,Ac as I,Zc as J,Qc as K,Jc as L,el as M,tl as N,Ps as O,Rs as P,mc as R,vc as S,Ts as T,Vc as V,Ss as a,In as b,hc as c,xc as d,wc as e,Cc as f,yc as g,bc as h,ra as i,sa as j,_c as k,Tc as l,Ic as m,Mc as n,Nc as o,Oc as p,Fc as q,Bc as r,Uc as s,$c as t,kc as u,jc as v,Lc as w,bs as x,Hc as y,Kc as z}; diff --git a/internal/ui/dist/assets/radix-BnAuhYuH.js b/internal/ui/dist/assets/radix-BnAuhYuH.js new file mode 100644 index 0000000..310af48 --- /dev/null +++ b/internal/ui/dist/assets/radix-BnAuhYuH.js @@ -0,0 +1,11 @@ +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. + +If you want to hide the \`${n.titleName}\`, you can wrap it with our VisuallyHidden component. + +For more information, see https://radix-ui.com/primitives/docs/components/${n.docsSlug}`;return s.useEffect(()=>{e&&(document.getElementById(e)||console.error(t))},[t,e]),null},Ns="DialogDescriptionWarning",Ds=({contentRef:e,descriptionId:n})=>{const o=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${An(Ns).contentName}}.`;return s.useEffect(()=>{const r=e.current?.getAttribute("aria-describedby");n&&r&&(document.getElementById(n)||console.warn(o))},[o,e,n]),null},Os=gn,js=Cn,ks=yn,Ls=En,Fs=bn,$s=Rn,Bs=_n,Nn=In,Us="Arrow",Dn=s.forwardRef((e,n)=>{const{children:t,width:o=10,height:r=5,...a}=e;return l.jsx(_.svg,{...a,ref:n,width:o,height:r,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?t:l.jsx("polygon",{points:"0,0 30,0 15,10"})})});Dn.displayName=Us;var Hs=Dn;function On(e){const[n,t]=s.useState(void 0);return K(()=>{if(e){t({width:e.offsetWidth,height:e.offsetHeight});const o=new ResizeObserver(r=>{if(!Array.isArray(r)||!r.length)return;const a=r[0];let i,c;if("borderBoxSize"in a){const u=a.borderBoxSize,d=Array.isArray(u)?u[0]:u;i=d.inlineSize,c=d.blockSize}else i=e.offsetWidth,c=e.offsetHeight;t({width:i,height:c})});return o.observe(e,{box:"border-box"}),()=>o.unobserve(e)}else t(void 0)},[e]),n}var _t="Popper",[jn,Pe]=se(_t),[Gs,kn]=jn(_t),Ln=e=>{const{__scopePopper:n,children:t}=e,[o,r]=s.useState(null);return l.jsx(Gs,{scope:n,anchor:o,onAnchorChange:r,children:t})};Ln.displayName=_t;var Fn="PopperAnchor",$n=s.forwardRef((e,n)=>{const{__scopePopper:t,virtualRef:o,...r}=e,a=kn(Fn,t),i=s.useRef(null),c=M(n,i),u=s.useRef(null);return s.useEffect(()=>{const d=u.current;u.current=o?.current||i.current,d!==u.current&&a.onAnchorChange(u.current)}),o?null:l.jsx(_.div,{...r,ref:c})});$n.displayName=Fn;var Tt="PopperContent",[Ks,Ws]=jn(Tt),Bn=s.forwardRef((e,n)=>{const{__scopePopper:t,side:o="bottom",sideOffset:r=0,align:a="center",alignOffset:i=0,arrowPadding:c=0,avoidCollisions:u=!0,collisionBoundary:d=[],collisionPadding:f=0,sticky:p="partial",hideWhenDetached:v=!1,updatePositionStrategy:x="optimized",onPlaced:C,...m}=e,h=kn(Tt,t),[w,g]=s.useState(null),y=M(n,b=>g(b)),[S,T]=s.useState(null),A=On(S),P=A?.width??0,I=A?.height??0,F=o+(a!=="center"?"-"+a:""),L=typeof f=="number"?f:{top:0,right:0,bottom:0,left:0,...f},B=Array.isArray(d)?d:[d],H=B.length>0,U={padding:L,boundary:B.filter(zs),altBoundary:H},{refs:W,floatingStyles:V,placement:N,isPositioned:G,middlewareData:k}=jr({strategy:"fixed",placement:F,whileElementsMounted:(...b)=>Gr(...b,{animationFrame:x==="always"}),elements:{reference:h.anchor},middleware:[kr({mainAxis:r+I,alignmentAxis:i}),u&&Lr({mainAxis:!0,crossAxis:!1,limiter:p==="partial"?Hr():void 0,...U}),u&&Fr({...U}),$r({...U,apply:({elements:b,rects:D,availableWidth:Y,availableHeight:O})=>{const{width:j,height:$}=D.reference,Q=b.floating.style;Q.setProperty("--radix-popper-available-width",`${Y}px`),Q.setProperty("--radix-popper-available-height",`${O}px`),Q.setProperty("--radix-popper-anchor-width",`${j}px`),Q.setProperty("--radix-popper-anchor-height",`${$}px`)}}),S&&Br({element:S,padding:c}),Ys({arrowWidth:P,arrowHeight:I}),v&&Ur({strategy:"referenceHidden",...U})]}),[R,Z]=Gn(N),z=ie(C);K(()=>{G&&z?.()},[G,z]);const ne=k.arrow?.x,ce=k.arrow?.y,J=k.arrow?.centerOffset!==0,[le,q]=s.useState();return K(()=>{w&&q(window.getComputedStyle(w).zIndex)},[w]),l.jsx("div",{ref:W.setFloating,"data-radix-popper-content-wrapper":"",style:{...V,transform:G?V.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:le,"--radix-popper-transform-origin":[k.transformOrigin?.x,k.transformOrigin?.y].join(" "),...k.hide?.referenceHidden&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:l.jsx(Ks,{scope:t,placedSide:R,onArrowChange:T,arrowX:ne,arrowY:ce,shouldHideArrow:J,children:l.jsx(_.div,{"data-side":R,"data-align":Z,...m,ref:y,style:{...m.style,animation:G?void 0:"none"}})})})});Bn.displayName=Tt;var Un="PopperArrow",Vs={top:"bottom",right:"left",bottom:"top",left:"right"},Hn=s.forwardRef(function(n,t){const{__scopePopper:o,...r}=n,a=Ws(Un,o),i=Vs[a.placedSide];return l.jsx("span",{ref:a.onArrowChange,style:{position:"absolute",left:a.arrowX,top:a.arrowY,[i]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[a.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[a.placedSide],visibility:a.shouldHideArrow?"hidden":void 0},children:l.jsx(Hs,{...r,ref:t,style:{...r.style,display:"block"}})})});Hn.displayName=Un;function zs(e){return e!==null}var Ys=e=>({name:"transformOrigin",options:e,fn(n){const{placement:t,rects:o,middlewareData:r}=n,i=r.arrow?.centerOffset!==0,c=i?0:e.arrowWidth,u=i?0:e.arrowHeight,[d,f]=Gn(t),p={start:"0%",center:"50%",end:"100%"}[f],v=(r.arrow?.x??0)+c/2,x=(r.arrow?.y??0)+u/2;let C="",m="";return d==="bottom"?(C=i?p:`${v}px`,m=`${-u}px`):d==="top"?(C=i?p:`${v}px`,m=`${o.floating.height+u}px`):d==="right"?(C=`${-u}px`,m=i?p:`${x}px`):d==="left"&&(C=`${o.floating.width+u}px`,m=i?p:`${x}px`),{data:{x:C,y:m}}}});function Gn(e){const[n,t="center"]=e.split("-");return[n,t]}var It=Ln,Mt=$n,At=Bn,Nt=Hn,Kn=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),Xs="VisuallyHidden",Wn=s.forwardRef((e,n)=>l.jsx(_.span,{...e,ref:n,style:{...Kn,...e.style}}));Wn.displayName=Xs;var qs=Wn,[ze,Ac]=se("Tooltip",[Pe]),Ye=Pe(),Vn="TooltipProvider",Zs=700,dt="tooltip.open",[Js,Dt]=ze(Vn),zn=e=>{const{__scopeTooltip:n,delayDuration:t=Zs,skipDelayDuration:o=300,disableHoverableContent:r=!1,children:a}=e,i=s.useRef(!0),c=s.useRef(!1),u=s.useRef(0);return s.useEffect(()=>{const d=u.current;return()=>window.clearTimeout(d)},[]),l.jsx(Js,{scope:n,isOpenDelayedRef:i,delayDuration:t,onOpen:s.useCallback(()=>{window.clearTimeout(u.current),i.current=!1},[]),onClose:s.useCallback(()=>{window.clearTimeout(u.current),u.current=window.setTimeout(()=>i.current=!0,o)},[o]),isPointerInTransitRef:c,onPointerInTransitChange:s.useCallback(d=>{c.current=d},[]),disableHoverableContent:r,children:a})};zn.displayName=Vn;var Me="Tooltip",[Qs,je]=ze(Me),Yn=e=>{const{__scopeTooltip:n,children:t,open:o,defaultOpen:r,onOpenChange:a,disableHoverableContent:i,delayDuration:c}=e,u=Dt(Me,e.__scopeTooltip),d=Ye(n),[f,p]=s.useState(null),v=re(),x=s.useRef(0),C=i??u.disableHoverableContent,m=c??u.delayDuration,h=s.useRef(!1),[w,g]=pe({prop:o,defaultProp:r??!1,onChange:P=>{P?(u.onOpen(),document.dispatchEvent(new CustomEvent(dt))):u.onClose(),a?.(P)},caller:Me}),y=s.useMemo(()=>w?h.current?"delayed-open":"instant-open":"closed",[w]),S=s.useCallback(()=>{window.clearTimeout(x.current),x.current=0,h.current=!1,g(!0)},[g]),T=s.useCallback(()=>{window.clearTimeout(x.current),x.current=0,g(!1)},[g]),A=s.useCallback(()=>{window.clearTimeout(x.current),x.current=window.setTimeout(()=>{h.current=!0,g(!0),x.current=0},m)},[m,g]);return s.useEffect(()=>()=>{x.current&&(window.clearTimeout(x.current),x.current=0)},[]),l.jsx(It,{...d,children:l.jsx(Qs,{scope:n,contentId:v,open:w,stateAttribute:y,trigger:f,onTriggerChange:p,onTriggerEnter:s.useCallback(()=>{u.isOpenDelayedRef.current?A():S()},[u.isOpenDelayedRef,A,S]),onTriggerLeave:s.useCallback(()=>{C?T():(window.clearTimeout(x.current),x.current=0)},[T,C]),onOpen:S,onClose:T,disableHoverableContent:C,children:t})})};Yn.displayName=Me;var ft="TooltipTrigger",Xn=s.forwardRef((e,n)=>{const{__scopeTooltip:t,...o}=e,r=je(ft,t),a=Dt(ft,t),i=Ye(t),c=s.useRef(null),u=M(n,c,r.onTriggerChange),d=s.useRef(!1),f=s.useRef(!1),p=s.useCallback(()=>d.current=!1,[]);return s.useEffect(()=>()=>document.removeEventListener("pointerup",p),[p]),l.jsx(Mt,{asChild:!0,...i,children:l.jsx(_.button,{"aria-describedby":r.open?r.contentId:void 0,"data-state":r.stateAttribute,...o,ref:u,onPointerMove:E(e.onPointerMove,v=>{v.pointerType!=="touch"&&!f.current&&!a.isPointerInTransitRef.current&&(r.onTriggerEnter(),f.current=!0)}),onPointerLeave:E(e.onPointerLeave,()=>{r.onTriggerLeave(),f.current=!1}),onPointerDown:E(e.onPointerDown,()=>{r.open&&r.onClose(),d.current=!0,document.addEventListener("pointerup",p,{once:!0})}),onFocus:E(e.onFocus,()=>{d.current||r.onOpen()}),onBlur:E(e.onBlur,r.onClose),onClick:E(e.onClick,r.onClose)})})});Xn.displayName=ft;var Ot="TooltipPortal",[ea,ta]=ze(Ot,{forceMount:void 0}),qn=e=>{const{__scopeTooltip:n,forceMount:t,children:o,container:r}=e,a=je(Ot,n);return l.jsx(ea,{scope:n,forceMount:t,children:l.jsx(te,{present:t||a.open,children:l.jsx(Oe,{asChild:!0,container:r,children:o})})})};qn.displayName=Ot;var Re="TooltipContent",Zn=s.forwardRef((e,n)=>{const t=ta(Re,e.__scopeTooltip),{forceMount:o=t.forceMount,side:r="top",...a}=e,i=je(Re,e.__scopeTooltip);return l.jsx(te,{present:o||i.open,children:i.disableHoverableContent?l.jsx(Jn,{side:r,...a,ref:n}):l.jsx(na,{side:r,...a,ref:n})})}),na=s.forwardRef((e,n)=>{const t=je(Re,e.__scopeTooltip),o=Dt(Re,e.__scopeTooltip),r=s.useRef(null),a=M(n,r),[i,c]=s.useState(null),{trigger:u,onClose:d}=t,f=r.current,{onPointerInTransitChange:p}=o,v=s.useCallback(()=>{c(null),p(!1)},[p]),x=s.useCallback((C,m)=>{const h=C.currentTarget,w={x:C.clientX,y:C.clientY},g=aa(w,h.getBoundingClientRect()),y=ia(w,g),S=ca(m.getBoundingClientRect()),T=ua([...y,...S]);c(T),p(!0)},[p]);return s.useEffect(()=>()=>v(),[v]),s.useEffect(()=>{if(u&&f){const C=h=>x(h,f),m=h=>x(h,u);return u.addEventListener("pointerleave",C),f.addEventListener("pointerleave",m),()=>{u.removeEventListener("pointerleave",C),f.removeEventListener("pointerleave",m)}}},[u,f,x,v]),s.useEffect(()=>{if(i){const C=m=>{const h=m.target,w={x:m.clientX,y:m.clientY},g=u?.contains(h)||f?.contains(h),y=!la(w,i);g?v():y&&(v(),d())};return document.addEventListener("pointermove",C),()=>document.removeEventListener("pointermove",C)}},[u,f,i,d,v]),l.jsx(Jn,{...e,ref:a})}),[oa,ra]=ze(Me,{isInside:!1}),sa=ln("TooltipContent"),Jn=s.forwardRef((e,n)=>{const{__scopeTooltip:t,children:o,"aria-label":r,onEscapeKeyDown:a,onPointerDownOutside:i,...c}=e,u=je(Re,t),d=Ye(t),{onClose:f}=u;return s.useEffect(()=>(document.addEventListener(dt,f),()=>document.removeEventListener(dt,f)),[f]),s.useEffect(()=>{if(u.trigger){const p=v=>{v.target?.contains(u.trigger)&&f()};return window.addEventListener("scroll",p,{capture:!0}),()=>window.removeEventListener("scroll",p,{capture:!0})}},[u.trigger,f]),l.jsx(De,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:a,onPointerDownOutside:i,onFocusOutside:p=>p.preventDefault(),onDismiss:f,children:l.jsxs(At,{"data-state":u.stateAttribute,...d,...c,ref:n,style:{...c.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[l.jsx(sa,{children:o}),l.jsx(oa,{scope:t,isInside:!0,children:l.jsx(qs,{id:u.contentId,role:"tooltip",children:r||o})})]})})});Zn.displayName=Re;var Qn="TooltipArrow",eo=s.forwardRef((e,n)=>{const{__scopeTooltip:t,...o}=e,r=Ye(t);return ra(Qn,t).isInside?null:l.jsx(Nt,{...r,...o,ref:n})});eo.displayName=Qn;function aa(e,n){const t=Math.abs(n.top-e.y),o=Math.abs(n.bottom-e.y),r=Math.abs(n.right-e.x),a=Math.abs(n.left-e.x);switch(Math.min(t,o,r,a)){case a:return"left";case r:return"right";case t:return"top";case o:return"bottom";default:throw new Error("unreachable")}}function ia(e,n,t=5){const o=[];switch(n){case"top":o.push({x:e.x-t,y:e.y+t},{x:e.x+t,y:e.y+t});break;case"bottom":o.push({x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t});break;case"left":o.push({x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t});break;case"right":o.push({x:e.x-t,y:e.y-t},{x:e.x-t,y:e.y+t});break}return o}function ca(e){const{top:n,right:t,bottom:o,left:r}=e;return[{x:r,y:n},{x:t,y:n},{x:t,y:o},{x:r,y:o}]}function la(e,n){const{x:t,y:o}=e;let r=!1;for(let a=0,i=n.length-1;ao!=v>o&&t<(p-d)*(o-f)/(v-f)+d&&(r=!r)}return r}function ua(e){const n=e.slice();return n.sort((t,o)=>t.xo.x?1:t.yo.y?1:0),da(n)}function da(e){if(e.length<=1)return e.slice();const n=[];for(let o=0;o=2;){const a=n[n.length-1],i=n[n.length-2];if((a.x-i.x)*(r.y-i.y)>=(a.y-i.y)*(r.x-i.x))n.pop();else break}n.push(r)}n.pop();const t=[];for(let o=e.length-1;o>=0;o--){const r=e[o];for(;t.length>=2;){const a=t[t.length-1],i=t[t.length-2];if((a.x-i.x)*(r.y-i.y)>=(a.y-i.y)*(r.x-i.x))t.pop();else break}t.push(r)}return t.pop(),n.length===1&&t.length===1&&n[0].x===t[0].x&&n[0].y===t[0].y?n:n.concat(t)}var Nc=zn,Dc=Yn,Oc=Xn,jc=qn,kc=Zn,Lc=eo,Xe="Collapsible",[fa,Fc]=se(Xe),[pa,jt]=fa(Xe),to=s.forwardRef((e,n)=>{const{__scopeCollapsible:t,open:o,defaultOpen:r,disabled:a,onOpenChange:i,...c}=e,[u,d]=pe({prop:o,defaultProp:r??!1,onChange:i,caller:Xe});return l.jsx(pa,{scope:t,disabled:a,contentId:re(),open:u,onOpenToggle:s.useCallback(()=>d(f=>!f),[d]),children:l.jsx(_.div,{"data-state":Lt(u),"data-disabled":a?"":void 0,...c,ref:n})})});to.displayName=Xe;var no="CollapsibleTrigger",ma=s.forwardRef((e,n)=>{const{__scopeCollapsible:t,...o}=e,r=jt(no,t);return l.jsx(_.button,{type:"button","aria-controls":r.contentId,"aria-expanded":r.open||!1,"data-state":Lt(r.open),"data-disabled":r.disabled?"":void 0,disabled:r.disabled,...o,ref:n,onClick:E(e.onClick,r.onOpenToggle)})});ma.displayName=no;var kt="CollapsibleContent",va=s.forwardRef((e,n)=>{const{forceMount:t,...o}=e,r=jt(kt,e.__scopeCollapsible);return l.jsx(te,{present:t||r.open,children:({present:a})=>l.jsx(ha,{...o,ref:n,present:a})})});va.displayName=kt;var ha=s.forwardRef((e,n)=>{const{__scopeCollapsible:t,present:o,children:r,...a}=e,i=jt(kt,t),[c,u]=s.useState(o),d=s.useRef(null),f=M(n,d),p=s.useRef(0),v=p.current,x=s.useRef(0),C=x.current,m=i.open||c,h=s.useRef(m),w=s.useRef(void 0);return s.useEffect(()=>{const g=requestAnimationFrame(()=>h.current=!1);return()=>cancelAnimationFrame(g)},[]),K(()=>{const g=d.current;if(g){w.current=w.current||{transitionDuration:g.style.transitionDuration,animationName:g.style.animationName},g.style.transitionDuration="0s",g.style.animationName="none";const y=g.getBoundingClientRect();p.current=y.height,x.current=y.width,h.current||(g.style.transitionDuration=w.current.transitionDuration,g.style.animationName=w.current.animationName),u(o)}},[i.open,o]),l.jsx(_.div,{"data-state":Lt(i.open),"data-disabled":i.disabled?"":void 0,id:i.contentId,hidden:!m,...a,ref:f,style:{"--radix-collapsible-content-height":v?`${v}px`:void 0,"--radix-collapsible-content-width":C?`${C}px`:void 0,...e.style},children:m&&r})});function Lt(e){return e?"open":"closed"}var $c=to;function Ft(e){const n=e+"CollectionProvider",[t,o]=se(n),[r,a]=t(n,{collectionRef:{current:null},itemMap:new Map}),i=m=>{const{scope:h,children:w}=m,g=ge.useRef(null),y=ge.useRef(new Map).current;return l.jsx(r,{scope:h,itemMap:y,collectionRef:g,children:w})};i.displayName=n;const c=e+"CollectionSlot",u=xe(c),d=ge.forwardRef((m,h)=>{const{scope:w,children:g}=m,y=a(c,w),S=M(h,y.collectionRef);return l.jsx(u,{ref:S,children:g})});d.displayName=c;const f=e+"CollectionItemSlot",p="data-radix-collection-item",v=xe(f),x=ge.forwardRef((m,h)=>{const{scope:w,children:g,...y}=m,S=ge.useRef(null),T=M(h,S),A=a(f,w);return ge.useEffect(()=>(A.itemMap.set(S,{ref:S,...y}),()=>void A.itemMap.delete(S))),l.jsx(v,{[p]:"",ref:T,children:g})});x.displayName=f;function C(m){const h=a(e+"CollectionConsumer",m);return ge.useCallback(()=>{const g=h.collectionRef.current;if(!g)return[];const y=Array.from(g.querySelectorAll(`[${p}]`));return Array.from(h.itemMap.values()).sort((A,P)=>y.indexOf(A.ref.current)-y.indexOf(P.ref.current))},[h.collectionRef,h.itemMap])}return[{Provider:i,Slot:d,ItemSlot:x},C,o]}var ga=s.createContext(void 0);function $t(e){const n=s.useContext(ga);return e||n||"ltr"}var lt="rovingFocusGroup.onEntryFocus",xa={bubbles:!1,cancelable:!0},ke="RovingFocusGroup",[pt,oo,Ca]=Ft(ke),[wa,ro]=se(ke,[Ca]),[ya,Ea]=wa(ke),so=s.forwardRef((e,n)=>l.jsx(pt.Provider,{scope:e.__scopeRovingFocusGroup,children:l.jsx(pt.Slot,{scope:e.__scopeRovingFocusGroup,children:l.jsx(ba,{...e,ref:n})})}));so.displayName=ke;var ba=s.forwardRef((e,n)=>{const{__scopeRovingFocusGroup:t,orientation:o,loop:r=!1,dir:a,currentTabStopId:i,defaultCurrentTabStopId:c,onCurrentTabStopIdChange:u,onEntryFocus:d,preventScrollOnEntryFocus:f=!1,...p}=e,v=s.useRef(null),x=M(n,v),C=$t(a),[m,h]=pe({prop:i,defaultProp:c??null,onChange:u,caller:ke}),[w,g]=s.useState(!1),y=ie(d),S=oo(t),T=s.useRef(!1),[A,P]=s.useState(0);return s.useEffect(()=>{const I=v.current;if(I)return I.addEventListener(lt,y),()=>I.removeEventListener(lt,y)},[y]),l.jsx(ya,{scope:t,orientation:o,dir:C,loop:r,currentTabStopId:m,onItemFocus:s.useCallback(I=>h(I),[h]),onItemShiftTab:s.useCallback(()=>g(!0),[]),onFocusableItemAdd:s.useCallback(()=>P(I=>I+1),[]),onFocusableItemRemove:s.useCallback(()=>P(I=>I-1),[]),children:l.jsx(_.div,{tabIndex:w||A===0?-1:0,"data-orientation":o,...p,ref:x,style:{outline:"none",...e.style},onMouseDown:E(e.onMouseDown,()=>{T.current=!0}),onFocus:E(e.onFocus,I=>{const F=!T.current;if(I.target===I.currentTarget&&F&&!w){const L=new CustomEvent(lt,xa);if(I.currentTarget.dispatchEvent(L),!L.defaultPrevented){const B=S().filter(N=>N.focusable),H=B.find(N=>N.active),U=B.find(N=>N.id===m),V=[H,U,...B].filter(Boolean).map(N=>N.ref.current);co(V,f)}}T.current=!1}),onBlur:E(e.onBlur,()=>g(!1))})})}),ao="RovingFocusGroupItem",io=s.forwardRef((e,n)=>{const{__scopeRovingFocusGroup:t,focusable:o=!0,active:r=!1,tabStopId:a,children:i,...c}=e,u=re(),d=a||u,f=Ea(ao,t),p=f.currentTabStopId===d,v=oo(t),{onFocusableItemAdd:x,onFocusableItemRemove:C,currentTabStopId:m}=f;return s.useEffect(()=>{if(o)return x(),()=>C()},[o,x,C]),l.jsx(pt.ItemSlot,{scope:t,id:d,focusable:o,active:r,children:l.jsx(_.span,{tabIndex:p?0:-1,"data-orientation":f.orientation,...c,ref:n,onMouseDown:E(e.onMouseDown,h=>{o?f.onItemFocus(d):h.preventDefault()}),onFocus:E(e.onFocus,()=>f.onItemFocus(d)),onKeyDown:E(e.onKeyDown,h=>{if(h.key==="Tab"&&h.shiftKey){f.onItemShiftTab();return}if(h.target!==h.currentTarget)return;const w=Pa(h,f.orientation,f.dir);if(w!==void 0){if(h.metaKey||h.ctrlKey||h.altKey||h.shiftKey)return;h.preventDefault();let y=v().filter(S=>S.focusable).map(S=>S.ref.current);if(w==="last")y.reverse();else if(w==="prev"||w==="next"){w==="prev"&&y.reverse();const S=y.indexOf(h.currentTarget);y=f.loop?_a(y,S+1):y.slice(S+1)}setTimeout(()=>co(y))}}),children:typeof i=="function"?i({isCurrentTabStop:p,hasTabStop:m!=null}):i})})});io.displayName=ao;var Sa={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Ra(e,n){return n!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function Pa(e,n,t){const o=Ra(e.key,t);if(!(n==="vertical"&&["ArrowLeft","ArrowRight"].includes(o))&&!(n==="horizontal"&&["ArrowUp","ArrowDown"].includes(o)))return Sa[o]}function co(e,n=!1){const t=document.activeElement;for(const o of e)if(o===t||(o.focus({preventScroll:n}),document.activeElement!==t))return}function _a(e,n){return e.map((t,o)=>e[(n+o)%e.length])}var Ta=so,Ia=io,mt=["Enter"," "],Ma=["ArrowDown","PageUp","Home"],lo=["ArrowUp","PageDown","End"],Aa=[...Ma,...lo],Na={ltr:[...mt,"ArrowRight"],rtl:[...mt,"ArrowLeft"]},Da={ltr:["ArrowLeft"],rtl:["ArrowRight"]},Le="Menu",[Ae,Oa,ja]=Ft(Le),[Ee,uo]=se(Le,[ja,Pe,ro]),qe=Pe(),fo=ro(),[ka,be]=Ee(Le),[La,Fe]=Ee(Le),po=e=>{const{__scopeMenu:n,open:t=!1,children:o,dir:r,onOpenChange:a,modal:i=!0}=e,c=qe(n),[u,d]=s.useState(null),f=s.useRef(!1),p=ie(a),v=$t(r);return s.useEffect(()=>{const x=()=>{f.current=!0,document.addEventListener("pointerdown",C,{capture:!0,once:!0}),document.addEventListener("pointermove",C,{capture:!0,once:!0})},C=()=>f.current=!1;return document.addEventListener("keydown",x,{capture:!0}),()=>{document.removeEventListener("keydown",x,{capture:!0}),document.removeEventListener("pointerdown",C,{capture:!0}),document.removeEventListener("pointermove",C,{capture:!0})}},[]),l.jsx(It,{...c,children:l.jsx(ka,{scope:n,open:t,onOpenChange:p,content:u,onContentChange:d,children:l.jsx(La,{scope:n,onClose:s.useCallback(()=>p(!1),[p]),isUsingKeyboardRef:f,dir:v,modal:i,children:o})})})};po.displayName=Le;var Fa="MenuAnchor",Bt=s.forwardRef((e,n)=>{const{__scopeMenu:t,...o}=e,r=qe(t);return l.jsx(Mt,{...r,...o,ref:n})});Bt.displayName=Fa;var Ut="MenuPortal",[$a,mo]=Ee(Ut,{forceMount:void 0}),vo=e=>{const{__scopeMenu:n,forceMount:t,children:o,container:r}=e,a=be(Ut,n);return l.jsx($a,{scope:n,forceMount:t,children:l.jsx(te,{present:t||a.open,children:l.jsx(Oe,{asChild:!0,container:r,children:o})})})};vo.displayName=Ut;var ee="MenuContent",[Ba,Ht]=Ee(ee),ho=s.forwardRef((e,n)=>{const t=mo(ee,e.__scopeMenu),{forceMount:o=t.forceMount,...r}=e,a=be(ee,e.__scopeMenu),i=Fe(ee,e.__scopeMenu);return l.jsx(Ae.Provider,{scope:e.__scopeMenu,children:l.jsx(te,{present:o||a.open,children:l.jsx(Ae.Slot,{scope:e.__scopeMenu,children:i.modal?l.jsx(Ua,{...r,ref:n}):l.jsx(Ha,{...r,ref:n})})})})}),Ua=s.forwardRef((e,n)=>{const t=be(ee,e.__scopeMenu),o=s.useRef(null),r=M(n,o);return s.useEffect(()=>{const a=o.current;if(a)return yt(a)},[]),l.jsx(Gt,{...e,ref:r,trapFocus:t.open,disableOutsidePointerEvents:t.open,disableOutsideScroll:!0,onFocusOutside:E(e.onFocusOutside,a=>a.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>t.onOpenChange(!1)})}),Ha=s.forwardRef((e,n)=>{const t=be(ee,e.__scopeMenu);return l.jsx(Gt,{...e,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>t.onOpenChange(!1)})}),Ga=xe("MenuContent.ScrollLock"),Gt=s.forwardRef((e,n)=>{const{__scopeMenu:t,loop:o=!1,trapFocus:r,onOpenAutoFocus:a,onCloseAutoFocus:i,disableOutsidePointerEvents:c,onEntryFocus:u,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:p,onInteractOutside:v,onDismiss:x,disableOutsideScroll:C,...m}=e,h=be(ee,t),w=Fe(ee,t),g=qe(t),y=fo(t),S=Oa(t),[T,A]=s.useState(null),P=s.useRef(null),I=M(n,P,h.onContentChange),F=s.useRef(0),L=s.useRef(""),B=s.useRef(0),H=s.useRef(null),U=s.useRef("right"),W=s.useRef(0),V=C?Et:s.Fragment,N=C?{as:Ga,allowPinchZoom:!0}:void 0,G=R=>{const Z=L.current+R,z=S().filter(b=>!b.disabled),ne=document.activeElement,ce=z.find(b=>b.ref.current===ne)?.textValue,J=z.map(b=>b.textValue),le=ti(J,Z,ce),q=z.find(b=>b.textValue===le)?.ref.current;(function b(D){L.current=D,window.clearTimeout(F.current),D!==""&&(F.current=window.setTimeout(()=>b(""),1e3))})(Z),q&&setTimeout(()=>q.focus())};s.useEffect(()=>()=>window.clearTimeout(F.current),[]),bt();const k=s.useCallback(R=>U.current===H.current?.side&&oi(R,H.current?.area),[]);return l.jsx(Ba,{scope:t,searchRef:L,onItemEnter:s.useCallback(R=>{k(R)&&R.preventDefault()},[k]),onItemLeave:s.useCallback(R=>{k(R)||(P.current?.focus(),A(null))},[k]),onTriggerLeave:s.useCallback(R=>{k(R)&&R.preventDefault()},[k]),pointerGraceTimerRef:B,onPointerGraceIntentChange:s.useCallback(R=>{H.current=R},[]),children:l.jsx(V,{...N,children:l.jsx(We,{asChild:!0,trapped:r,onMountAutoFocus:E(a,R=>{R.preventDefault(),P.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:i,children:l.jsx(De,{asChild:!0,disableOutsidePointerEvents:c,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:p,onInteractOutside:v,onDismiss:x,children:l.jsx(Ta,{asChild:!0,...y,dir:w.dir,orientation:"vertical",loop:o,currentTabStopId:T,onCurrentTabStopIdChange:A,onEntryFocus:E(u,R=>{w.isUsingKeyboardRef.current||R.preventDefault()}),preventScrollOnEntryFocus:!0,children:l.jsx(At,{role:"menu","aria-orientation":"vertical","data-state":No(h.open),"data-radix-menu-content":"",dir:w.dir,...g,...m,ref:I,style:{outline:"none",...m.style},onKeyDown:E(m.onKeyDown,R=>{const z=R.target.closest("[data-radix-menu-content]")===R.currentTarget,ne=R.ctrlKey||R.altKey||R.metaKey,ce=R.key.length===1;z&&(R.key==="Tab"&&R.preventDefault(),!ne&&ce&&G(R.key));const J=P.current;if(R.target!==J||!Aa.includes(R.key))return;R.preventDefault();const q=S().filter(b=>!b.disabled).map(b=>b.ref.current);lo.includes(R.key)&&q.reverse(),Qa(q)}),onBlur:E(e.onBlur,R=>{R.currentTarget.contains(R.target)||(window.clearTimeout(F.current),L.current="")}),onPointerMove:E(e.onPointerMove,Ne(R=>{const Z=R.target,z=W.current!==R.clientX;if(R.currentTarget.contains(Z)&&z){const ne=R.clientX>W.current?"right":"left";U.current=ne,W.current=R.clientX}}))})})})})})})});ho.displayName=ee;var Ka="MenuGroup",Kt=s.forwardRef((e,n)=>{const{__scopeMenu:t,...o}=e;return l.jsx(_.div,{role:"group",...o,ref:n})});Kt.displayName=Ka;var Wa="MenuLabel",go=s.forwardRef((e,n)=>{const{__scopeMenu:t,...o}=e;return l.jsx(_.div,{...o,ref:n})});go.displayName=Wa;var Ue="MenuItem",rn="menu.itemSelect",Ze=s.forwardRef((e,n)=>{const{disabled:t=!1,onSelect:o,...r}=e,a=s.useRef(null),i=Fe(Ue,e.__scopeMenu),c=Ht(Ue,e.__scopeMenu),u=M(n,a),d=s.useRef(!1),f=()=>{const p=a.current;if(!t&&p){const v=new CustomEvent(rn,{bubbles:!0,cancelable:!0});p.addEventListener(rn,x=>o?.(x),{once:!0}),un(p,v),v.defaultPrevented?d.current=!1:i.onClose()}};return l.jsx(xo,{...r,ref:u,disabled:t,onClick:E(e.onClick,f),onPointerDown:p=>{e.onPointerDown?.(p),d.current=!0},onPointerUp:E(e.onPointerUp,p=>{d.current||p.currentTarget?.click()}),onKeyDown:E(e.onKeyDown,p=>{const v=c.searchRef.current!=="";t||v&&p.key===" "||mt.includes(p.key)&&(p.currentTarget.click(),p.preventDefault())})})});Ze.displayName=Ue;var xo=s.forwardRef((e,n)=>{const{__scopeMenu:t,disabled:o=!1,textValue:r,...a}=e,i=Ht(Ue,t),c=fo(t),u=s.useRef(null),d=M(n,u),[f,p]=s.useState(!1),[v,x]=s.useState("");return s.useEffect(()=>{const C=u.current;C&&x((C.textContent??"").trim())},[a.children]),l.jsx(Ae.ItemSlot,{scope:t,disabled:o,textValue:r??v,children:l.jsx(Ia,{asChild:!0,...c,focusable:!o,children:l.jsx(_.div,{role:"menuitem","data-highlighted":f?"":void 0,"aria-disabled":o||void 0,"data-disabled":o?"":void 0,...a,ref:d,onPointerMove:E(e.onPointerMove,Ne(C=>{o?i.onItemLeave(C):(i.onItemEnter(C),C.defaultPrevented||C.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:E(e.onPointerLeave,Ne(C=>i.onItemLeave(C))),onFocus:E(e.onFocus,()=>p(!0)),onBlur:E(e.onBlur,()=>p(!1))})})})}),Va="MenuCheckboxItem",Co=s.forwardRef((e,n)=>{const{checked:t=!1,onCheckedChange:o,...r}=e;return l.jsx(So,{scope:e.__scopeMenu,checked:t,children:l.jsx(Ze,{role:"menuitemcheckbox","aria-checked":He(t)?"mixed":t,...r,ref:n,"data-state":Vt(t),onSelect:E(r.onSelect,()=>o?.(He(t)?!0:!t),{checkForDefaultPrevented:!1})})})});Co.displayName=Va;var wo="MenuRadioGroup",[za,Ya]=Ee(wo,{value:void 0,onValueChange:()=>{}}),yo=s.forwardRef((e,n)=>{const{value:t,onValueChange:o,...r}=e,a=ie(o);return l.jsx(za,{scope:e.__scopeMenu,value:t,onValueChange:a,children:l.jsx(Kt,{...r,ref:n})})});yo.displayName=wo;var Eo="MenuRadioItem",bo=s.forwardRef((e,n)=>{const{value:t,...o}=e,r=Ya(Eo,e.__scopeMenu),a=t===r.value;return l.jsx(So,{scope:e.__scopeMenu,checked:a,children:l.jsx(Ze,{role:"menuitemradio","aria-checked":a,...o,ref:n,"data-state":Vt(a),onSelect:E(o.onSelect,()=>r.onValueChange?.(t),{checkForDefaultPrevented:!1})})})});bo.displayName=Eo;var Wt="MenuItemIndicator",[So,Xa]=Ee(Wt,{checked:!1}),Ro=s.forwardRef((e,n)=>{const{__scopeMenu:t,forceMount:o,...r}=e,a=Xa(Wt,t);return l.jsx(te,{present:o||He(a.checked)||a.checked===!0,children:l.jsx(_.span,{...r,ref:n,"data-state":Vt(a.checked)})})});Ro.displayName=Wt;var qa="MenuSeparator",Po=s.forwardRef((e,n)=>{const{__scopeMenu:t,...o}=e;return l.jsx(_.div,{role:"separator","aria-orientation":"horizontal",...o,ref:n})});Po.displayName=qa;var Za="MenuArrow",_o=s.forwardRef((e,n)=>{const{__scopeMenu:t,...o}=e,r=qe(t);return l.jsx(Nt,{...r,...o,ref:n})});_o.displayName=Za;var Ja="MenuSub",[Bc,To]=Ee(Ja),Te="MenuSubTrigger",Io=s.forwardRef((e,n)=>{const t=be(Te,e.__scopeMenu),o=Fe(Te,e.__scopeMenu),r=To(Te,e.__scopeMenu),a=Ht(Te,e.__scopeMenu),i=s.useRef(null),{pointerGraceTimerRef:c,onPointerGraceIntentChange:u}=a,d={__scopeMenu:e.__scopeMenu},f=s.useCallback(()=>{i.current&&window.clearTimeout(i.current),i.current=null},[]);return s.useEffect(()=>f,[f]),s.useEffect(()=>{const p=c.current;return()=>{window.clearTimeout(p),u(null)}},[c,u]),l.jsx(Bt,{asChild:!0,...d,children:l.jsx(xo,{id:r.triggerId,"aria-haspopup":"menu","aria-expanded":t.open,"aria-controls":r.contentId,"data-state":No(t.open),...e,ref:Ke(n,r.onTriggerChange),onClick:p=>{e.onClick?.(p),!(e.disabled||p.defaultPrevented)&&(p.currentTarget.focus(),t.open||t.onOpenChange(!0))},onPointerMove:E(e.onPointerMove,Ne(p=>{a.onItemEnter(p),!p.defaultPrevented&&!e.disabled&&!t.open&&!i.current&&(a.onPointerGraceIntentChange(null),i.current=window.setTimeout(()=>{t.onOpenChange(!0),f()},100))})),onPointerLeave:E(e.onPointerLeave,Ne(p=>{f();const v=t.content?.getBoundingClientRect();if(v){const x=t.content?.dataset.side,C=x==="right",m=C?-5:5,h=v[C?"left":"right"],w=v[C?"right":"left"];a.onPointerGraceIntentChange({area:[{x:p.clientX+m,y:p.clientY},{x:h,y:v.top},{x:w,y:v.top},{x:w,y:v.bottom},{x:h,y:v.bottom}],side:x}),window.clearTimeout(c.current),c.current=window.setTimeout(()=>a.onPointerGraceIntentChange(null),300)}else{if(a.onTriggerLeave(p),p.defaultPrevented)return;a.onPointerGraceIntentChange(null)}})),onKeyDown:E(e.onKeyDown,p=>{const v=a.searchRef.current!=="";e.disabled||v&&p.key===" "||Na[o.dir].includes(p.key)&&(t.onOpenChange(!0),t.content?.focus(),p.preventDefault())})})})});Io.displayName=Te;var Mo="MenuSubContent",Ao=s.forwardRef((e,n)=>{const t=mo(ee,e.__scopeMenu),{forceMount:o=t.forceMount,...r}=e,a=be(ee,e.__scopeMenu),i=Fe(ee,e.__scopeMenu),c=To(Mo,e.__scopeMenu),u=s.useRef(null),d=M(n,u);return l.jsx(Ae.Provider,{scope:e.__scopeMenu,children:l.jsx(te,{present:o||a.open,children:l.jsx(Ae.Slot,{scope:e.__scopeMenu,children:l.jsx(Gt,{id:c.contentId,"aria-labelledby":c.triggerId,...r,ref:d,align:"start",side:i.dir==="rtl"?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:f=>{i.isUsingKeyboardRef.current&&u.current?.focus(),f.preventDefault()},onCloseAutoFocus:f=>f.preventDefault(),onFocusOutside:E(e.onFocusOutside,f=>{f.target!==c.trigger&&a.onOpenChange(!1)}),onEscapeKeyDown:E(e.onEscapeKeyDown,f=>{i.onClose(),f.preventDefault()}),onKeyDown:E(e.onKeyDown,f=>{const p=f.currentTarget.contains(f.target),v=Da[i.dir].includes(f.key);p&&v&&(a.onOpenChange(!1),c.trigger?.focus(),f.preventDefault())})})})})})});Ao.displayName=Mo;function No(e){return e?"open":"closed"}function He(e){return e==="indeterminate"}function Vt(e){return He(e)?"indeterminate":e?"checked":"unchecked"}function Qa(e){const n=document.activeElement;for(const t of e)if(t===n||(t.focus(),document.activeElement!==n))return}function ei(e,n){return e.map((t,o)=>e[(n+o)%e.length])}function ti(e,n,t){const r=n.length>1&&Array.from(n).every(d=>d===n[0])?n[0]:n,a=t?e.indexOf(t):-1;let i=ei(e,Math.max(a,0));r.length===1&&(i=i.filter(d=>d!==t));const u=i.find(d=>d.toLowerCase().startsWith(r.toLowerCase()));return u!==t?u:void 0}function ni(e,n){const{x:t,y:o}=e;let r=!1;for(let a=0,i=n.length-1;ao!=v>o&&t<(p-d)*(o-f)/(v-f)+d&&(r=!r)}return r}function oi(e,n){if(!n)return!1;const t={x:e.clientX,y:e.clientY};return ni(t,n)}function Ne(e){return n=>n.pointerType==="mouse"?e(n):void 0}var ri=po,si=Bt,ai=vo,ii=ho,ci=Kt,li=go,ui=Ze,di=Co,fi=yo,pi=bo,mi=Ro,vi=Po,hi=_o,gi=Io,xi=Ao,Je="DropdownMenu",[Ci,Uc]=se(Je,[uo]),X=uo(),[wi,Do]=Ci(Je),Oo=e=>{const{__scopeDropdownMenu:n,children:t,dir:o,open:r,defaultOpen:a,onOpenChange:i,modal:c=!0}=e,u=X(n),d=s.useRef(null),[f,p]=pe({prop:r,defaultProp:a??!1,onChange:i,caller:Je});return l.jsx(wi,{scope:n,triggerId:re(),triggerRef:d,contentId:re(),open:f,onOpenChange:p,onOpenToggle:s.useCallback(()=>p(v=>!v),[p]),modal:c,children:l.jsx(ri,{...u,open:f,onOpenChange:p,dir:o,modal:c,children:t})})};Oo.displayName=Je;var jo="DropdownMenuTrigger",ko=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,disabled:o=!1,...r}=e,a=Do(jo,t),i=X(t);return l.jsx(si,{asChild:!0,...i,children:l.jsx(_.button,{type:"button",id:a.triggerId,"aria-haspopup":"menu","aria-expanded":a.open,"aria-controls":a.open?a.contentId:void 0,"data-state":a.open?"open":"closed","data-disabled":o?"":void 0,disabled:o,...r,ref:Ke(n,a.triggerRef),onPointerDown:E(e.onPointerDown,c=>{!o&&c.button===0&&c.ctrlKey===!1&&(a.onOpenToggle(),a.open||c.preventDefault())}),onKeyDown:E(e.onKeyDown,c=>{o||(["Enter"," "].includes(c.key)&&a.onOpenToggle(),c.key==="ArrowDown"&&a.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(c.key)&&c.preventDefault())})})})});ko.displayName=jo;var yi="DropdownMenuPortal",Lo=e=>{const{__scopeDropdownMenu:n,...t}=e,o=X(n);return l.jsx(ai,{...o,...t})};Lo.displayName=yi;var Fo="DropdownMenuContent",$o=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=Do(Fo,t),a=X(t),i=s.useRef(!1);return l.jsx(ii,{id:r.contentId,"aria-labelledby":r.triggerId,...a,...o,ref:n,onCloseAutoFocus:E(e.onCloseAutoFocus,c=>{i.current||r.triggerRef.current?.focus(),i.current=!1,c.preventDefault()}),onInteractOutside:E(e.onInteractOutside,c=>{const u=c.detail.originalEvent,d=u.button===0&&u.ctrlKey===!0,f=u.button===2||d;(!r.modal||f)&&(i.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});$o.displayName=Fo;var Ei="DropdownMenuGroup",bi=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(ci,{...r,...o,ref:n})});bi.displayName=Ei;var Si="DropdownMenuLabel",Ri=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(li,{...r,...o,ref:n})});Ri.displayName=Si;var Pi="DropdownMenuItem",Bo=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(ui,{...r,...o,ref:n})});Bo.displayName=Pi;var _i="DropdownMenuCheckboxItem",Ti=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(di,{...r,...o,ref:n})});Ti.displayName=_i;var Ii="DropdownMenuRadioGroup",Mi=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(fi,{...r,...o,ref:n})});Mi.displayName=Ii;var Ai="DropdownMenuRadioItem",Ni=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(pi,{...r,...o,ref:n})});Ni.displayName=Ai;var Di="DropdownMenuItemIndicator",Oi=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(mi,{...r,...o,ref:n})});Oi.displayName=Di;var ji="DropdownMenuSeparator",ki=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(vi,{...r,...o,ref:n})});ki.displayName=ji;var Li="DropdownMenuArrow",Fi=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(hi,{...r,...o,ref:n})});Fi.displayName=Li;var $i="DropdownMenuSubTrigger",Bi=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(gi,{...r,...o,ref:n})});Bi.displayName=$i;var Ui="DropdownMenuSubContent",Hi=s.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...o}=e,r=X(t);return l.jsx(xi,{...r,...o,ref:n,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});Hi.displayName=Ui;var Hc=Oo,Gc=ko,Kc=Lo,Wc=$o,Vc=Bo,Uo="AlertDialog",[Gi,zc]=se(Uo,[hn]),ue=hn(),Ho=e=>{const{__scopeAlertDialog:n,...t}=e,o=ue(n);return l.jsx(Os,{...o,...t,modal:!0})};Ho.displayName=Uo;var Ki="AlertDialogTrigger",Go=s.forwardRef((e,n)=>{const{__scopeAlertDialog:t,...o}=e,r=ue(t);return l.jsx(js,{...r,...o,ref:n})});Go.displayName=Ki;var Wi="AlertDialogPortal",Ko=e=>{const{__scopeAlertDialog:n,...t}=e,o=ue(n);return l.jsx(ks,{...o,...t})};Ko.displayName=Wi;var Vi="AlertDialogOverlay",Wo=s.forwardRef((e,n)=>{const{__scopeAlertDialog:t,...o}=e,r=ue(t);return l.jsx(Ls,{...r,...o,ref:n})});Wo.displayName=Vi;var Se="AlertDialogContent",[zi,Yi]=Gi(Se),Xi=ln("AlertDialogContent"),Vo=s.forwardRef((e,n)=>{const{__scopeAlertDialog:t,children:o,...r}=e,a=ue(t),i=s.useRef(null),c=M(n,i),u=s.useRef(null);return l.jsx(Ms,{contentName:Se,titleName:zo,docsSlug:"alert-dialog",children:l.jsx(zi,{scope:t,cancelRef:u,children:l.jsxs(Fs,{role:"alertdialog",...a,...r,ref:c,onOpenAutoFocus:E(r.onOpenAutoFocus,d=>{d.preventDefault(),u.current?.focus({preventScroll:!0})}),onPointerDownOutside:d=>d.preventDefault(),onInteractOutside:d=>d.preventDefault(),children:[l.jsx(Xi,{children:o}),l.jsx(Zi,{contentRef:i})]})})})});Vo.displayName=Se;var zo="AlertDialogTitle",Yo=s.forwardRef((e,n)=>{const{__scopeAlertDialog:t,...o}=e,r=ue(t);return l.jsx($s,{...r,...o,ref:n})});Yo.displayName=zo;var Xo="AlertDialogDescription",qo=s.forwardRef((e,n)=>{const{__scopeAlertDialog:t,...o}=e,r=ue(t);return l.jsx(Bs,{...r,...o,ref:n})});qo.displayName=Xo;var qi="AlertDialogAction",Zo=s.forwardRef((e,n)=>{const{__scopeAlertDialog:t,...o}=e,r=ue(t);return l.jsx(Nn,{...r,...o,ref:n})});Zo.displayName=qi;var Jo="AlertDialogCancel",Qo=s.forwardRef((e,n)=>{const{__scopeAlertDialog:t,...o}=e,{cancelRef:r}=Yi(Jo,t),a=ue(t),i=M(n,r);return l.jsx(Nn,{...a,...o,ref:i})});Qo.displayName=Jo;var Zi=({contentRef:e})=>{const n=`\`${Se}\` requires a description for the component to be accessible for screen reader users. + +You can add a description to the \`${Se}\` by passing a \`${Xo}\` component as a child, which also benefits sighted users by adding visible context to the dialog. + +Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${Se}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component. + +For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;return s.useEffect(()=>{document.getElementById(e.current?.getAttribute("aria-describedby"))||console.warn(n)},[n,e]),null},Yc=Ho,Xc=Go,qc=Ko,Zc=Wo,Jc=Vo,Qc=Zo,el=Qo,tl=Yo,nl=qo,Ji="Label",er=s.forwardRef((e,n)=>l.jsx(_.label,{...e,ref:n,onMouseDown:t=>{t.target.closest("button, input, select, textarea")||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));er.displayName=Ji;var ol=er;function sn(e,[n,t]){return Math.min(t,Math.max(n,e))}function tr(e){const n=s.useRef({value:e,previous:e});return s.useMemo(()=>(n.current.value!==e&&(n.current.previous=n.current.value,n.current.value=e),n.current.previous),[e])}var Qi=[" ","Enter","ArrowUp","ArrowDown"],ec=[" ","Enter"],we="Select",[Qe,et,tc]=Ft(we),[_e,rl]=se(we,[tc,Pe]),tt=Pe(),[nc,me]=_e(we),[oc,rc]=_e(we),nr=e=>{const{__scopeSelect:n,children:t,open:o,defaultOpen:r,onOpenChange:a,value:i,defaultValue:c,onValueChange:u,dir:d,name:f,autoComplete:p,disabled:v,required:x,form:C}=e,m=tt(n),[h,w]=s.useState(null),[g,y]=s.useState(null),[S,T]=s.useState(!1),A=$t(d),[P,I]=pe({prop:o,defaultProp:r??!1,onChange:a,caller:we}),[F,L]=pe({prop:i,defaultProp:c,onChange:u,caller:we}),B=s.useRef(null),H=h?C||!!h.closest("form"):!0,[U,W]=s.useState(new Set),V=Array.from(U).map(N=>N.props.value).join(";");return l.jsx(It,{...m,children:l.jsxs(nc,{required:x,scope:n,trigger:h,onTriggerChange:w,valueNode:g,onValueNodeChange:y,valueNodeHasChildren:S,onValueNodeHasChildrenChange:T,contentId:re(),value:F,onValueChange:L,open:P,onOpenChange:I,dir:A,triggerPointerDownPosRef:B,disabled:v,children:[l.jsx(Qe.Provider,{scope:n,children:l.jsx(oc,{scope:e.__scopeSelect,onNativeOptionAdd:s.useCallback(N=>{W(G=>new Set(G).add(N))},[]),onNativeOptionRemove:s.useCallback(N=>{W(G=>{const k=new Set(G);return k.delete(N),k})},[]),children:t})}),H?l.jsxs(Sr,{"aria-hidden":!0,required:x,tabIndex:-1,name:f,autoComplete:p,value:F,onChange:N=>L(N.target.value),disabled:v,form:C,children:[F===void 0?l.jsx("option",{value:""}):null,Array.from(U)]},V):null]})})};nr.displayName=we;var or="SelectTrigger",rr=s.forwardRef((e,n)=>{const{__scopeSelect:t,disabled:o=!1,...r}=e,a=tt(t),i=me(or,t),c=i.disabled||o,u=M(n,i.onTriggerChange),d=et(t),f=s.useRef("touch"),[p,v,x]=Pr(m=>{const h=d().filter(y=>!y.disabled),w=h.find(y=>y.value===i.value),g=_r(h,m,w);g!==void 0&&i.onValueChange(g.value)}),C=m=>{c||(i.onOpenChange(!0),x()),m&&(i.triggerPointerDownPosRef.current={x:Math.round(m.pageX),y:Math.round(m.pageY)})};return l.jsx(Mt,{asChild:!0,...a,children:l.jsx(_.button,{type:"button",role:"combobox","aria-controls":i.contentId,"aria-expanded":i.open,"aria-required":i.required,"aria-autocomplete":"none",dir:i.dir,"data-state":i.open?"open":"closed",disabled:c,"data-disabled":c?"":void 0,"data-placeholder":Rr(i.value)?"":void 0,...r,ref:u,onClick:E(r.onClick,m=>{m.currentTarget.focus(),f.current!=="mouse"&&C(m)}),onPointerDown:E(r.onPointerDown,m=>{f.current=m.pointerType;const h=m.target;h.hasPointerCapture(m.pointerId)&&h.releasePointerCapture(m.pointerId),m.button===0&&m.ctrlKey===!1&&m.pointerType==="mouse"&&(C(m),m.preventDefault())}),onKeyDown:E(r.onKeyDown,m=>{const h=p.current!=="";!(m.ctrlKey||m.altKey||m.metaKey)&&m.key.length===1&&v(m.key),!(h&&m.key===" ")&&Qi.includes(m.key)&&(C(),m.preventDefault())})})})});rr.displayName=or;var sr="SelectValue",ar=s.forwardRef((e,n)=>{const{__scopeSelect:t,className:o,style:r,children:a,placeholder:i="",...c}=e,u=me(sr,t),{onValueNodeHasChildrenChange:d}=u,f=a!==void 0,p=M(n,u.onValueNodeChange);return K(()=>{d(f)},[d,f]),l.jsx(_.span,{...c,ref:p,style:{pointerEvents:"none"},children:Rr(u.value)?l.jsx(l.Fragment,{children:i}):a})});ar.displayName=sr;var sc="SelectIcon",ir=s.forwardRef((e,n)=>{const{__scopeSelect:t,children:o,...r}=e;return l.jsx(_.span,{"aria-hidden":!0,...r,ref:n,children:o||"▼"})});ir.displayName=sc;var ac="SelectPortal",cr=e=>l.jsx(Oe,{asChild:!0,...e});cr.displayName=ac;var ye="SelectContent",lr=s.forwardRef((e,n)=>{const t=me(ye,e.__scopeSelect),[o,r]=s.useState();if(K(()=>{r(new DocumentFragment)},[]),!t.open){const a=o;return a?wt.createPortal(l.jsx(ur,{scope:e.__scopeSelect,children:l.jsx(Qe.Slot,{scope:e.__scopeSelect,children:l.jsx("div",{children:e.children})})}),a):null}return l.jsx(dr,{...e,ref:n})});lr.displayName=ye;var oe=10,[ur,ve]=_e(ye),ic="SelectContentImpl",cc=xe("SelectContent.RemoveScroll"),dr=s.forwardRef((e,n)=>{const{__scopeSelect:t,position:o="item-aligned",onCloseAutoFocus:r,onEscapeKeyDown:a,onPointerDownOutside:i,side:c,sideOffset:u,align:d,alignOffset:f,arrowPadding:p,collisionBoundary:v,collisionPadding:x,sticky:C,hideWhenDetached:m,avoidCollisions:h,...w}=e,g=me(ye,t),[y,S]=s.useState(null),[T,A]=s.useState(null),P=M(n,b=>S(b)),[I,F]=s.useState(null),[L,B]=s.useState(null),H=et(t),[U,W]=s.useState(!1),V=s.useRef(!1);s.useEffect(()=>{if(y)return yt(y)},[y]),bt();const N=s.useCallback(b=>{const[D,...Y]=H().map($=>$.ref.current),[O]=Y.slice(-1),j=document.activeElement;for(const $ of b)if($===j||($?.scrollIntoView({block:"nearest"}),$===D&&T&&(T.scrollTop=0),$===O&&T&&(T.scrollTop=T.scrollHeight),$?.focus(),document.activeElement!==j))return},[H,T]),G=s.useCallback(()=>N([I,y]),[N,I,y]);s.useEffect(()=>{U&&G()},[U,G]);const{onOpenChange:k,triggerPointerDownPosRef:R}=g;s.useEffect(()=>{if(y){let b={x:0,y:0};const D=O=>{b={x:Math.abs(Math.round(O.pageX)-(R.current?.x??0)),y:Math.abs(Math.round(O.pageY)-(R.current?.y??0))}},Y=O=>{b.x<=10&&b.y<=10?O.preventDefault():y.contains(O.target)||k(!1),document.removeEventListener("pointermove",D),R.current=null};return R.current!==null&&(document.addEventListener("pointermove",D),document.addEventListener("pointerup",Y,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",D),document.removeEventListener("pointerup",Y,{capture:!0})}}},[y,k,R]),s.useEffect(()=>{const b=()=>k(!1);return window.addEventListener("blur",b),window.addEventListener("resize",b),()=>{window.removeEventListener("blur",b),window.removeEventListener("resize",b)}},[k]);const[Z,z]=Pr(b=>{const D=H().filter(j=>!j.disabled),Y=D.find(j=>j.ref.current===document.activeElement),O=_r(D,b,Y);O&&setTimeout(()=>O.ref.current.focus())}),ne=s.useCallback((b,D,Y)=>{const O=!V.current&&!Y;(g.value!==void 0&&g.value===D||O)&&(F(b),O&&(V.current=!0))},[g.value]),ce=s.useCallback(()=>y?.focus(),[y]),J=s.useCallback((b,D,Y)=>{const O=!V.current&&!Y;(g.value!==void 0&&g.value===D||O)&&B(b)},[g.value]),le=o==="popper"?vt:fr,q=le===vt?{side:c,sideOffset:u,align:d,alignOffset:f,arrowPadding:p,collisionBoundary:v,collisionPadding:x,sticky:C,hideWhenDetached:m,avoidCollisions:h}:{};return l.jsx(ur,{scope:t,content:y,viewport:T,onViewportChange:A,itemRefCallback:ne,selectedItem:I,onItemLeave:ce,itemTextRefCallback:J,focusSelectedItem:G,selectedItemText:L,position:o,isPositioned:U,searchRef:Z,children:l.jsx(Et,{as:cc,allowPinchZoom:!0,children:l.jsx(We,{asChild:!0,trapped:g.open,onMountAutoFocus:b=>{b.preventDefault()},onUnmountAutoFocus:E(r,b=>{g.trigger?.focus({preventScroll:!0}),b.preventDefault()}),children:l.jsx(De,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:a,onPointerDownOutside:i,onFocusOutside:b=>b.preventDefault(),onDismiss:()=>g.onOpenChange(!1),children:l.jsx(le,{role:"listbox",id:g.contentId,"data-state":g.open?"open":"closed",dir:g.dir,onContextMenu:b=>b.preventDefault(),...w,...q,onPlaced:()=>W(!0),ref:P,style:{display:"flex",flexDirection:"column",outline:"none",...w.style},onKeyDown:E(w.onKeyDown,b=>{const D=b.ctrlKey||b.altKey||b.metaKey;if(b.key==="Tab"&&b.preventDefault(),!D&&b.key.length===1&&z(b.key),["ArrowUp","ArrowDown","Home","End"].includes(b.key)){let O=H().filter(j=>!j.disabled).map(j=>j.ref.current);if(["ArrowUp","End"].includes(b.key)&&(O=O.slice().reverse()),["ArrowUp","ArrowDown"].includes(b.key)){const j=b.target,$=O.indexOf(j);O=O.slice($+1)}setTimeout(()=>N(O)),b.preventDefault()}})})})})})})});dr.displayName=ic;var lc="SelectItemAlignedPosition",fr=s.forwardRef((e,n)=>{const{__scopeSelect:t,onPlaced:o,...r}=e,a=me(ye,t),i=ve(ye,t),[c,u]=s.useState(null),[d,f]=s.useState(null),p=M(n,P=>f(P)),v=et(t),x=s.useRef(!1),C=s.useRef(!0),{viewport:m,selectedItem:h,selectedItemText:w,focusSelectedItem:g}=i,y=s.useCallback(()=>{if(a.trigger&&a.valueNode&&c&&d&&m&&h&&w){const P=a.trigger.getBoundingClientRect(),I=d.getBoundingClientRect(),F=a.valueNode.getBoundingClientRect(),L=w.getBoundingClientRect();if(a.dir!=="rtl"){const j=L.left-I.left,$=F.left-j,Q=P.left-$,he=P.width+Q,ot=Math.max(he,I.width),rt=window.innerWidth-oe,st=sn($,[oe,Math.max(oe,rt-ot)]);c.style.minWidth=he+"px",c.style.left=st+"px"}else{const j=I.right-L.right,$=window.innerWidth-F.right-j,Q=window.innerWidth-P.right-$,he=P.width+Q,ot=Math.max(he,I.width),rt=window.innerWidth-oe,st=sn($,[oe,Math.max(oe,rt-ot)]);c.style.minWidth=he+"px",c.style.right=st+"px"}const B=v(),H=window.innerHeight-oe*2,U=m.scrollHeight,W=window.getComputedStyle(d),V=parseInt(W.borderTopWidth,10),N=parseInt(W.paddingTop,10),G=parseInt(W.borderBottomWidth,10),k=parseInt(W.paddingBottom,10),R=V+N+U+k+G,Z=Math.min(h.offsetHeight*5,R),z=window.getComputedStyle(m),ne=parseInt(z.paddingTop,10),ce=parseInt(z.paddingBottom,10),J=P.top+P.height/2-oe,le=H-J,q=h.offsetHeight/2,b=h.offsetTop+q,D=V+N+b,Y=R-D;if(D<=J){const j=B.length>0&&h===B[B.length-1].ref.current;c.style.bottom="0px";const $=d.clientHeight-m.offsetTop-m.offsetHeight,Q=Math.max(le,q+(j?ce:0)+$+G),he=D+Q;c.style.height=he+"px"}else{const j=B.length>0&&h===B[0].ref.current;c.style.top="0px";const Q=Math.max(J,V+m.offsetTop+(j?ne:0)+q)+Y;c.style.height=Q+"px",m.scrollTop=D-J+m.offsetTop}c.style.margin=`${oe}px 0`,c.style.minHeight=Z+"px",c.style.maxHeight=H+"px",o?.(),requestAnimationFrame(()=>x.current=!0)}},[v,a.trigger,a.valueNode,c,d,m,h,w,a.dir,o]);K(()=>y(),[y]);const[S,T]=s.useState();K(()=>{d&&T(window.getComputedStyle(d).zIndex)},[d]);const A=s.useCallback(P=>{P&&C.current===!0&&(y(),g?.(),C.current=!1)},[y,g]);return l.jsx(dc,{scope:t,contentWrapper:c,shouldExpandOnScrollRef:x,onScrollButtonChange:A,children:l.jsx("div",{ref:u,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:S},children:l.jsx(_.div,{...r,ref:p,style:{boxSizing:"border-box",maxHeight:"100%",...r.style}})})})});fr.displayName=lc;var uc="SelectPopperPosition",vt=s.forwardRef((e,n)=>{const{__scopeSelect:t,align:o="start",collisionPadding:r=oe,...a}=e,i=tt(t);return l.jsx(At,{...i,...a,ref:n,align:o,collisionPadding:r,style:{boxSizing:"border-box",...a.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});vt.displayName=uc;var[dc,zt]=_e(ye,{}),ht="SelectViewport",pr=s.forwardRef((e,n)=>{const{__scopeSelect:t,nonce:o,...r}=e,a=ve(ht,t),i=zt(ht,t),c=M(n,a.onViewportChange),u=s.useRef(0);return l.jsxs(l.Fragment,{children:[l.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:o}),l.jsx(Qe.Slot,{scope:t,children:l.jsx(_.div,{"data-radix-select-viewport":"",role:"presentation",...r,ref:c,style:{position:"relative",flex:1,overflow:"hidden auto",...r.style},onScroll:E(r.onScroll,d=>{const f=d.currentTarget,{contentWrapper:p,shouldExpandOnScrollRef:v}=i;if(v?.current&&p){const x=Math.abs(u.current-f.scrollTop);if(x>0){const C=window.innerHeight-oe*2,m=parseFloat(p.style.minHeight),h=parseFloat(p.style.height),w=Math.max(m,h);if(w0?S:0,p.style.justifyContent="flex-end")}}}u.current=f.scrollTop})})})]})});pr.displayName=ht;var mr="SelectGroup",[fc,pc]=_e(mr),mc=s.forwardRef((e,n)=>{const{__scopeSelect:t,...o}=e,r=re();return l.jsx(fc,{scope:t,id:r,children:l.jsx(_.div,{role:"group","aria-labelledby":r,...o,ref:n})})});mc.displayName=mr;var vr="SelectLabel",vc=s.forwardRef((e,n)=>{const{__scopeSelect:t,...o}=e,r=pc(vr,t);return l.jsx(_.div,{id:r.id,...o,ref:n})});vc.displayName=vr;var Ge="SelectItem",[hc,hr]=_e(Ge),gr=s.forwardRef((e,n)=>{const{__scopeSelect:t,value:o,disabled:r=!1,textValue:a,...i}=e,c=me(Ge,t),u=ve(Ge,t),d=c.value===o,[f,p]=s.useState(a??""),[v,x]=s.useState(!1),C=M(n,g=>u.itemRefCallback?.(g,o,r)),m=re(),h=s.useRef("touch"),w=()=>{r||(c.onValueChange(o),c.onOpenChange(!1))};if(o==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return l.jsx(hc,{scope:t,value:o,disabled:r,textId:m,isSelected:d,onItemTextChange:s.useCallback(g=>{p(y=>y||(g?.textContent??"").trim())},[]),children:l.jsx(Qe.ItemSlot,{scope:t,value:o,disabled:r,textValue:f,children:l.jsx(_.div,{role:"option","aria-labelledby":m,"data-highlighted":v?"":void 0,"aria-selected":d&&v,"data-state":d?"checked":"unchecked","aria-disabled":r||void 0,"data-disabled":r?"":void 0,tabIndex:r?void 0:-1,...i,ref:C,onFocus:E(i.onFocus,()=>x(!0)),onBlur:E(i.onBlur,()=>x(!1)),onClick:E(i.onClick,()=>{h.current!=="mouse"&&w()}),onPointerUp:E(i.onPointerUp,()=>{h.current==="mouse"&&w()}),onPointerDown:E(i.onPointerDown,g=>{h.current=g.pointerType}),onPointerMove:E(i.onPointerMove,g=>{h.current=g.pointerType,r?u.onItemLeave?.():h.current==="mouse"&&g.currentTarget.focus({preventScroll:!0})}),onPointerLeave:E(i.onPointerLeave,g=>{g.currentTarget===document.activeElement&&u.onItemLeave?.()}),onKeyDown:E(i.onKeyDown,g=>{u.searchRef?.current!==""&&g.key===" "||(ec.includes(g.key)&&w(),g.key===" "&&g.preventDefault())})})})})});gr.displayName=Ge;var Ie="SelectItemText",xr=s.forwardRef((e,n)=>{const{__scopeSelect:t,className:o,style:r,...a}=e,i=me(Ie,t),c=ve(Ie,t),u=hr(Ie,t),d=rc(Ie,t),[f,p]=s.useState(null),v=M(n,w=>p(w),u.onItemTextChange,w=>c.itemTextRefCallback?.(w,u.value,u.disabled)),x=f?.textContent,C=s.useMemo(()=>l.jsx("option",{value:u.value,disabled:u.disabled,children:x},u.value),[u.disabled,u.value,x]),{onNativeOptionAdd:m,onNativeOptionRemove:h}=d;return K(()=>(m(C),()=>h(C)),[m,h,C]),l.jsxs(l.Fragment,{children:[l.jsx(_.span,{id:u.textId,...a,ref:v}),u.isSelected&&i.valueNode&&!i.valueNodeHasChildren?wt.createPortal(a.children,i.valueNode):null]})});xr.displayName=Ie;var Cr="SelectItemIndicator",wr=s.forwardRef((e,n)=>{const{__scopeSelect:t,...o}=e;return hr(Cr,t).isSelected?l.jsx(_.span,{"aria-hidden":!0,...o,ref:n}):null});wr.displayName=Cr;var gt="SelectScrollUpButton",yr=s.forwardRef((e,n)=>{const t=ve(gt,e.__scopeSelect),o=zt(gt,e.__scopeSelect),[r,a]=s.useState(!1),i=M(n,o.onScrollButtonChange);return K(()=>{if(t.viewport&&t.isPositioned){let c=function(){const d=u.scrollTop>0;a(d)};const u=t.viewport;return c(),u.addEventListener("scroll",c),()=>u.removeEventListener("scroll",c)}},[t.viewport,t.isPositioned]),r?l.jsx(br,{...e,ref:i,onAutoScroll:()=>{const{viewport:c,selectedItem:u}=t;c&&u&&(c.scrollTop=c.scrollTop-u.offsetHeight)}}):null});yr.displayName=gt;var xt="SelectScrollDownButton",Er=s.forwardRef((e,n)=>{const t=ve(xt,e.__scopeSelect),o=zt(xt,e.__scopeSelect),[r,a]=s.useState(!1),i=M(n,o.onScrollButtonChange);return K(()=>{if(t.viewport&&t.isPositioned){let c=function(){const d=u.scrollHeight-u.clientHeight,f=Math.ceil(u.scrollTop)u.removeEventListener("scroll",c)}},[t.viewport,t.isPositioned]),r?l.jsx(br,{...e,ref:i,onAutoScroll:()=>{const{viewport:c,selectedItem:u}=t;c&&u&&(c.scrollTop=c.scrollTop+u.offsetHeight)}}):null});Er.displayName=xt;var br=s.forwardRef((e,n)=>{const{__scopeSelect:t,onAutoScroll:o,...r}=e,a=ve("SelectScrollButton",t),i=s.useRef(null),c=et(t),u=s.useCallback(()=>{i.current!==null&&(window.clearInterval(i.current),i.current=null)},[]);return s.useEffect(()=>()=>u(),[u]),K(()=>{c().find(f=>f.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:"nearest"})},[c]),l.jsx(_.div,{"aria-hidden":!0,...r,ref:n,style:{flexShrink:0,...r.style},onPointerDown:E(r.onPointerDown,()=>{i.current===null&&(i.current=window.setInterval(o,50))}),onPointerMove:E(r.onPointerMove,()=>{a.onItemLeave?.(),i.current===null&&(i.current=window.setInterval(o,50))}),onPointerLeave:E(r.onPointerLeave,()=>{u()})})}),gc="SelectSeparator",xc=s.forwardRef((e,n)=>{const{__scopeSelect:t,...o}=e;return l.jsx(_.div,{"aria-hidden":!0,...o,ref:n})});xc.displayName=gc;var Ct="SelectArrow",Cc=s.forwardRef((e,n)=>{const{__scopeSelect:t,...o}=e,r=tt(t),a=me(Ct,t),i=ve(Ct,t);return a.open&&i.position==="popper"?l.jsx(Nt,{...r,...o,ref:n}):null});Cc.displayName=Ct;var wc="SelectBubbleInput",Sr=s.forwardRef(({__scopeSelect:e,value:n,...t},o)=>{const r=s.useRef(null),a=M(o,r),i=tr(n);return s.useEffect(()=>{const c=r.current;if(!c)return;const u=window.HTMLSelectElement.prototype,f=Object.getOwnPropertyDescriptor(u,"value").set;if(i!==n&&f){const p=new Event("change",{bubbles:!0});f.call(c,n),c.dispatchEvent(p)}},[i,n]),l.jsx(_.select,{...t,style:{...Kn,...t.style},ref:a,defaultValue:n})});Sr.displayName=wc;function Rr(e){return e===""||e===void 0}function Pr(e){const n=ie(e),t=s.useRef(""),o=s.useRef(0),r=s.useCallback(i=>{const c=t.current+i;n(c),(function u(d){t.current=d,window.clearTimeout(o.current),d!==""&&(o.current=window.setTimeout(()=>u(""),1e3))})(c)},[n]),a=s.useCallback(()=>{t.current="",window.clearTimeout(o.current)},[]);return s.useEffect(()=>()=>window.clearTimeout(o.current),[]),[t,r,a]}function _r(e,n,t){const r=n.length>1&&Array.from(n).every(d=>d===n[0])?n[0]:n,a=t?e.indexOf(t):-1;let i=yc(e,Math.max(a,0));r.length===1&&(i=i.filter(d=>d!==t));const u=i.find(d=>d.textValue.toLowerCase().startsWith(r.toLowerCase()));return u!==t?u:void 0}function yc(e,n){return e.map((t,o)=>e[(n+o)%e.length])}var sl=nr,al=rr,il=ar,cl=ir,ll=cr,ul=lr,dl=pr,fl=gr,pl=xr,ml=wr,vl=yr,hl=Er,nt="Checkbox",[Ec,gl]=se(nt),[bc,Yt]=Ec(nt);function Sc(e){const{__scopeCheckbox:n,checked:t,children:o,defaultChecked:r,disabled:a,form:i,name:c,onCheckedChange:u,required:d,value:f="on",internal_do_not_use_render:p}=e,[v,x]=pe({prop:t,defaultProp:r??!1,onChange:u,caller:nt}),[C,m]=s.useState(null),[h,w]=s.useState(null),g=s.useRef(!1),y=C?!!i||!!C.closest("form"):!0,S={checked:v,disabled:a,setChecked:x,control:C,setControl:m,name:c,form:i,value:f,hasConsumerStoppedPropagationRef:g,required:d,defaultChecked:fe(r)?!1:r,isFormControl:y,bubbleInput:h,setBubbleInput:w};return l.jsx(bc,{scope:n,...S,children:_c(p)?p(S):o})}var Tr="CheckboxTrigger",Ir=s.forwardRef(({__scopeCheckbox:e,onKeyDown:n,onClick:t,...o},r)=>{const{control:a,value:i,disabled:c,checked:u,required:d,setControl:f,setChecked:p,hasConsumerStoppedPropagationRef:v,isFormControl:x,bubbleInput:C}=Yt(Tr,e),m=M(r,f),h=s.useRef(u);return s.useEffect(()=>{const w=a?.form;if(w){const g=()=>p(h.current);return w.addEventListener("reset",g),()=>w.removeEventListener("reset",g)}},[a,p]),l.jsx(_.button,{type:"button",role:"checkbox","aria-checked":fe(u)?"mixed":u,"aria-required":d,"data-state":Dr(u),"data-disabled":c?"":void 0,disabled:c,value:i,...o,ref:m,onKeyDown:E(n,w=>{w.key==="Enter"&&w.preventDefault()}),onClick:E(t,w=>{p(g=>fe(g)?!0:!g),C&&x&&(v.current=w.isPropagationStopped(),v.current||w.stopPropagation())})})});Ir.displayName=Tr;var Rc=s.forwardRef((e,n)=>{const{__scopeCheckbox:t,name:o,checked:r,defaultChecked:a,required:i,disabled:c,value:u,onCheckedChange:d,form:f,...p}=e;return l.jsx(Sc,{__scopeCheckbox:t,checked:r,defaultChecked:a,disabled:c,required:i,onCheckedChange:d,name:o,form:f,value:u,internal_do_not_use_render:({isFormControl:v})=>l.jsxs(l.Fragment,{children:[l.jsx(Ir,{...p,ref:n,__scopeCheckbox:t}),v&&l.jsx(Nr,{__scopeCheckbox:t})]})})});Rc.displayName=nt;var Mr="CheckboxIndicator",Pc=s.forwardRef((e,n)=>{const{__scopeCheckbox:t,forceMount:o,...r}=e,a=Yt(Mr,t);return l.jsx(te,{present:o||fe(a.checked)||a.checked===!0,children:l.jsx(_.span,{"data-state":Dr(a.checked),"data-disabled":a.disabled?"":void 0,...r,ref:n,style:{pointerEvents:"none",...e.style}})})});Pc.displayName=Mr;var Ar="CheckboxBubbleInput",Nr=s.forwardRef(({__scopeCheckbox:e,...n},t)=>{const{control:o,hasConsumerStoppedPropagationRef:r,checked:a,defaultChecked:i,required:c,disabled:u,name:d,value:f,form:p,bubbleInput:v,setBubbleInput:x}=Yt(Ar,e),C=M(t,x),m=tr(a),h=On(o);s.useEffect(()=>{const g=v;if(!g)return;const y=window.HTMLInputElement.prototype,T=Object.getOwnPropertyDescriptor(y,"checked").set,A=!r.current;if(m!==a&&T){const P=new Event("click",{bubbles:A});g.indeterminate=fe(a),T.call(g,fe(a)?!1:a),g.dispatchEvent(P)}},[v,m,a,r]);const w=s.useRef(fe(a)?!1:a);return l.jsx(_.input,{type:"checkbox","aria-hidden":!0,defaultChecked:i??w.current,required:c,disabled:u,name:d,value:f,form:p,...n,tabIndex:-1,ref:C,style:{...n.style,...h,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});Nr.displayName=Ar;function _c(e){return typeof e=="function"}function fe(e){return e==="indeterminate"}function Dr(e){return fe(e)?"indeterminate":e?"checked":"unchecked"}export{Lc as A,al as B,Fs as C,Bs as D,cl as E,ll as F,ul as G,dl as H,Vc as I,fl as J,ml as K,pl as L,vl as M,hl as N,Ls as O,ks as P,Rc as Q,Mc as R,Ic as S,$s as T,Pc as U,il as V,Os as a,Nn as b,Nc as c,Dc as d,Oc as e,jc as f,kc as g,$c as h,ma as i,va as j,Hc as k,Gc as l,Kc as m,Wc as n,Yc as o,Xc as p,Jc as q,tl as r,nl as s,el as t,Qc as u,qc as v,Zc as w,js as x,ol as y,sl as z}; diff --git a/internal/ui/dist/assets/router-CcA--AgE.js b/internal/ui/dist/assets/router-CQ4G2GmP.js similarity index 99% rename from internal/ui/dist/assets/router-CcA--AgE.js rename to internal/ui/dist/assets/router-CQ4G2GmP.js index e8596db..a8f45c4 100644 --- a/internal/ui/dist/assets/router-CcA--AgE.js +++ b/internal/ui/dist/assets/router-CQ4G2GmP.js @@ -1,4 +1,4 @@ -import{r as i}from"./vendor-D1z0LlOQ.js";function Zt(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}/** +import{r as i}from"./vendor-DBKlM1wc.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-D1z0LlOQ.js b/internal/ui/dist/assets/vendor-DBKlM1wc.js similarity index 83% rename from internal/ui/dist/assets/vendor-D1z0LlOQ.js rename to internal/ui/dist/assets/vendor-DBKlM1wc.js index c3f2447..ad16787 100644 --- a/internal/ui/dist/assets/vendor-D1z0LlOQ.js +++ b/internal/ui/dist/assets/vendor-DBKlM1wc.js @@ -1,4 +1,4 @@ -import{g as Av}from"./router-CcA--AgE.js";function q0(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-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={};/** * @license React * react-jsx-runtime.production.js * @@ -6,7 +6,7 @@ import{g as Av}from"./router-CcA--AgE.js";function q0(n,l){for(var i=0;i"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(l){console.error(l)}}return n(),Rc.exports=$0(),Rc.exports}var Tv=zv();const K0=Av(Tv);function Ov(n){var l,i,u="";if(typeof n=="string"||typeof n=="number")u+=n;else if(typeof n=="object")if(Array.isArray(n)){var c=n.length;for(l=0;ltypeof n=="boolean"?`${n}`:n===0?"0":n,bg=J0,x2=(n,l)=>i=>{var u;if(l?.variants==null)return bg(n,i?.class,i?.className);const{variants:c,defaultVariants:f}=l,d=Object.keys(c).map(v=>{const b=i?.[v],y=f?.[v];if(b===null)return null;const x=pg(b)||pg(y);return c[v][x]}),m=i&&Object.entries(i).reduce((v,b)=>{let[y,x]=b;return x===void 0||(v[y]=x),v},{}),p=l==null||(u=l.compoundVariants)===null||u===void 0?void 0:u.reduce((v,b)=>{let{class:y,className:x,...T}=b;return Object.entries(T).every(k=>{let[C,B]=k;return Array.isArray(B)?B.includes({...f,...m}[C]):{...f,...m}[C]===B})?[...v,y,x]:v},[]);return bg(n,d,p,i?.class,i?.className)},af="-",F0=n=>{const l=P0(n),{conflictingClassGroups:i,conflictingClassGroupModifiers:u}=n;return{getClassGroupId:d=>{const m=d.split(af);return m[0]===""&&m.length!==1&&m.shift(),Rv(m,l)||W0(d)},getConflictingClassGroupIds:(d,m)=>{const p=i[d]||[];return m&&u[d]?[...p,...u[d]]:p}}},Rv=(n,l)=>{if(n.length===0)return l.classGroupId;const i=n[0],u=l.nextPart.get(i),c=u?Rv(n.slice(1),u):void 0;if(c)return c;if(l.validators.length===0)return;const f=n.join(af);return l.validators.find(({validator:d})=>d(f))?.classGroupId},Sg=/^\[(.+)\]$/,W0=n=>{if(Sg.test(n)){const l=Sg.exec(n)[1],i=l?.substring(0,l.indexOf(":"));if(i)return"arbitrary.."+i}},P0=n=>{const{theme:l,classGroups:i}=n,u={nextPart:new Map,validators:[]};for(const c in i)qc(i[c],u,c,l);return u},qc=(n,l,i,u)=>{n.forEach(c=>{if(typeof c=="string"){const f=c===""?l:_g(l,c);f.classGroupId=i;return}if(typeof c=="function"){if(I0(c)){qc(c(u),l,i,u);return}l.validators.push({validator:c,classGroupId:i});return}Object.entries(c).forEach(([f,d])=>{qc(d,_g(l,f),i,u)})})},_g=(n,l)=>{let i=n;return l.split(af).forEach(u=>{i.nextPart.has(u)||i.nextPart.set(u,{nextPart:new Map,validators:[]}),i=i.nextPart.get(u)}),i},I0=n=>n.isThemeGetter,tb=n=>{if(n<1)return{get:()=>{},set:()=>{}};let l=0,i=new Map,u=new Map;const c=(f,d)=>{i.set(f,d),l++,l>n&&(l=0,u=i,i=new Map)};return{get(f){let d=i.get(f);if(d!==void 0)return d;if((d=u.get(f))!==void 0)return c(f,d),d},set(f,d){i.has(f)?i.set(f,d):c(f,d)}}},Gc="!",Xc=":",eb=Xc.length,nb=n=>{const{prefix:l,experimentalParseClassName:i}=n;let u=c=>{const f=[];let d=0,m=0,p=0,v;for(let k=0;kp?v-p:void 0;return{modifiers:f,hasImportantModifier:x,baseClassName:y,maybePostfixModifierPosition:T}};if(l){const c=l+Xc,f=u;u=d=>d.startsWith(c)?f(d.substring(c.length)):{isExternal:!0,modifiers:[],hasImportantModifier:!1,baseClassName:d,maybePostfixModifierPosition:void 0}}if(i){const c=u;u=f=>i({className:f,parseClassName:c})}return u},ab=n=>n.endsWith(Gc)?n.substring(0,n.length-1):n.startsWith(Gc)?n.substring(1):n,lb=n=>{const l=Object.fromEntries(n.orderSensitiveModifiers.map(u=>[u,!0]));return u=>{if(u.length<=1)return u;const c=[];let f=[];return u.forEach(d=>{d[0]==="["||l[d]?(c.push(...f.sort(),d),f=[]):f.push(d)}),c.push(...f.sort()),c}},rb=n=>({cache:tb(n.cacheSize),parseClassName:nb(n),sortModifiers:lb(n),...F0(n)}),ib=/\s+/,ub=(n,l)=>{const{parseClassName:i,getClassGroupId:u,getConflictingClassGroupIds:c,sortModifiers:f}=l,d=[],m=n.trim().split(ib);let p="";for(let v=m.length-1;v>=0;v-=1){const b=m[v],{isExternal:y,modifiers:x,hasImportantModifier:T,baseClassName:k,maybePostfixModifierPosition:C}=i(b);if(y){p=b+(p.length>0?" "+p:p);continue}let B=!!C,X=u(B?k.substring(0,C):k);if(!X){if(!B){p=b+(p.length>0?" "+p:p);continue}if(X=u(k),!X){p=b+(p.length>0?" "+p:p);continue}B=!1}const H=f(x).join(":"),K=T?H+Gc:H,F=K+X;if(d.includes(F))continue;d.push(F);const Z=c(X,B);for(let tt=0;tt0?" "+p:p)}return p};function ob(){let n=0,l,i,u="";for(;n{if(typeof n=="string")return n;let l,i="";for(let u=0;uy(b),n());return i=rb(v),u=i.cache.get,c=i.cache.set,f=m,m(p)}function m(p){const v=u(p);if(v)return v;const b=ub(p,i);return c(p,b),b}return function(){return f(ob.apply(null,arguments))}}const be=n=>{const l=i=>i[n]||[];return l.isThemeGetter=!0,l},Mv=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Cv=/^\((?:(\w[\w-]*):)?(.+)\)$/i,cb=/^\d+\/\d+$/,fb=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,db=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,hb=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,mb=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,gb=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Fl=n=>cb.test(n),Ct=n=>!!n&&!Number.isNaN(Number(n)),Na=n=>!!n&&Number.isInteger(Number(n)),Dc=n=>n.endsWith("%")&&Ct(n.slice(0,-1)),ra=n=>fb.test(n),vb=()=>!0,yb=n=>db.test(n)&&!hb.test(n),kv=()=>!1,pb=n=>mb.test(n),bb=n=>gb.test(n),Sb=n=>!ft(n)&&!dt(n),_b=n=>ur(n,Zv,kv),ft=n=>Mv.test(n),ll=n=>ur(n,Vv,yb),Mc=n=>ur(n,zb,Ct),wg=n=>ur(n,Nv,kv),wb=n=>ur(n,Uv,bb),Nu=n=>ur(n,Bv,pb),dt=n=>Cv.test(n),si=n=>or(n,Vv),xb=n=>or(n,Tb),xg=n=>or(n,Nv),Eb=n=>or(n,Zv),Ab=n=>or(n,Uv),Uu=n=>or(n,Bv,!0),ur=(n,l,i)=>{const u=Mv.exec(n);return u?u[1]?l(u[1]):i(u[2]):!1},or=(n,l,i=!1)=>{const u=Cv.exec(n);return u?u[1]?l(u[1]):i:!1},Nv=n=>n==="position"||n==="percentage",Uv=n=>n==="image"||n==="url",Zv=n=>n==="length"||n==="size"||n==="bg-size",Vv=n=>n==="length",zb=n=>n==="number",Tb=n=>n==="family-name",Bv=n=>n==="shadow",Ob=()=>{const n=be("color"),l=be("font"),i=be("text"),u=be("font-weight"),c=be("tracking"),f=be("leading"),d=be("breakpoint"),m=be("container"),p=be("spacing"),v=be("radius"),b=be("shadow"),y=be("inset-shadow"),x=be("text-shadow"),T=be("drop-shadow"),k=be("blur"),C=be("perspective"),B=be("aspect"),X=be("ease"),H=be("animate"),K=()=>["auto","avoid","all","avoid-page","page","left","right","column"],F=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],Z=()=>[...F(),dt,ft],tt=()=>["auto","hidden","clip","visible","scroll"],ut=()=>["auto","contain","none"],W=()=>[dt,ft,p],vt=()=>[Fl,"full","auto",...W()],Rt=()=>[Na,"none","subgrid",dt,ft],Et=()=>["auto",{span:["full",Na,dt,ft]},Na,dt,ft],lt=()=>[Na,"auto",dt,ft],ot=()=>["auto","min","max","fr",dt,ft],yt=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],bt=()=>["start","end","center","stretch","center-safe","end-safe"],A=()=>["auto",...W()],L=()=>[Fl,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...W()],U=()=>[n,dt,ft],gt=()=>[...F(),xg,wg,{position:[dt,ft]}],_=()=>["no-repeat",{repeat:["","x","y","space","round"]}],Q=()=>["auto","cover","contain",Eb,_b,{size:[dt,ft]}],at=()=>[Dc,si,ll],j=()=>["","none","full",v,dt,ft],P=()=>["",Ct,si,ll],ht=()=>["solid","dashed","dotted","double"],mt=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],Ot=()=>[Ct,Dc,xg,wg],St=()=>["","none",k,dt,ft],Wt=()=>["none",Ct,dt,ft],Re=()=>["none",Ct,dt,ft],Ze=()=>[Ct,dt,ft],we=()=>[Fl,"full",...W()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[ra],breakpoint:[ra],color:[vb],container:[ra],"drop-shadow":[ra],ease:["in","out","in-out"],font:[Sb],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[ra],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[ra],shadow:[ra],spacing:["px",Ct],text:[ra],"text-shadow":[ra],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",Fl,ft,dt,B]}],container:["container"],columns:[{columns:[Ct,ft,dt,m]}],"break-after":[{"break-after":K()}],"break-before":[{"break-before":K()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:Z()}],overflow:[{overflow:tt()}],"overflow-x":[{"overflow-x":tt()}],"overflow-y":[{"overflow-y":tt()}],overscroll:[{overscroll:ut()}],"overscroll-x":[{"overscroll-x":ut()}],"overscroll-y":[{"overscroll-y":ut()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:vt()}],"inset-x":[{"inset-x":vt()}],"inset-y":[{"inset-y":vt()}],start:[{start:vt()}],end:[{end:vt()}],top:[{top:vt()}],right:[{right:vt()}],bottom:[{bottom:vt()}],left:[{left:vt()}],visibility:["visible","invisible","collapse"],z:[{z:[Na,"auto",dt,ft]}],basis:[{basis:[Fl,"full","auto",m,...W()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[Ct,Fl,"auto","initial","none",ft]}],grow:[{grow:["",Ct,dt,ft]}],shrink:[{shrink:["",Ct,dt,ft]}],order:[{order:[Na,"first","last","none",dt,ft]}],"grid-cols":[{"grid-cols":Rt()}],"col-start-end":[{col:Et()}],"col-start":[{"col-start":lt()}],"col-end":[{"col-end":lt()}],"grid-rows":[{"grid-rows":Rt()}],"row-start-end":[{row:Et()}],"row-start":[{"row-start":lt()}],"row-end":[{"row-end":lt()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":ot()}],"auto-rows":[{"auto-rows":ot()}],gap:[{gap:W()}],"gap-x":[{"gap-x":W()}],"gap-y":[{"gap-y":W()}],"justify-content":[{justify:[...yt(),"normal"]}],"justify-items":[{"justify-items":[...bt(),"normal"]}],"justify-self":[{"justify-self":["auto",...bt()]}],"align-content":[{content:["normal",...yt()]}],"align-items":[{items:[...bt(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...bt(),{baseline:["","last"]}]}],"place-content":[{"place-content":yt()}],"place-items":[{"place-items":[...bt(),"baseline"]}],"place-self":[{"place-self":["auto",...bt()]}],p:[{p:W()}],px:[{px:W()}],py:[{py:W()}],ps:[{ps:W()}],pe:[{pe:W()}],pt:[{pt:W()}],pr:[{pr:W()}],pb:[{pb:W()}],pl:[{pl:W()}],m:[{m:A()}],mx:[{mx:A()}],my:[{my:A()}],ms:[{ms:A()}],me:[{me:A()}],mt:[{mt:A()}],mr:[{mr:A()}],mb:[{mb:A()}],ml:[{ml:A()}],"space-x":[{"space-x":W()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":W()}],"space-y-reverse":["space-y-reverse"],size:[{size:L()}],w:[{w:[m,"screen",...L()]}],"min-w":[{"min-w":[m,"screen","none",...L()]}],"max-w":[{"max-w":[m,"screen","none","prose",{screen:[d]},...L()]}],h:[{h:["screen","lh",...L()]}],"min-h":[{"min-h":["screen","lh","none",...L()]}],"max-h":[{"max-h":["screen","lh",...L()]}],"font-size":[{text:["base",i,si,ll]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[u,dt,Mc]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Dc,ft]}],"font-family":[{font:[xb,ft,l]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[c,dt,ft]}],"line-clamp":[{"line-clamp":[Ct,"none",dt,Mc]}],leading:[{leading:[f,...W()]}],"list-image":[{"list-image":["none",dt,ft]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",dt,ft]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:U()}],"text-color":[{text:U()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...ht(),"wavy"]}],"text-decoration-thickness":[{decoration:[Ct,"from-font","auto",dt,ll]}],"text-decoration-color":[{decoration:U()}],"underline-offset":[{"underline-offset":[Ct,"auto",dt,ft]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:W()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",dt,ft]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",dt,ft]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:gt()}],"bg-repeat":[{bg:_()}],"bg-size":[{bg:Q()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Na,dt,ft],radial:["",dt,ft],conic:[Na,dt,ft]},Ab,wb]}],"bg-color":[{bg:U()}],"gradient-from-pos":[{from:at()}],"gradient-via-pos":[{via:at()}],"gradient-to-pos":[{to:at()}],"gradient-from":[{from:U()}],"gradient-via":[{via:U()}],"gradient-to":[{to:U()}],rounded:[{rounded:j()}],"rounded-s":[{"rounded-s":j()}],"rounded-e":[{"rounded-e":j()}],"rounded-t":[{"rounded-t":j()}],"rounded-r":[{"rounded-r":j()}],"rounded-b":[{"rounded-b":j()}],"rounded-l":[{"rounded-l":j()}],"rounded-ss":[{"rounded-ss":j()}],"rounded-se":[{"rounded-se":j()}],"rounded-ee":[{"rounded-ee":j()}],"rounded-es":[{"rounded-es":j()}],"rounded-tl":[{"rounded-tl":j()}],"rounded-tr":[{"rounded-tr":j()}],"rounded-br":[{"rounded-br":j()}],"rounded-bl":[{"rounded-bl":j()}],"border-w":[{border:P()}],"border-w-x":[{"border-x":P()}],"border-w-y":[{"border-y":P()}],"border-w-s":[{"border-s":P()}],"border-w-e":[{"border-e":P()}],"border-w-t":[{"border-t":P()}],"border-w-r":[{"border-r":P()}],"border-w-b":[{"border-b":P()}],"border-w-l":[{"border-l":P()}],"divide-x":[{"divide-x":P()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":P()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...ht(),"hidden","none"]}],"divide-style":[{divide:[...ht(),"hidden","none"]}],"border-color":[{border:U()}],"border-color-x":[{"border-x":U()}],"border-color-y":[{"border-y":U()}],"border-color-s":[{"border-s":U()}],"border-color-e":[{"border-e":U()}],"border-color-t":[{"border-t":U()}],"border-color-r":[{"border-r":U()}],"border-color-b":[{"border-b":U()}],"border-color-l":[{"border-l":U()}],"divide-color":[{divide:U()}],"outline-style":[{outline:[...ht(),"none","hidden"]}],"outline-offset":[{"outline-offset":[Ct,dt,ft]}],"outline-w":[{outline:["",Ct,si,ll]}],"outline-color":[{outline:U()}],shadow:[{shadow:["","none",b,Uu,Nu]}],"shadow-color":[{shadow:U()}],"inset-shadow":[{"inset-shadow":["none",y,Uu,Nu]}],"inset-shadow-color":[{"inset-shadow":U()}],"ring-w":[{ring:P()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:U()}],"ring-offset-w":[{"ring-offset":[Ct,ll]}],"ring-offset-color":[{"ring-offset":U()}],"inset-ring-w":[{"inset-ring":P()}],"inset-ring-color":[{"inset-ring":U()}],"text-shadow":[{"text-shadow":["none",x,Uu,Nu]}],"text-shadow-color":[{"text-shadow":U()}],opacity:[{opacity:[Ct,dt,ft]}],"mix-blend":[{"mix-blend":[...mt(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":mt()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[Ct]}],"mask-image-linear-from-pos":[{"mask-linear-from":Ot()}],"mask-image-linear-to-pos":[{"mask-linear-to":Ot()}],"mask-image-linear-from-color":[{"mask-linear-from":U()}],"mask-image-linear-to-color":[{"mask-linear-to":U()}],"mask-image-t-from-pos":[{"mask-t-from":Ot()}],"mask-image-t-to-pos":[{"mask-t-to":Ot()}],"mask-image-t-from-color":[{"mask-t-from":U()}],"mask-image-t-to-color":[{"mask-t-to":U()}],"mask-image-r-from-pos":[{"mask-r-from":Ot()}],"mask-image-r-to-pos":[{"mask-r-to":Ot()}],"mask-image-r-from-color":[{"mask-r-from":U()}],"mask-image-r-to-color":[{"mask-r-to":U()}],"mask-image-b-from-pos":[{"mask-b-from":Ot()}],"mask-image-b-to-pos":[{"mask-b-to":Ot()}],"mask-image-b-from-color":[{"mask-b-from":U()}],"mask-image-b-to-color":[{"mask-b-to":U()}],"mask-image-l-from-pos":[{"mask-l-from":Ot()}],"mask-image-l-to-pos":[{"mask-l-to":Ot()}],"mask-image-l-from-color":[{"mask-l-from":U()}],"mask-image-l-to-color":[{"mask-l-to":U()}],"mask-image-x-from-pos":[{"mask-x-from":Ot()}],"mask-image-x-to-pos":[{"mask-x-to":Ot()}],"mask-image-x-from-color":[{"mask-x-from":U()}],"mask-image-x-to-color":[{"mask-x-to":U()}],"mask-image-y-from-pos":[{"mask-y-from":Ot()}],"mask-image-y-to-pos":[{"mask-y-to":Ot()}],"mask-image-y-from-color":[{"mask-y-from":U()}],"mask-image-y-to-color":[{"mask-y-to":U()}],"mask-image-radial":[{"mask-radial":[dt,ft]}],"mask-image-radial-from-pos":[{"mask-radial-from":Ot()}],"mask-image-radial-to-pos":[{"mask-radial-to":Ot()}],"mask-image-radial-from-color":[{"mask-radial-from":U()}],"mask-image-radial-to-color":[{"mask-radial-to":U()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":F()}],"mask-image-conic-pos":[{"mask-conic":[Ct]}],"mask-image-conic-from-pos":[{"mask-conic-from":Ot()}],"mask-image-conic-to-pos":[{"mask-conic-to":Ot()}],"mask-image-conic-from-color":[{"mask-conic-from":U()}],"mask-image-conic-to-color":[{"mask-conic-to":U()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:gt()}],"mask-repeat":[{mask:_()}],"mask-size":[{mask:Q()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",dt,ft]}],filter:[{filter:["","none",dt,ft]}],blur:[{blur:St()}],brightness:[{brightness:[Ct,dt,ft]}],contrast:[{contrast:[Ct,dt,ft]}],"drop-shadow":[{"drop-shadow":["","none",T,Uu,Nu]}],"drop-shadow-color":[{"drop-shadow":U()}],grayscale:[{grayscale:["",Ct,dt,ft]}],"hue-rotate":[{"hue-rotate":[Ct,dt,ft]}],invert:[{invert:["",Ct,dt,ft]}],saturate:[{saturate:[Ct,dt,ft]}],sepia:[{sepia:["",Ct,dt,ft]}],"backdrop-filter":[{"backdrop-filter":["","none",dt,ft]}],"backdrop-blur":[{"backdrop-blur":St()}],"backdrop-brightness":[{"backdrop-brightness":[Ct,dt,ft]}],"backdrop-contrast":[{"backdrop-contrast":[Ct,dt,ft]}],"backdrop-grayscale":[{"backdrop-grayscale":["",Ct,dt,ft]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Ct,dt,ft]}],"backdrop-invert":[{"backdrop-invert":["",Ct,dt,ft]}],"backdrop-opacity":[{"backdrop-opacity":[Ct,dt,ft]}],"backdrop-saturate":[{"backdrop-saturate":[Ct,dt,ft]}],"backdrop-sepia":[{"backdrop-sepia":["",Ct,dt,ft]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":W()}],"border-spacing-x":[{"border-spacing-x":W()}],"border-spacing-y":[{"border-spacing-y":W()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",dt,ft]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[Ct,"initial",dt,ft]}],ease:[{ease:["linear","initial",X,dt,ft]}],delay:[{delay:[Ct,dt,ft]}],animate:[{animate:["none",H,dt,ft]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[C,dt,ft]}],"perspective-origin":[{"perspective-origin":Z()}],rotate:[{rotate:Wt()}],"rotate-x":[{"rotate-x":Wt()}],"rotate-y":[{"rotate-y":Wt()}],"rotate-z":[{"rotate-z":Wt()}],scale:[{scale:Re()}],"scale-x":[{"scale-x":Re()}],"scale-y":[{"scale-y":Re()}],"scale-z":[{"scale-z":Re()}],"scale-3d":["scale-3d"],skew:[{skew:Ze()}],"skew-x":[{"skew-x":Ze()}],"skew-y":[{"skew-y":Ze()}],transform:[{transform:[dt,ft,"","none","gpu","cpu"]}],"transform-origin":[{origin:Z()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:we()}],"translate-x":[{"translate-x":we()}],"translate-y":[{"translate-y":we()}],"translate-z":[{"translate-z":we()}],"translate-none":["translate-none"],accent:[{accent:U()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:U()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",dt,ft]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":W()}],"scroll-mx":[{"scroll-mx":W()}],"scroll-my":[{"scroll-my":W()}],"scroll-ms":[{"scroll-ms":W()}],"scroll-me":[{"scroll-me":W()}],"scroll-mt":[{"scroll-mt":W()}],"scroll-mr":[{"scroll-mr":W()}],"scroll-mb":[{"scroll-mb":W()}],"scroll-ml":[{"scroll-ml":W()}],"scroll-p":[{"scroll-p":W()}],"scroll-px":[{"scroll-px":W()}],"scroll-py":[{"scroll-py":W()}],"scroll-ps":[{"scroll-ps":W()}],"scroll-pe":[{"scroll-pe":W()}],"scroll-pt":[{"scroll-pt":W()}],"scroll-pr":[{"scroll-pr":W()}],"scroll-pb":[{"scroll-pb":W()}],"scroll-pl":[{"scroll-pl":W()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",dt,ft]}],fill:[{fill:["none",...U()]}],"stroke-w":[{stroke:[Ct,si,ll,Mc]}],stroke:[{stroke:["none",...U()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},E2=sb(Ob);var Un=function(){return Un=Object.assign||function(l){for(var i,u=1,c=arguments.length;u"u")return Xb;var l=Qb(n),i=document.documentElement.clientWidth,u=window.innerWidth;return{left:l[0],top:l[1],right:l[2],gap:Math.max(0,u-i+l[2]-l[0])}},Kb=Yv(),nr="data-scroll-locked",Jb=function(n,l,i,u){var c=n.left,f=n.top,d=n.right,m=n.gap;return i===void 0&&(i="margin"),` - .`.concat(Db,` { + */var vg;function K0(){if(vg)return Ue;vg=1;var n=nf();function l(p){var v="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(l){console.error(l)}}return n(),Rc.exports=K0(),Rc.exports}var Tv=zv();const J0=Av(Tv);function Ov(n){var l,i,u="";if(typeof n=="string"||typeof n=="number")u+=n;else if(typeof n=="object")if(Array.isArray(n)){var c=n.length;for(l=0;ltypeof n=="boolean"?`${n}`:n===0?"0":n,bg=F0,x2=(n,l)=>i=>{var u;if(l?.variants==null)return bg(n,i?.class,i?.className);const{variants:c,defaultVariants:f}=l,d=Object.keys(c).map(v=>{const b=i?.[v],y=f?.[v];if(b===null)return null;const x=pg(b)||pg(y);return c[v][x]}),m=i&&Object.entries(i).reduce((v,b)=>{let[y,x]=b;return x===void 0||(v[y]=x),v},{}),p=l==null||(u=l.compoundVariants)===null||u===void 0?void 0:u.reduce((v,b)=>{let{class:y,className:x,...T}=b;return Object.entries(T).every(k=>{let[C,B]=k;return Array.isArray(B)?B.includes({...f,...m}[C]):{...f,...m}[C]===B})?[...v,y,x]:v},[]);return bg(n,d,p,i?.class,i?.className)},af="-",W0=n=>{const l=I0(n),{conflictingClassGroups:i,conflictingClassGroupModifiers:u}=n;return{getClassGroupId:d=>{const m=d.split(af);return m[0]===""&&m.length!==1&&m.shift(),Rv(m,l)||P0(d)},getConflictingClassGroupIds:(d,m)=>{const p=i[d]||[];return m&&u[d]?[...p,...u[d]]:p}}},Rv=(n,l)=>{if(n.length===0)return l.classGroupId;const i=n[0],u=l.nextPart.get(i),c=u?Rv(n.slice(1),u):void 0;if(c)return c;if(l.validators.length===0)return;const f=n.join(af);return l.validators.find(({validator:d})=>d(f))?.classGroupId},Sg=/^\[(.+)\]$/,P0=n=>{if(Sg.test(n)){const l=Sg.exec(n)[1],i=l?.substring(0,l.indexOf(":"));if(i)return"arbitrary.."+i}},I0=n=>{const{theme:l,classGroups:i}=n,u={nextPart:new Map,validators:[]};for(const c in i)qc(i[c],u,c,l);return u},qc=(n,l,i,u)=>{n.forEach(c=>{if(typeof c=="string"){const f=c===""?l:_g(l,c);f.classGroupId=i;return}if(typeof c=="function"){if(tb(c)){qc(c(u),l,i,u);return}l.validators.push({validator:c,classGroupId:i});return}Object.entries(c).forEach(([f,d])=>{qc(d,_g(l,f),i,u)})})},_g=(n,l)=>{let i=n;return l.split(af).forEach(u=>{i.nextPart.has(u)||i.nextPart.set(u,{nextPart:new Map,validators:[]}),i=i.nextPart.get(u)}),i},tb=n=>n.isThemeGetter,eb=n=>{if(n<1)return{get:()=>{},set:()=>{}};let l=0,i=new Map,u=new Map;const c=(f,d)=>{i.set(f,d),l++,l>n&&(l=0,u=i,i=new Map)};return{get(f){let d=i.get(f);if(d!==void 0)return d;if((d=u.get(f))!==void 0)return c(f,d),d},set(f,d){i.has(f)?i.set(f,d):c(f,d)}}},Gc="!",Xc=":",nb=Xc.length,ab=n=>{const{prefix:l,experimentalParseClassName:i}=n;let u=c=>{const f=[];let d=0,m=0,p=0,v;for(let k=0;kp?v-p:void 0;return{modifiers:f,hasImportantModifier:x,baseClassName:y,maybePostfixModifierPosition:T}};if(l){const c=l+Xc,f=u;u=d=>d.startsWith(c)?f(d.substring(c.length)):{isExternal:!0,modifiers:[],hasImportantModifier:!1,baseClassName:d,maybePostfixModifierPosition:void 0}}if(i){const c=u;u=f=>i({className:f,parseClassName:c})}return u},lb=n=>n.endsWith(Gc)?n.substring(0,n.length-1):n.startsWith(Gc)?n.substring(1):n,rb=n=>{const l=Object.fromEntries(n.orderSensitiveModifiers.map(u=>[u,!0]));return u=>{if(u.length<=1)return u;const c=[];let f=[];return u.forEach(d=>{d[0]==="["||l[d]?(c.push(...f.sort(),d),f=[]):f.push(d)}),c.push(...f.sort()),c}},ib=n=>({cache:eb(n.cacheSize),parseClassName:ab(n),sortModifiers:rb(n),...W0(n)}),ub=/\s+/,ob=(n,l)=>{const{parseClassName:i,getClassGroupId:u,getConflictingClassGroupIds:c,sortModifiers:f}=l,d=[],m=n.trim().split(ub);let p="";for(let v=m.length-1;v>=0;v-=1){const b=m[v],{isExternal:y,modifiers:x,hasImportantModifier:T,baseClassName:k,maybePostfixModifierPosition:C}=i(b);if(y){p=b+(p.length>0?" "+p:p);continue}let B=!!C,X=u(B?k.substring(0,C):k);if(!X){if(!B){p=b+(p.length>0?" "+p:p);continue}if(X=u(k),!X){p=b+(p.length>0?" "+p:p);continue}B=!1}const H=f(x).join(":"),K=T?H+Gc:H,F=K+X;if(d.includes(F))continue;d.push(F);const Z=c(X,B);for(let tt=0;tt0?" "+p:p)}return p};function sb(){let n=0,l,i,u="";for(;n{if(typeof n=="string")return n;let l,i="";for(let u=0;uy(b),n());return i=ib(v),u=i.cache.get,c=i.cache.set,f=m,m(p)}function m(p){const v=u(p);if(v)return v;const b=ob(p,i);return c(p,b),b}return function(){return f(sb.apply(null,arguments))}}const be=n=>{const l=i=>i[n]||[];return l.isThemeGetter=!0,l},Mv=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Cv=/^\((?:(\w[\w-]*):)?(.+)\)$/i,fb=/^\d+\/\d+$/,db=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,hb=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,mb=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,gb=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,vb=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Fl=n=>fb.test(n),Ct=n=>!!n&&!Number.isNaN(Number(n)),Na=n=>!!n&&Number.isInteger(Number(n)),Dc=n=>n.endsWith("%")&&Ct(n.slice(0,-1)),ra=n=>db.test(n),yb=()=>!0,pb=n=>hb.test(n)&&!mb.test(n),kv=()=>!1,bb=n=>gb.test(n),Sb=n=>vb.test(n),_b=n=>!ft(n)&&!dt(n),wb=n=>ur(n,Zv,kv),ft=n=>Mv.test(n),ll=n=>ur(n,Vv,pb),Mc=n=>ur(n,Tb,Ct),wg=n=>ur(n,Nv,kv),xb=n=>ur(n,Uv,Sb),Uu=n=>ur(n,Bv,bb),dt=n=>Cv.test(n),si=n=>or(n,Vv),Eb=n=>or(n,Ob),xg=n=>or(n,Nv),Ab=n=>or(n,Zv),zb=n=>or(n,Uv),Zu=n=>or(n,Bv,!0),ur=(n,l,i)=>{const u=Mv.exec(n);return u?u[1]?l(u[1]):i(u[2]):!1},or=(n,l,i=!1)=>{const u=Cv.exec(n);return u?u[1]?l(u[1]):i:!1},Nv=n=>n==="position"||n==="percentage",Uv=n=>n==="image"||n==="url",Zv=n=>n==="length"||n==="size"||n==="bg-size",Vv=n=>n==="length",Tb=n=>n==="number",Ob=n=>n==="family-name",Bv=n=>n==="shadow",Rb=()=>{const n=be("color"),l=be("font"),i=be("text"),u=be("font-weight"),c=be("tracking"),f=be("leading"),d=be("breakpoint"),m=be("container"),p=be("spacing"),v=be("radius"),b=be("shadow"),y=be("inset-shadow"),x=be("text-shadow"),T=be("drop-shadow"),k=be("blur"),C=be("perspective"),B=be("aspect"),X=be("ease"),H=be("animate"),K=()=>["auto","avoid","all","avoid-page","page","left","right","column"],F=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],Z=()=>[...F(),dt,ft],tt=()=>["auto","hidden","clip","visible","scroll"],ut=()=>["auto","contain","none"],W=()=>[dt,ft,p],vt=()=>[Fl,"full","auto",...W()],Rt=()=>[Na,"none","subgrid",dt,ft],Et=()=>["auto",{span:["full",Na,dt,ft]},Na,dt,ft],lt=()=>[Na,"auto",dt,ft],ot=()=>["auto","min","max","fr",dt,ft],yt=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],bt=()=>["start","end","center","stretch","center-safe","end-safe"],A=()=>["auto",...W()],L=()=>[Fl,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...W()],U=()=>[n,dt,ft],gt=()=>[...F(),xg,wg,{position:[dt,ft]}],_=()=>["no-repeat",{repeat:["","x","y","space","round"]}],Q=()=>["auto","cover","contain",Ab,wb,{size:[dt,ft]}],at=()=>[Dc,si,ll],j=()=>["","none","full",v,dt,ft],P=()=>["",Ct,si,ll],ht=()=>["solid","dashed","dotted","double"],mt=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],Ot=()=>[Ct,Dc,xg,wg],St=()=>["","none",k,dt,ft],Wt=()=>["none",Ct,dt,ft],Re=()=>["none",Ct,dt,ft],Ze=()=>[Ct,dt,ft],we=()=>[Fl,"full",...W()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[ra],breakpoint:[ra],color:[yb],container:[ra],"drop-shadow":[ra],ease:["in","out","in-out"],font:[_b],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[ra],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[ra],shadow:[ra],spacing:["px",Ct],text:[ra],"text-shadow":[ra],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",Fl,ft,dt,B]}],container:["container"],columns:[{columns:[Ct,ft,dt,m]}],"break-after":[{"break-after":K()}],"break-before":[{"break-before":K()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:Z()}],overflow:[{overflow:tt()}],"overflow-x":[{"overflow-x":tt()}],"overflow-y":[{"overflow-y":tt()}],overscroll:[{overscroll:ut()}],"overscroll-x":[{"overscroll-x":ut()}],"overscroll-y":[{"overscroll-y":ut()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:vt()}],"inset-x":[{"inset-x":vt()}],"inset-y":[{"inset-y":vt()}],start:[{start:vt()}],end:[{end:vt()}],top:[{top:vt()}],right:[{right:vt()}],bottom:[{bottom:vt()}],left:[{left:vt()}],visibility:["visible","invisible","collapse"],z:[{z:[Na,"auto",dt,ft]}],basis:[{basis:[Fl,"full","auto",m,...W()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[Ct,Fl,"auto","initial","none",ft]}],grow:[{grow:["",Ct,dt,ft]}],shrink:[{shrink:["",Ct,dt,ft]}],order:[{order:[Na,"first","last","none",dt,ft]}],"grid-cols":[{"grid-cols":Rt()}],"col-start-end":[{col:Et()}],"col-start":[{"col-start":lt()}],"col-end":[{"col-end":lt()}],"grid-rows":[{"grid-rows":Rt()}],"row-start-end":[{row:Et()}],"row-start":[{"row-start":lt()}],"row-end":[{"row-end":lt()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":ot()}],"auto-rows":[{"auto-rows":ot()}],gap:[{gap:W()}],"gap-x":[{"gap-x":W()}],"gap-y":[{"gap-y":W()}],"justify-content":[{justify:[...yt(),"normal"]}],"justify-items":[{"justify-items":[...bt(),"normal"]}],"justify-self":[{"justify-self":["auto",...bt()]}],"align-content":[{content:["normal",...yt()]}],"align-items":[{items:[...bt(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...bt(),{baseline:["","last"]}]}],"place-content":[{"place-content":yt()}],"place-items":[{"place-items":[...bt(),"baseline"]}],"place-self":[{"place-self":["auto",...bt()]}],p:[{p:W()}],px:[{px:W()}],py:[{py:W()}],ps:[{ps:W()}],pe:[{pe:W()}],pt:[{pt:W()}],pr:[{pr:W()}],pb:[{pb:W()}],pl:[{pl:W()}],m:[{m:A()}],mx:[{mx:A()}],my:[{my:A()}],ms:[{ms:A()}],me:[{me:A()}],mt:[{mt:A()}],mr:[{mr:A()}],mb:[{mb:A()}],ml:[{ml:A()}],"space-x":[{"space-x":W()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":W()}],"space-y-reverse":["space-y-reverse"],size:[{size:L()}],w:[{w:[m,"screen",...L()]}],"min-w":[{"min-w":[m,"screen","none",...L()]}],"max-w":[{"max-w":[m,"screen","none","prose",{screen:[d]},...L()]}],h:[{h:["screen","lh",...L()]}],"min-h":[{"min-h":["screen","lh","none",...L()]}],"max-h":[{"max-h":["screen","lh",...L()]}],"font-size":[{text:["base",i,si,ll]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[u,dt,Mc]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Dc,ft]}],"font-family":[{font:[Eb,ft,l]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[c,dt,ft]}],"line-clamp":[{"line-clamp":[Ct,"none",dt,Mc]}],leading:[{leading:[f,...W()]}],"list-image":[{"list-image":["none",dt,ft]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",dt,ft]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:U()}],"text-color":[{text:U()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...ht(),"wavy"]}],"text-decoration-thickness":[{decoration:[Ct,"from-font","auto",dt,ll]}],"text-decoration-color":[{decoration:U()}],"underline-offset":[{"underline-offset":[Ct,"auto",dt,ft]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:W()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",dt,ft]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",dt,ft]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:gt()}],"bg-repeat":[{bg:_()}],"bg-size":[{bg:Q()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Na,dt,ft],radial:["",dt,ft],conic:[Na,dt,ft]},zb,xb]}],"bg-color":[{bg:U()}],"gradient-from-pos":[{from:at()}],"gradient-via-pos":[{via:at()}],"gradient-to-pos":[{to:at()}],"gradient-from":[{from:U()}],"gradient-via":[{via:U()}],"gradient-to":[{to:U()}],rounded:[{rounded:j()}],"rounded-s":[{"rounded-s":j()}],"rounded-e":[{"rounded-e":j()}],"rounded-t":[{"rounded-t":j()}],"rounded-r":[{"rounded-r":j()}],"rounded-b":[{"rounded-b":j()}],"rounded-l":[{"rounded-l":j()}],"rounded-ss":[{"rounded-ss":j()}],"rounded-se":[{"rounded-se":j()}],"rounded-ee":[{"rounded-ee":j()}],"rounded-es":[{"rounded-es":j()}],"rounded-tl":[{"rounded-tl":j()}],"rounded-tr":[{"rounded-tr":j()}],"rounded-br":[{"rounded-br":j()}],"rounded-bl":[{"rounded-bl":j()}],"border-w":[{border:P()}],"border-w-x":[{"border-x":P()}],"border-w-y":[{"border-y":P()}],"border-w-s":[{"border-s":P()}],"border-w-e":[{"border-e":P()}],"border-w-t":[{"border-t":P()}],"border-w-r":[{"border-r":P()}],"border-w-b":[{"border-b":P()}],"border-w-l":[{"border-l":P()}],"divide-x":[{"divide-x":P()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":P()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...ht(),"hidden","none"]}],"divide-style":[{divide:[...ht(),"hidden","none"]}],"border-color":[{border:U()}],"border-color-x":[{"border-x":U()}],"border-color-y":[{"border-y":U()}],"border-color-s":[{"border-s":U()}],"border-color-e":[{"border-e":U()}],"border-color-t":[{"border-t":U()}],"border-color-r":[{"border-r":U()}],"border-color-b":[{"border-b":U()}],"border-color-l":[{"border-l":U()}],"divide-color":[{divide:U()}],"outline-style":[{outline:[...ht(),"none","hidden"]}],"outline-offset":[{"outline-offset":[Ct,dt,ft]}],"outline-w":[{outline:["",Ct,si,ll]}],"outline-color":[{outline:U()}],shadow:[{shadow:["","none",b,Zu,Uu]}],"shadow-color":[{shadow:U()}],"inset-shadow":[{"inset-shadow":["none",y,Zu,Uu]}],"inset-shadow-color":[{"inset-shadow":U()}],"ring-w":[{ring:P()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:U()}],"ring-offset-w":[{"ring-offset":[Ct,ll]}],"ring-offset-color":[{"ring-offset":U()}],"inset-ring-w":[{"inset-ring":P()}],"inset-ring-color":[{"inset-ring":U()}],"text-shadow":[{"text-shadow":["none",x,Zu,Uu]}],"text-shadow-color":[{"text-shadow":U()}],opacity:[{opacity:[Ct,dt,ft]}],"mix-blend":[{"mix-blend":[...mt(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":mt()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[Ct]}],"mask-image-linear-from-pos":[{"mask-linear-from":Ot()}],"mask-image-linear-to-pos":[{"mask-linear-to":Ot()}],"mask-image-linear-from-color":[{"mask-linear-from":U()}],"mask-image-linear-to-color":[{"mask-linear-to":U()}],"mask-image-t-from-pos":[{"mask-t-from":Ot()}],"mask-image-t-to-pos":[{"mask-t-to":Ot()}],"mask-image-t-from-color":[{"mask-t-from":U()}],"mask-image-t-to-color":[{"mask-t-to":U()}],"mask-image-r-from-pos":[{"mask-r-from":Ot()}],"mask-image-r-to-pos":[{"mask-r-to":Ot()}],"mask-image-r-from-color":[{"mask-r-from":U()}],"mask-image-r-to-color":[{"mask-r-to":U()}],"mask-image-b-from-pos":[{"mask-b-from":Ot()}],"mask-image-b-to-pos":[{"mask-b-to":Ot()}],"mask-image-b-from-color":[{"mask-b-from":U()}],"mask-image-b-to-color":[{"mask-b-to":U()}],"mask-image-l-from-pos":[{"mask-l-from":Ot()}],"mask-image-l-to-pos":[{"mask-l-to":Ot()}],"mask-image-l-from-color":[{"mask-l-from":U()}],"mask-image-l-to-color":[{"mask-l-to":U()}],"mask-image-x-from-pos":[{"mask-x-from":Ot()}],"mask-image-x-to-pos":[{"mask-x-to":Ot()}],"mask-image-x-from-color":[{"mask-x-from":U()}],"mask-image-x-to-color":[{"mask-x-to":U()}],"mask-image-y-from-pos":[{"mask-y-from":Ot()}],"mask-image-y-to-pos":[{"mask-y-to":Ot()}],"mask-image-y-from-color":[{"mask-y-from":U()}],"mask-image-y-to-color":[{"mask-y-to":U()}],"mask-image-radial":[{"mask-radial":[dt,ft]}],"mask-image-radial-from-pos":[{"mask-radial-from":Ot()}],"mask-image-radial-to-pos":[{"mask-radial-to":Ot()}],"mask-image-radial-from-color":[{"mask-radial-from":U()}],"mask-image-radial-to-color":[{"mask-radial-to":U()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":F()}],"mask-image-conic-pos":[{"mask-conic":[Ct]}],"mask-image-conic-from-pos":[{"mask-conic-from":Ot()}],"mask-image-conic-to-pos":[{"mask-conic-to":Ot()}],"mask-image-conic-from-color":[{"mask-conic-from":U()}],"mask-image-conic-to-color":[{"mask-conic-to":U()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:gt()}],"mask-repeat":[{mask:_()}],"mask-size":[{mask:Q()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",dt,ft]}],filter:[{filter:["","none",dt,ft]}],blur:[{blur:St()}],brightness:[{brightness:[Ct,dt,ft]}],contrast:[{contrast:[Ct,dt,ft]}],"drop-shadow":[{"drop-shadow":["","none",T,Zu,Uu]}],"drop-shadow-color":[{"drop-shadow":U()}],grayscale:[{grayscale:["",Ct,dt,ft]}],"hue-rotate":[{"hue-rotate":[Ct,dt,ft]}],invert:[{invert:["",Ct,dt,ft]}],saturate:[{saturate:[Ct,dt,ft]}],sepia:[{sepia:["",Ct,dt,ft]}],"backdrop-filter":[{"backdrop-filter":["","none",dt,ft]}],"backdrop-blur":[{"backdrop-blur":St()}],"backdrop-brightness":[{"backdrop-brightness":[Ct,dt,ft]}],"backdrop-contrast":[{"backdrop-contrast":[Ct,dt,ft]}],"backdrop-grayscale":[{"backdrop-grayscale":["",Ct,dt,ft]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Ct,dt,ft]}],"backdrop-invert":[{"backdrop-invert":["",Ct,dt,ft]}],"backdrop-opacity":[{"backdrop-opacity":[Ct,dt,ft]}],"backdrop-saturate":[{"backdrop-saturate":[Ct,dt,ft]}],"backdrop-sepia":[{"backdrop-sepia":["",Ct,dt,ft]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":W()}],"border-spacing-x":[{"border-spacing-x":W()}],"border-spacing-y":[{"border-spacing-y":W()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",dt,ft]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[Ct,"initial",dt,ft]}],ease:[{ease:["linear","initial",X,dt,ft]}],delay:[{delay:[Ct,dt,ft]}],animate:[{animate:["none",H,dt,ft]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[C,dt,ft]}],"perspective-origin":[{"perspective-origin":Z()}],rotate:[{rotate:Wt()}],"rotate-x":[{"rotate-x":Wt()}],"rotate-y":[{"rotate-y":Wt()}],"rotate-z":[{"rotate-z":Wt()}],scale:[{scale:Re()}],"scale-x":[{"scale-x":Re()}],"scale-y":[{"scale-y":Re()}],"scale-z":[{"scale-z":Re()}],"scale-3d":["scale-3d"],skew:[{skew:Ze()}],"skew-x":[{"skew-x":Ze()}],"skew-y":[{"skew-y":Ze()}],transform:[{transform:[dt,ft,"","none","gpu","cpu"]}],"transform-origin":[{origin:Z()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:we()}],"translate-x":[{"translate-x":we()}],"translate-y":[{"translate-y":we()}],"translate-z":[{"translate-z":we()}],"translate-none":["translate-none"],accent:[{accent:U()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:U()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",dt,ft]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":W()}],"scroll-mx":[{"scroll-mx":W()}],"scroll-my":[{"scroll-my":W()}],"scroll-ms":[{"scroll-ms":W()}],"scroll-me":[{"scroll-me":W()}],"scroll-mt":[{"scroll-mt":W()}],"scroll-mr":[{"scroll-mr":W()}],"scroll-mb":[{"scroll-mb":W()}],"scroll-ml":[{"scroll-ml":W()}],"scroll-p":[{"scroll-p":W()}],"scroll-px":[{"scroll-px":W()}],"scroll-py":[{"scroll-py":W()}],"scroll-ps":[{"scroll-ps":W()}],"scroll-pe":[{"scroll-pe":W()}],"scroll-pt":[{"scroll-pt":W()}],"scroll-pr":[{"scroll-pr":W()}],"scroll-pb":[{"scroll-pb":W()}],"scroll-pl":[{"scroll-pl":W()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",dt,ft]}],fill:[{fill:["none",...U()]}],"stroke-w":[{stroke:[Ct,si,ll,Mc]}],stroke:[{stroke:["none",...U()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},E2=cb(Rb);var Un=function(){return Un=Object.assign||function(l){for(var i,u=1,c=arguments.length;u"u")return Qb;var l=$b(n),i=document.documentElement.clientWidth,u=window.innerWidth;return{left:l[0],top:l[1],right:l[2],gap:Math.max(0,u-i+l[2]-l[0])}},Jb=Yv(),nr="data-scroll-locked",Fb=function(n,l,i,u){var c=n.left,f=n.top,d=n.right,m=n.gap;return i===void 0&&(i="margin"),` + .`.concat(Mb,` { overflow: hidden `).concat(u,`; padding-right: `).concat(m,"px ").concat(u,`; } @@ -57,14 +57,14 @@ import{g as Av}from"./router-CcA--AgE.js";function q0(n,l){for(var i=0;im)return!0}u=u.parentNode}while(u&&u!==i.body);return!1},e1=function(n){var l=n.scrollTop,i=n.scrollHeight,u=n.clientHeight;return[l,i,u]},n1=function(n){var l=n.scrollLeft,i=n.scrollWidth,u=n.clientWidth;return[l,i,u]},Gv=function(n,l){return n==="v"?Ib(l):t1(l)},Xv=function(n,l){return n==="v"?e1(l):n1(l)},a1=function(n,l){return n==="h"&&l==="rtl"?-1:1},l1=function(n,l,i,u,c){var f=a1(n,window.getComputedStyle(l).direction),d=f*u,m=i.target,p=l.contains(m),v=!1,b=d>0,y=0,x=0;do{if(!m)break;var T=Xv(n,m),k=T[0],C=T[1],B=T[2],X=C-B-f*k;(k||X)&&Gv(n,m)&&(y+=X,x+=k);var H=m.parentNode;m=H&&H.nodeType===Node.DOCUMENT_FRAGMENT_NODE?H.host:H}while(!p&&m!==document.body||p&&(l.contains(m)||l===m));return(b&&Math.abs(y)<1||!b&&Math.abs(x)<1)&&(v=!0),v},Vu=function(n){return"changedTouches"in n?[n.changedTouches[0].clientX,n.changedTouches[0].clientY]:[0,0]},Tg=function(n){return[n.deltaX,n.deltaY]},Og=function(n){return n&&"current"in n?n.current:n},r1=function(n,l){return n[0]===l[0]&&n[1]===l[1]},i1=function(n){return` +`)},Ag=function(){var n=parseInt(document.body.getAttribute(nr)||"0",10);return isFinite(n)?n:0},Wb=function(){it.useEffect(function(){return document.body.setAttribute(nr,(Ag()+1).toString()),function(){var n=Ag()-1;n<=0?document.body.removeAttribute(nr):document.body.setAttribute(nr,n.toString())}},[])},Pb=function(n){var l=n.noRelative,i=n.noImportant,u=n.gapMode,c=u===void 0?"margin":u;Wb();var f=it.useMemo(function(){return Kb(c)},[c]);return it.createElement(Jb,{styles:Fb(f,!l,c,i?"":"!important")})},Qc=!1;if(typeof window<"u")try{var Vu=Object.defineProperty({},"passive",{get:function(){return Qc=!0,!0}});window.addEventListener("test",Vu,Vu),window.removeEventListener("test",Vu,Vu)}catch{Qc=!1}var Wl=Qc?{passive:!1}:!1,Ib=function(n){return n.tagName==="TEXTAREA"},qv=function(n,l){if(!(n instanceof Element))return!1;var i=window.getComputedStyle(n);return i[l]!=="hidden"&&!(i.overflowY===i.overflowX&&!Ib(n)&&i[l]==="visible")},t1=function(n){return qv(n,"overflowY")},e1=function(n){return qv(n,"overflowX")},zg=function(n,l){var i=l.ownerDocument,u=l;do{typeof ShadowRoot<"u"&&u instanceof ShadowRoot&&(u=u.host);var c=Gv(n,u);if(c){var f=Xv(n,u),d=f[1],m=f[2];if(d>m)return!0}u=u.parentNode}while(u&&u!==i.body);return!1},n1=function(n){var l=n.scrollTop,i=n.scrollHeight,u=n.clientHeight;return[l,i,u]},a1=function(n){var l=n.scrollLeft,i=n.scrollWidth,u=n.clientWidth;return[l,i,u]},Gv=function(n,l){return n==="v"?t1(l):e1(l)},Xv=function(n,l){return n==="v"?n1(l):a1(l)},l1=function(n,l){return n==="h"&&l==="rtl"?-1:1},r1=function(n,l,i,u,c){var f=l1(n,window.getComputedStyle(l).direction),d=f*u,m=i.target,p=l.contains(m),v=!1,b=d>0,y=0,x=0;do{if(!m)break;var T=Xv(n,m),k=T[0],C=T[1],B=T[2],X=C-B-f*k;(k||X)&&Gv(n,m)&&(y+=X,x+=k);var H=m.parentNode;m=H&&H.nodeType===Node.DOCUMENT_FRAGMENT_NODE?H.host:H}while(!p&&m!==document.body||p&&(l.contains(m)||l===m));return(b&&Math.abs(y)<1||!b&&Math.abs(x)<1)&&(v=!0),v},Bu=function(n){return"changedTouches"in n?[n.changedTouches[0].clientX,n.changedTouches[0].clientY]:[0,0]},Tg=function(n){return[n.deltaX,n.deltaY]},Og=function(n){return n&&"current"in n?n.current:n},i1=function(n,l){return n[0]===l[0]&&n[1]===l[1]},u1=function(n){return` .block-interactivity-`.concat(n,` {pointer-events: none;} .allow-interactivity-`).concat(n,` {pointer-events: all;} -`)},u1=0,Pl=[];function o1(n){var l=it.useRef([]),i=it.useRef([0,0]),u=it.useRef(),c=it.useState(u1++)[0],f=it.useState(Yv)[0],d=it.useRef(n);it.useEffect(function(){d.current=n},[n]),it.useEffect(function(){if(n.inert){document.body.classList.add("block-interactivity-".concat(c));var C=Rb([n.lockRef.current],(n.shards||[]).map(Og),!0).filter(Boolean);return C.forEach(function(B){return B.classList.add("allow-interactivity-".concat(c))}),function(){document.body.classList.remove("block-interactivity-".concat(c)),C.forEach(function(B){return B.classList.remove("allow-interactivity-".concat(c))})}}},[n.inert,n.lockRef.current,n.shards]);var m=it.useCallback(function(C,B){if("touches"in C&&C.touches.length===2||C.type==="wheel"&&C.ctrlKey)return!d.current.allowPinchZoom;var X=Vu(C),H=i.current,K="deltaX"in C?C.deltaX:H[0]-X[0],F="deltaY"in C?C.deltaY:H[1]-X[1],Z,tt=C.target,ut=Math.abs(K)>Math.abs(F)?"h":"v";if("touches"in C&&ut==="h"&&tt.type==="range")return!1;var W=zg(ut,tt);if(!W)return!0;if(W?Z=ut:(Z=ut==="v"?"h":"v",W=zg(ut,tt)),!W)return!1;if(!u.current&&"changedTouches"in C&&(K||F)&&(u.current=Z),!Z)return!0;var vt=u.current||Z;return l1(vt,B,C,vt==="h"?K:F)},[]),p=it.useCallback(function(C){var B=C;if(!(!Pl.length||Pl[Pl.length-1]!==f)){var X="deltaY"in B?Tg(B):Vu(B),H=l.current.filter(function(Z){return Z.name===B.type&&(Z.target===B.target||B.target===Z.shadowParent)&&r1(Z.delta,X)})[0];if(H&&H.should){B.cancelable&&B.preventDefault();return}if(!H){var K=(d.current.shards||[]).map(Og).filter(Boolean).filter(function(Z){return Z.contains(B.target)}),F=K.length>0?m(B,K[0]):!d.current.noIsolation;F&&B.cancelable&&B.preventDefault()}}},[]),v=it.useCallback(function(C,B,X,H){var K={name:C,delta:B,target:X,should:H,shadowParent:s1(X)};l.current.push(K),setTimeout(function(){l.current=l.current.filter(function(F){return F!==K})},1)},[]),b=it.useCallback(function(C){i.current=Vu(C),u.current=void 0},[]),y=it.useCallback(function(C){v(C.type,Tg(C),C.target,m(C,n.lockRef.current))},[]),x=it.useCallback(function(C){v(C.type,Vu(C),C.target,m(C,n.lockRef.current))},[]);it.useEffect(function(){return Pl.push(f),n.setCallbacks({onScrollCapture:y,onWheelCapture:y,onTouchMoveCapture:x}),document.addEventListener("wheel",p,Wl),document.addEventListener("touchmove",p,Wl),document.addEventListener("touchstart",b,Wl),function(){Pl=Pl.filter(function(C){return C!==f}),document.removeEventListener("wheel",p,Wl),document.removeEventListener("touchmove",p,Wl),document.removeEventListener("touchstart",b,Wl)}},[]);var T=n.removeScrollBar,k=n.inert;return it.createElement(it.Fragment,null,k?it.createElement(f,{styles:i1(c)}):null,T?it.createElement(Wb,{noRelative:n.noRelative,gapMode:n.gapMode}):null)}function s1(n){for(var l=null;n!==null;)n instanceof ShadowRoot&&(l=n.host,n=n.host),n=n.parentNode;return l}const c1=Bb(Lv,o1);var f1=it.forwardRef(function(n,l){return it.createElement(uo,Un({},n,{ref:l,sideCar:c1}))});f1.classNames=uo.classNames;var d1=function(n){if(typeof document>"u")return null;var l=Array.isArray(n)?n[0]:n;return l.ownerDocument.body},Il=new WeakMap,Bu=new WeakMap,Hu={},Uc=0,Qv=function(n){return n&&(n.host||Qv(n.parentNode))},h1=function(n,l){return l.map(function(i){if(n.contains(i))return i;var u=Qv(i);return u&&n.contains(u)?u:(console.error("aria-hidden",i,"in not contained inside",n,". Doing nothing"),null)}).filter(function(i){return!!i})},m1=function(n,l,i,u){var c=h1(l,Array.isArray(n)?n:[n]);Hu[i]||(Hu[i]=new WeakMap);var f=Hu[i],d=[],m=new Set,p=new Set(c),v=function(y){!y||m.has(y)||(m.add(y),v(y.parentNode))};c.forEach(v);var b=function(y){!y||p.has(y)||Array.prototype.forEach.call(y.children,function(x){if(m.has(x))b(x);else try{var T=x.getAttribute(u),k=T!==null&&T!=="false",C=(Il.get(x)||0)+1,B=(f.get(x)||0)+1;Il.set(x,C),f.set(x,B),d.push(x),C===1&&k&&Bu.set(x,!0),B===1&&x.setAttribute(i,"true"),k||x.setAttribute(u,"true")}catch(X){console.error("aria-hidden: cannot operate on ",x,X)}})};return b(l),m.clear(),Uc++,function(){d.forEach(function(y){var x=Il.get(y)-1,T=f.get(y)-1;Il.set(y,x),f.set(y,T),x||(Bu.has(y)||y.removeAttribute(u),Bu.delete(y)),T||y.removeAttribute(i)}),Uc--,Uc||(Il=new WeakMap,Il=new WeakMap,Bu=new WeakMap,Hu={})}},A2=function(n,l,i){i===void 0&&(i="data-aria-hidden");var u=Array.from(Array.isArray(n)?n:[n]),c=d1(n);return c?(u.push.apply(u,Array.from(c.querySelectorAll("[aria-live], script"))),m1(u,c,i,"aria-hidden")):function(){return null}};const g1=["top","right","bottom","left"],Ua=Math.min,nn=Math.max,Fu=Math.round,ju=Math.floor,Bn=n=>({x:n,y:n}),v1={left:"right",right:"left",bottom:"top",top:"bottom"},y1={start:"end",end:"start"};function $c(n,l,i){return nn(n,Ua(l,i))}function oa(n,l){return typeof n=="function"?n(l):n}function sa(n){return n.split("-")[0]}function sr(n){return n.split("-")[1]}function lf(n){return n==="x"?"y":"x"}function rf(n){return n==="y"?"height":"width"}const p1=new Set(["top","bottom"]);function Zn(n){return p1.has(sa(n))?"y":"x"}function uf(n){return lf(Zn(n))}function b1(n,l,i){i===void 0&&(i=!1);const u=sr(n),c=uf(n),f=rf(c);let d=c==="x"?u===(i?"end":"start")?"right":"left":u==="start"?"bottom":"top";return l.reference[f]>l.floating[f]&&(d=Wu(d)),[d,Wu(d)]}function S1(n){const l=Wu(n);return[Kc(n),l,Kc(l)]}function Kc(n){return n.replace(/start|end/g,l=>y1[l])}const Rg=["left","right"],Dg=["right","left"],_1=["top","bottom"],w1=["bottom","top"];function x1(n,l,i){switch(n){case"top":case"bottom":return i?l?Dg:Rg:l?Rg:Dg;case"left":case"right":return l?_1:w1;default:return[]}}function E1(n,l,i,u){const c=sr(n);let f=x1(sa(n),i==="start",u);return c&&(f=f.map(d=>d+"-"+c),l&&(f=f.concat(f.map(Kc)))),f}function Wu(n){return n.replace(/left|right|bottom|top/g,l=>v1[l])}function A1(n){return{top:0,right:0,bottom:0,left:0,...n}}function $v(n){return typeof n!="number"?A1(n):{top:n,right:n,bottom:n,left:n}}function Pu(n){const{x:l,y:i,width:u,height:c}=n;return{width:u,height:c,top:i,left:l,right:l+u,bottom:i+c,x:l,y:i}}function Mg(n,l,i){let{reference:u,floating:c}=n;const f=Zn(l),d=uf(l),m=rf(d),p=sa(l),v=f==="y",b=u.x+u.width/2-c.width/2,y=u.y+u.height/2-c.height/2,x=u[m]/2-c[m]/2;let T;switch(p){case"top":T={x:b,y:u.y-c.height};break;case"bottom":T={x:b,y:u.y+u.height};break;case"right":T={x:u.x+u.width,y};break;case"left":T={x:u.x-c.width,y};break;default:T={x:u.x,y:u.y}}switch(sr(l)){case"start":T[d]-=x*(i&&v?-1:1);break;case"end":T[d]+=x*(i&&v?-1:1);break}return T}const z1=async(n,l,i)=>{const{placement:u="bottom",strategy:c="absolute",middleware:f=[],platform:d}=i,m=f.filter(Boolean),p=await(d.isRTL==null?void 0:d.isRTL(l));let v=await d.getElementRects({reference:n,floating:l,strategy:c}),{x:b,y}=Mg(v,u,p),x=u,T={},k=0;for(let C=0;C({name:"arrow",options:n,async fn(l){const{x:i,y:u,placement:c,rects:f,platform:d,elements:m,middlewareData:p}=l,{element:v,padding:b=0}=oa(n,l)||{};if(v==null)return{};const y=$v(b),x={x:i,y:u},T=uf(c),k=rf(T),C=await d.getDimensions(v),B=T==="y",X=B?"top":"left",H=B?"bottom":"right",K=B?"clientHeight":"clientWidth",F=f.reference[k]+f.reference[T]-x[T]-f.floating[k],Z=x[T]-f.reference[T],tt=await(d.getOffsetParent==null?void 0:d.getOffsetParent(v));let ut=tt?tt[K]:0;(!ut||!await(d.isElement==null?void 0:d.isElement(tt)))&&(ut=m.floating[K]||f.floating[k]);const W=F/2-Z/2,vt=ut/2-C[k]/2-1,Rt=Ua(y[X],vt),Et=Ua(y[H],vt),lt=Rt,ot=ut-C[k]-Et,yt=ut/2-C[k]/2+W,bt=$c(lt,yt,ot),A=!p.arrow&&sr(c)!=null&&yt!==bt&&f.reference[k]/2-(ytyt<=0)){var Et,lt;const yt=(((Et=f.flip)==null?void 0:Et.index)||0)+1,bt=ut[yt];if(bt&&(!(y==="alignment"?H!==Zn(bt):!1)||Rt.every(U=>Zn(U.placement)===H?U.overflows[0]>0:!0)))return{data:{index:yt,overflows:Rt},reset:{placement:bt}};let A=(lt=Rt.filter(L=>L.overflows[0]<=0).sort((L,U)=>L.overflows[1]-U.overflows[1])[0])==null?void 0:lt.placement;if(!A)switch(T){case"bestFit":{var ot;const L=(ot=Rt.filter(U=>{if(tt){const gt=Zn(U.placement);return gt===H||gt==="y"}return!0}).map(U=>[U.placement,U.overflows.filter(gt=>gt>0).reduce((gt,_)=>gt+_,0)]).sort((U,gt)=>U[1]-gt[1])[0])==null?void 0:ot[0];L&&(A=L);break}case"initialPlacement":A=m;break}if(c!==A)return{reset:{placement:A}}}return{}}}};function Cg(n,l){return{top:n.top-l.height,right:n.right-l.width,bottom:n.bottom-l.height,left:n.left-l.width}}function kg(n){return g1.some(l=>n[l]>=0)}const R1=function(n){return n===void 0&&(n={}),{name:"hide",options:n,async fn(l){const{rects:i}=l,{strategy:u="referenceHidden",...c}=oa(n,l);switch(u){case"referenceHidden":{const f=await gi(l,{...c,elementContext:"reference"}),d=Cg(f,i.reference);return{data:{referenceHiddenOffsets:d,referenceHidden:kg(d)}}}case"escaped":{const f=await gi(l,{...c,altBoundary:!0}),d=Cg(f,i.floating);return{data:{escapedOffsets:d,escaped:kg(d)}}}default:return{}}}}},Kv=new Set(["left","top"]);async function D1(n,l){const{placement:i,platform:u,elements:c}=n,f=await(u.isRTL==null?void 0:u.isRTL(c.floating)),d=sa(i),m=sr(i),p=Zn(i)==="y",v=Kv.has(d)?-1:1,b=f&&p?-1:1,y=oa(l,n);let{mainAxis:x,crossAxis:T,alignmentAxis:k}=typeof y=="number"?{mainAxis:y,crossAxis:0,alignmentAxis:null}:{mainAxis:y.mainAxis||0,crossAxis:y.crossAxis||0,alignmentAxis:y.alignmentAxis};return m&&typeof k=="number"&&(T=m==="end"?k*-1:k),p?{x:T*b,y:x*v}:{x:x*v,y:T*b}}const M1=function(n){return n===void 0&&(n=0),{name:"offset",options:n,async fn(l){var i,u;const{x:c,y:f,placement:d,middlewareData:m}=l,p=await D1(l,n);return d===((i=m.offset)==null?void 0:i.placement)&&(u=m.arrow)!=null&&u.alignmentOffset?{}:{x:c+p.x,y:f+p.y,data:{...p,placement:d}}}}},C1=function(n){return n===void 0&&(n={}),{name:"shift",options:n,async fn(l){const{x:i,y:u,placement:c}=l,{mainAxis:f=!0,crossAxis:d=!1,limiter:m={fn:B=>{let{x:X,y:H}=B;return{x:X,y:H}}},...p}=oa(n,l),v={x:i,y:u},b=await gi(l,p),y=Zn(sa(c)),x=lf(y);let T=v[x],k=v[y];if(f){const B=x==="y"?"top":"left",X=x==="y"?"bottom":"right",H=T+b[B],K=T-b[X];T=$c(H,T,K)}if(d){const B=y==="y"?"top":"left",X=y==="y"?"bottom":"right",H=k+b[B],K=k-b[X];k=$c(H,k,K)}const C=m.fn({...l,[x]:T,[y]:k});return{...C,data:{x:C.x-i,y:C.y-u,enabled:{[x]:f,[y]:d}}}}}},k1=function(n){return n===void 0&&(n={}),{options:n,fn(l){const{x:i,y:u,placement:c,rects:f,middlewareData:d}=l,{offset:m=0,mainAxis:p=!0,crossAxis:v=!0}=oa(n,l),b={x:i,y:u},y=Zn(c),x=lf(y);let T=b[x],k=b[y];const C=oa(m,l),B=typeof C=="number"?{mainAxis:C,crossAxis:0}:{mainAxis:0,crossAxis:0,...C};if(p){const K=x==="y"?"height":"width",F=f.reference[x]-f.floating[K]+B.mainAxis,Z=f.reference[x]+f.reference[K]-B.mainAxis;TZ&&(T=Z)}if(v){var X,H;const K=x==="y"?"width":"height",F=Kv.has(sa(c)),Z=f.reference[y]-f.floating[K]+(F&&((X=d.offset)==null?void 0:X[y])||0)+(F?0:B.crossAxis),tt=f.reference[y]+f.reference[K]+(F?0:((H=d.offset)==null?void 0:H[y])||0)-(F?B.crossAxis:0);ktt&&(k=tt)}return{[x]:T,[y]:k}}}},N1=function(n){return n===void 0&&(n={}),{name:"size",options:n,async fn(l){var i,u;const{placement:c,rects:f,platform:d,elements:m}=l,{apply:p=()=>{},...v}=oa(n,l),b=await gi(l,v),y=sa(c),x=sr(c),T=Zn(c)==="y",{width:k,height:C}=f.floating;let B,X;y==="top"||y==="bottom"?(B=y,X=x===(await(d.isRTL==null?void 0:d.isRTL(m.floating))?"start":"end")?"left":"right"):(X=y,B=x==="end"?"top":"bottom");const H=C-b.top-b.bottom,K=k-b.left-b.right,F=Ua(C-b[B],H),Z=Ua(k-b[X],K),tt=!l.middlewareData.shift;let ut=F,W=Z;if((i=l.middlewareData.shift)!=null&&i.enabled.x&&(W=K),(u=l.middlewareData.shift)!=null&&u.enabled.y&&(ut=H),tt&&!x){const Rt=nn(b.left,0),Et=nn(b.right,0),lt=nn(b.top,0),ot=nn(b.bottom,0);T?W=k-2*(Rt!==0||Et!==0?Rt+Et:nn(b.left,b.right)):ut=C-2*(lt!==0||ot!==0?lt+ot:nn(b.top,b.bottom))}await p({...l,availableWidth:W,availableHeight:ut});const vt=await d.getDimensions(m.floating);return k!==vt.width||C!==vt.height?{reset:{rects:!0}}:{}}}};function oo(){return typeof window<"u"}function cr(n){return Jv(n)?(n.nodeName||"").toLowerCase():"#document"}function an(n){var l;return(n==null||(l=n.ownerDocument)==null?void 0:l.defaultView)||window}function jn(n){var l;return(l=(Jv(n)?n.ownerDocument:n.document)||window.document)==null?void 0:l.documentElement}function Jv(n){return oo()?n instanceof Node||n instanceof an(n).Node:!1}function wn(n){return oo()?n instanceof Element||n instanceof an(n).Element:!1}function Hn(n){return oo()?n instanceof HTMLElement||n instanceof an(n).HTMLElement:!1}function Ng(n){return!oo()||typeof ShadowRoot>"u"?!1:n instanceof ShadowRoot||n instanceof an(n).ShadowRoot}const U1=new Set(["inline","contents"]);function bi(n){const{overflow:l,overflowX:i,overflowY:u,display:c}=xn(n);return/auto|scroll|overlay|hidden|clip/.test(l+u+i)&&!U1.has(c)}const Z1=new Set(["table","td","th"]);function V1(n){return Z1.has(cr(n))}const B1=[":popover-open",":modal"];function so(n){return B1.some(l=>{try{return n.matches(l)}catch{return!1}})}const H1=["transform","translate","scale","rotate","perspective"],j1=["transform","translate","scale","rotate","perspective","filter"],L1=["paint","layout","strict","content"];function of(n){const l=sf(),i=wn(n)?xn(n):n;return H1.some(u=>i[u]?i[u]!=="none":!1)||(i.containerType?i.containerType!=="normal":!1)||!l&&(i.backdropFilter?i.backdropFilter!=="none":!1)||!l&&(i.filter?i.filter!=="none":!1)||j1.some(u=>(i.willChange||"").includes(u))||L1.some(u=>(i.contain||"").includes(u))}function Y1(n){let l=Za(n);for(;Hn(l)&&!rr(l);){if(of(l))return l;if(so(l))return null;l=Za(l)}return null}function sf(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const q1=new Set(["html","body","#document"]);function rr(n){return q1.has(cr(n))}function xn(n){return an(n).getComputedStyle(n)}function co(n){return wn(n)?{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}:{scrollLeft:n.scrollX,scrollTop:n.scrollY}}function Za(n){if(cr(n)==="html")return n;const l=n.assignedSlot||n.parentNode||Ng(n)&&n.host||jn(n);return Ng(l)?l.host:l}function Fv(n){const l=Za(n);return rr(l)?n.ownerDocument?n.ownerDocument.body:n.body:Hn(l)&&bi(l)?l:Fv(l)}function vi(n,l,i){var u;l===void 0&&(l=[]),i===void 0&&(i=!0);const c=Fv(n),f=c===((u=n.ownerDocument)==null?void 0:u.body),d=an(c);if(f){const m=Jc(d);return l.concat(d,d.visualViewport||[],bi(c)?c:[],m&&i?vi(m):[])}return l.concat(c,vi(c,[],i))}function Jc(n){return n.parent&&Object.getPrototypeOf(n.parent)?n.frameElement:null}function Wv(n){const l=xn(n);let i=parseFloat(l.width)||0,u=parseFloat(l.height)||0;const c=Hn(n),f=c?n.offsetWidth:i,d=c?n.offsetHeight:u,m=Fu(i)!==f||Fu(u)!==d;return m&&(i=f,u=d),{width:i,height:u,$:m}}function cf(n){return wn(n)?n:n.contextElement}function ar(n){const l=cf(n);if(!Hn(l))return Bn(1);const i=l.getBoundingClientRect(),{width:u,height:c,$:f}=Wv(l);let d=(f?Fu(i.width):i.width)/u,m=(f?Fu(i.height):i.height)/c;return(!d||!Number.isFinite(d))&&(d=1),(!m||!Number.isFinite(m))&&(m=1),{x:d,y:m}}const G1=Bn(0);function Pv(n){const l=an(n);return!sf()||!l.visualViewport?G1:{x:l.visualViewport.offsetLeft,y:l.visualViewport.offsetTop}}function X1(n,l,i){return l===void 0&&(l=!1),!i||l&&i!==an(n)?!1:l}function il(n,l,i,u){l===void 0&&(l=!1),i===void 0&&(i=!1);const c=n.getBoundingClientRect(),f=cf(n);let d=Bn(1);l&&(u?wn(u)&&(d=ar(u)):d=ar(n));const m=X1(f,i,u)?Pv(f):Bn(0);let p=(c.left+m.x)/d.x,v=(c.top+m.y)/d.y,b=c.width/d.x,y=c.height/d.y;if(f){const x=an(f),T=u&&wn(u)?an(u):u;let k=x,C=Jc(k);for(;C&&u&&T!==k;){const B=ar(C),X=C.getBoundingClientRect(),H=xn(C),K=X.left+(C.clientLeft+parseFloat(H.paddingLeft))*B.x,F=X.top+(C.clientTop+parseFloat(H.paddingTop))*B.y;p*=B.x,v*=B.y,b*=B.x,y*=B.y,p+=K,v+=F,k=an(C),C=Jc(k)}}return Pu({width:b,height:y,x:p,y:v})}function fo(n,l){const i=co(n).scrollLeft;return l?l.left+i:il(jn(n)).left+i}function Iv(n,l){const i=n.getBoundingClientRect(),u=i.left+l.scrollLeft-fo(n,i),c=i.top+l.scrollTop;return{x:u,y:c}}function Q1(n){let{elements:l,rect:i,offsetParent:u,strategy:c}=n;const f=c==="fixed",d=jn(u),m=l?so(l.floating):!1;if(u===d||m&&f)return i;let p={scrollLeft:0,scrollTop:0},v=Bn(1);const b=Bn(0),y=Hn(u);if((y||!y&&!f)&&((cr(u)!=="body"||bi(d))&&(p=co(u)),Hn(u))){const T=il(u);v=ar(u),b.x=T.x+u.clientLeft,b.y=T.y+u.clientTop}const x=d&&!y&&!f?Iv(d,p):Bn(0);return{width:i.width*v.x,height:i.height*v.y,x:i.x*v.x-p.scrollLeft*v.x+b.x+x.x,y:i.y*v.y-p.scrollTop*v.y+b.y+x.y}}function $1(n){return Array.from(n.getClientRects())}function K1(n){const l=jn(n),i=co(n),u=n.ownerDocument.body,c=nn(l.scrollWidth,l.clientWidth,u.scrollWidth,u.clientWidth),f=nn(l.scrollHeight,l.clientHeight,u.scrollHeight,u.clientHeight);let d=-i.scrollLeft+fo(n);const m=-i.scrollTop;return xn(u).direction==="rtl"&&(d+=nn(l.clientWidth,u.clientWidth)-c),{width:c,height:f,x:d,y:m}}const Ug=25;function J1(n,l){const i=an(n),u=jn(n),c=i.visualViewport;let f=u.clientWidth,d=u.clientHeight,m=0,p=0;if(c){f=c.width,d=c.height;const b=sf();(!b||b&&l==="fixed")&&(m=c.offsetLeft,p=c.offsetTop)}const v=fo(u);if(v<=0){const b=u.ownerDocument,y=b.body,x=getComputedStyle(y),T=b.compatMode==="CSS1Compat"&&parseFloat(x.marginLeft)+parseFloat(x.marginRight)||0,k=Math.abs(u.clientWidth-y.clientWidth-T);k<=Ug&&(f-=k)}else v<=Ug&&(f+=v);return{width:f,height:d,x:m,y:p}}const F1=new Set(["absolute","fixed"]);function W1(n,l){const i=il(n,!0,l==="fixed"),u=i.top+n.clientTop,c=i.left+n.clientLeft,f=Hn(n)?ar(n):Bn(1),d=n.clientWidth*f.x,m=n.clientHeight*f.y,p=c*f.x,v=u*f.y;return{width:d,height:m,x:p,y:v}}function Zg(n,l,i){let u;if(l==="viewport")u=J1(n,i);else if(l==="document")u=K1(jn(n));else if(wn(l))u=W1(l,i);else{const c=Pv(n);u={x:l.x-c.x,y:l.y-c.y,width:l.width,height:l.height}}return Pu(u)}function ty(n,l){const i=Za(n);return i===l||!wn(i)||rr(i)?!1:xn(i).position==="fixed"||ty(i,l)}function P1(n,l){const i=l.get(n);if(i)return i;let u=vi(n,[],!1).filter(m=>wn(m)&&cr(m)!=="body"),c=null;const f=xn(n).position==="fixed";let d=f?Za(n):n;for(;wn(d)&&!rr(d);){const m=xn(d),p=of(d);!p&&m.position==="fixed"&&(c=null),(f?!p&&!c:!p&&m.position==="static"&&!!c&&F1.has(c.position)||bi(d)&&!p&&ty(n,d))?u=u.filter(b=>b!==d):c=m,d=Za(d)}return l.set(n,u),u}function I1(n){let{element:l,boundary:i,rootBoundary:u,strategy:c}=n;const d=[...i==="clippingAncestors"?so(l)?[]:P1(l,this._c):[].concat(i),u],m=d[0],p=d.reduce((v,b)=>{const y=Zg(l,b,c);return v.top=nn(y.top,v.top),v.right=Ua(y.right,v.right),v.bottom=Ua(y.bottom,v.bottom),v.left=nn(y.left,v.left),v},Zg(l,m,c));return{width:p.right-p.left,height:p.bottom-p.top,x:p.left,y:p.top}}function tS(n){const{width:l,height:i}=Wv(n);return{width:l,height:i}}function eS(n,l,i){const u=Hn(l),c=jn(l),f=i==="fixed",d=il(n,!0,f,l);let m={scrollLeft:0,scrollTop:0};const p=Bn(0);function v(){p.x=fo(c)}if(u||!u&&!f)if((cr(l)!=="body"||bi(c))&&(m=co(l)),u){const T=il(l,!0,f,l);p.x=T.x+l.clientLeft,p.y=T.y+l.clientTop}else c&&v();f&&!u&&c&&v();const b=c&&!u&&!f?Iv(c,m):Bn(0),y=d.left+m.scrollLeft-p.x-b.x,x=d.top+m.scrollTop-p.y-b.y;return{x:y,y:x,width:d.width,height:d.height}}function Zc(n){return xn(n).position==="static"}function Vg(n,l){if(!Hn(n)||xn(n).position==="fixed")return null;if(l)return l(n);let i=n.offsetParent;return jn(n)===i&&(i=i.ownerDocument.body),i}function ey(n,l){const i=an(n);if(so(n))return i;if(!Hn(n)){let c=Za(n);for(;c&&!rr(c);){if(wn(c)&&!Zc(c))return c;c=Za(c)}return i}let u=Vg(n,l);for(;u&&V1(u)&&Zc(u);)u=Vg(u,l);return u&&rr(u)&&Zc(u)&&!of(u)?i:u||Y1(n)||i}const nS=async function(n){const l=this.getOffsetParent||ey,i=this.getDimensions,u=await i(n.floating);return{reference:eS(n.reference,await l(n.floating),n.strategy),floating:{x:0,y:0,width:u.width,height:u.height}}};function aS(n){return xn(n).direction==="rtl"}const lS={convertOffsetParentRelativeRectToViewportRelativeRect:Q1,getDocumentElement:jn,getClippingRect:I1,getOffsetParent:ey,getElementRects:nS,getClientRects:$1,getDimensions:tS,getScale:ar,isElement:wn,isRTL:aS};function ny(n,l){return n.x===l.x&&n.y===l.y&&n.width===l.width&&n.height===l.height}function rS(n,l){let i=null,u;const c=jn(n);function f(){var m;clearTimeout(u),(m=i)==null||m.disconnect(),i=null}function d(m,p){m===void 0&&(m=!1),p===void 0&&(p=1),f();const v=n.getBoundingClientRect(),{left:b,top:y,width:x,height:T}=v;if(m||l(),!x||!T)return;const k=ju(y),C=ju(c.clientWidth-(b+x)),B=ju(c.clientHeight-(y+T)),X=ju(b),K={rootMargin:-k+"px "+-C+"px "+-B+"px "+-X+"px",threshold:nn(0,Ua(1,p))||1};let F=!0;function Z(tt){const ut=tt[0].intersectionRatio;if(ut!==p){if(!F)return d();ut?d(!1,ut):u=setTimeout(()=>{d(!1,1e-7)},1e3)}ut===1&&!ny(v,n.getBoundingClientRect())&&d(),F=!1}try{i=new IntersectionObserver(Z,{...K,root:c.ownerDocument})}catch{i=new IntersectionObserver(Z,K)}i.observe(n)}return d(!0),f}function z2(n,l,i,u){u===void 0&&(u={});const{ancestorScroll:c=!0,ancestorResize:f=!0,elementResize:d=typeof ResizeObserver=="function",layoutShift:m=typeof IntersectionObserver=="function",animationFrame:p=!1}=u,v=cf(n),b=c||f?[...v?vi(v):[],...vi(l)]:[];b.forEach(X=>{c&&X.addEventListener("scroll",i,{passive:!0}),f&&X.addEventListener("resize",i)});const y=v&&m?rS(v,i):null;let x=-1,T=null;d&&(T=new ResizeObserver(X=>{let[H]=X;H&&H.target===v&&T&&(T.unobserve(l),cancelAnimationFrame(x),x=requestAnimationFrame(()=>{var K;(K=T)==null||K.observe(l)})),i()}),v&&!p&&T.observe(v),T.observe(l));let k,C=p?il(n):null;p&&B();function B(){const X=il(n);C&&!ny(C,X)&&i(),C=X,k=requestAnimationFrame(B)}return i(),()=>{var X;b.forEach(H=>{c&&H.removeEventListener("scroll",i),f&&H.removeEventListener("resize",i)}),y?.(),(X=T)==null||X.disconnect(),T=null,p&&cancelAnimationFrame(k)}}const iS=M1,uS=C1,oS=O1,sS=N1,cS=R1,Bg=T1,fS=k1,dS=(n,l,i)=>{const u=new Map,c={platform:lS,...i},f={...c.platform,_c:u};return z1(n,l,{...c,platform:f})};var hS=typeof document<"u",mS=function(){},Ku=hS?it.useLayoutEffect:mS;function Iu(n,l){if(n===l)return!0;if(typeof n!=typeof l)return!1;if(typeof n=="function"&&n.toString()===l.toString())return!0;let i,u,c;if(n&&l&&typeof n=="object"){if(Array.isArray(n)){if(i=n.length,i!==l.length)return!1;for(u=i;u--!==0;)if(!Iu(n[u],l[u]))return!1;return!0}if(c=Object.keys(n),i=c.length,i!==Object.keys(l).length)return!1;for(u=i;u--!==0;)if(!{}.hasOwnProperty.call(l,c[u]))return!1;for(u=i;u--!==0;){const f=c[u];if(!(f==="_owner"&&n.$$typeof)&&!Iu(n[f],l[f]))return!1}return!0}return n!==n&&l!==l}function ay(n){return typeof window>"u"?1:(n.ownerDocument.defaultView||window).devicePixelRatio||1}function Hg(n,l){const i=ay(n);return Math.round(l*i)/i}function Vc(n){const l=it.useRef(n);return Ku(()=>{l.current=n}),l}function T2(n){n===void 0&&(n={});const{placement:l="bottom",strategy:i="absolute",middleware:u=[],platform:c,elements:{reference:f,floating:d}={},transform:m=!0,whileElementsMounted:p,open:v}=n,[b,y]=it.useState({x:0,y:0,strategy:i,placement:l,middlewareData:{},isPositioned:!1}),[x,T]=it.useState(u);Iu(x,u)||T(u);const[k,C]=it.useState(null),[B,X]=it.useState(null),H=it.useCallback(U=>{U!==tt.current&&(tt.current=U,C(U))},[]),K=it.useCallback(U=>{U!==ut.current&&(ut.current=U,X(U))},[]),F=f||k,Z=d||B,tt=it.useRef(null),ut=it.useRef(null),W=it.useRef(b),vt=p!=null,Rt=Vc(p),Et=Vc(c),lt=Vc(v),ot=it.useCallback(()=>{if(!tt.current||!ut.current)return;const U={placement:l,strategy:i,middleware:x};Et.current&&(U.platform=Et.current),dS(tt.current,ut.current,U).then(gt=>{const _={...gt,isPositioned:lt.current!==!1};yt.current&&!Iu(W.current,_)&&(W.current=_,Tv.flushSync(()=>{y(_)}))})},[x,l,i,Et,lt]);Ku(()=>{v===!1&&W.current.isPositioned&&(W.current.isPositioned=!1,y(U=>({...U,isPositioned:!1})))},[v]);const yt=it.useRef(!1);Ku(()=>(yt.current=!0,()=>{yt.current=!1}),[]),Ku(()=>{if(F&&(tt.current=F),Z&&(ut.current=Z),F&&Z){if(Rt.current)return Rt.current(F,Z,ot);ot()}},[F,Z,ot,Rt,vt]);const bt=it.useMemo(()=>({reference:tt,floating:ut,setReference:H,setFloating:K}),[H,K]),A=it.useMemo(()=>({reference:F,floating:Z}),[F,Z]),L=it.useMemo(()=>{const U={position:i,left:0,top:0};if(!A.floating)return U;const gt=Hg(A.floating,b.x),_=Hg(A.floating,b.y);return m?{...U,transform:"translate("+gt+"px, "+_+"px)",...ay(A.floating)>=1.5&&{willChange:"transform"}}:{position:i,left:gt,top:_}},[i,m,A.floating,b.x,b.y]);return it.useMemo(()=>({...b,update:ot,refs:bt,elements:A,floatingStyles:L}),[b,ot,bt,A,L])}const gS=n=>{function l(i){return{}.hasOwnProperty.call(i,"current")}return{name:"arrow",options:n,fn(i){const{element:u,padding:c}=typeof n=="function"?n(i):n;return u&&l(u)?u.current!=null?Bg({element:u.current,padding:c}).fn(i):{}:u?Bg({element:u,padding:c}).fn(i):{}}}},O2=(n,l)=>({...iS(n),options:[n,l]}),R2=(n,l)=>({...uS(n),options:[n,l]}),D2=(n,l)=>({...fS(n),options:[n,l]}),M2=(n,l)=>({...oS(n),options:[n,l]}),C2=(n,l)=>({...sS(n),options:[n,l]}),k2=(n,l)=>({...cS(n),options:[n,l]}),N2=(n,l)=>({...gS(n),options:[n,l]});var vS=(n,l,i,u,c,f,d,m)=>{let p=document.documentElement,v=["light","dark"];function b(T){(Array.isArray(n)?n:[n]).forEach(k=>{let C=k==="class",B=C&&f?c.map(X=>f[X]||X):c;C?(p.classList.remove(...B),p.classList.add(f&&f[T]?f[T]:T)):p.setAttribute(k,T)}),y(T)}function y(T){m&&v.includes(T)&&(p.style.colorScheme=T)}function x(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)b(u);else try{let T=localStorage.getItem(l)||i,k=d&&T==="system"?x():T;b(k)}catch{}},jg=["light","dark"],ly="(prefers-color-scheme: dark)",yS=typeof window>"u",ff=it.createContext(void 0),pS={setTheme:n=>{},themes:[]},U2=()=>{var n;return(n=it.useContext(ff))!=null?n:pS},Z2=n=>it.useContext(ff)?it.createElement(it.Fragment,null,n.children):it.createElement(SS,{...n}),bS=["light","dark"],SS=({forcedTheme:n,disableTransitionOnChange:l=!1,enableSystem:i=!0,enableColorScheme:u=!0,storageKey:c="theme",themes:f=bS,defaultTheme:d=i?"system":"light",attribute:m="data-theme",value:p,children:v,nonce:b,scriptProps:y})=>{let[x,T]=it.useState(()=>wS(c,d)),[k,C]=it.useState(()=>x==="system"?Bc():x),B=p?Object.values(p):f,X=it.useCallback(Z=>{let tt=Z;if(!tt)return;Z==="system"&&i&&(tt=Bc());let ut=p?p[tt]:tt,W=l?xS(b):null,vt=document.documentElement,Rt=Et=>{Et==="class"?(vt.classList.remove(...B),ut&&vt.classList.add(ut)):Et.startsWith("data-")&&(ut?vt.setAttribute(Et,ut):vt.removeAttribute(Et))};if(Array.isArray(m)?m.forEach(Rt):Rt(m),u){let Et=jg.includes(d)?d:null,lt=jg.includes(tt)?tt:Et;vt.style.colorScheme=lt}W?.()},[b]),H=it.useCallback(Z=>{let tt=typeof Z=="function"?Z(x):Z;T(tt);try{localStorage.setItem(c,tt)}catch{}},[x]),K=it.useCallback(Z=>{let tt=Bc(Z);C(tt),x==="system"&&i&&!n&&X("system")},[x,n]);it.useEffect(()=>{let Z=window.matchMedia(ly);return Z.addListener(K),K(Z),()=>Z.removeListener(K)},[K]),it.useEffect(()=>{let Z=tt=>{tt.key===c&&(tt.newValue?T(tt.newValue):H(d))};return window.addEventListener("storage",Z),()=>window.removeEventListener("storage",Z)},[H]),it.useEffect(()=>{X(n??x)},[n,x]);let F=it.useMemo(()=>({theme:x,setTheme:H,forcedTheme:n,resolvedTheme:x==="system"?k:x,themes:i?[...f,"system"]:f,systemTheme:i?k:void 0}),[x,H,n,k,i,f]);return it.createElement(ff.Provider,{value:F},it.createElement(_S,{forcedTheme:n,storageKey:c,attribute:m,enableSystem:i,enableColorScheme:u,defaultTheme:d,value:p,themes:f,nonce:b,scriptProps:y}),v)},_S=it.memo(({forcedTheme:n,storageKey:l,attribute:i,enableSystem:u,enableColorScheme:c,defaultTheme:f,value:d,themes:m,nonce:p,scriptProps:v})=>{let b=JSON.stringify([i,l,f,n,m,d,u,c]).slice(1,-1);return it.createElement("script",{...v,suppressHydrationWarning:!0,nonce:typeof window>"u"?p:"",dangerouslySetInnerHTML:{__html:`(${vS.toString()})(${b})`}})}),wS=(n,l)=>{if(yS)return;let i;try{i=localStorage.getItem(n)||void 0}catch{}return i||l},xS=n=>{let l=document.createElement("style");return n&&l.setAttribute("nonce",n),l.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(l),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(l)},1)}},Bc=n=>(n||(n=window.matchMedia(ly)),n.matches?"dark":"light"),Si=n=>n.type==="checkbox",rl=n=>n instanceof Date,He=n=>n==null;const ry=n=>typeof n=="object";var ce=n=>!He(n)&&!Array.isArray(n)&&ry(n)&&!rl(n),iy=n=>ce(n)&&n.target?Si(n.target)?n.target.checked:n.target.value:n,ES=n=>n.substring(0,n.search(/\.\d+(\.|$)/))||n,uy=(n,l)=>n.has(ES(l)),AS=n=>{const l=n.constructor&&n.constructor.prototype;return ce(l)&&l.hasOwnProperty("isPrototypeOf")},df=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function Se(n){let l;const i=Array.isArray(n),u=typeof FileList<"u"?n instanceof FileList:!1;if(n instanceof Date)l=new Date(n);else if(!(df&&(n instanceof Blob||u))&&(i||ce(n)))if(l=i?[]:Object.create(Object.getPrototypeOf(n)),!i&&!AS(n))l=n;else for(const c in n)n.hasOwnProperty(c)&&(l[c]=Se(n[c]));else return n;return l}var ho=n=>/^\w*$/.test(n),se=n=>n===void 0,hf=n=>Array.isArray(n)?n.filter(Boolean):[],mf=n=>hf(n.replace(/["|']|\]/g,"").split(/\.|\[/)),rt=(n,l,i)=>{if(!l||!ce(n))return i;const u=(ho(l)?[l]:mf(l)).reduce((c,f)=>He(c)?c:c[f],n);return se(u)||u===n?se(n[l])?i:n[l]:u},en=n=>typeof n=="boolean",qt=(n,l,i)=>{let u=-1;const c=ho(l)?[l]:mf(l),f=c.length,d=f-1;for(;++uq.useContext(gf),V2=n=>{const{children:l,...i}=n;return q.createElement(gf.Provider,{value:i},l)};var oy=(n,l,i,u=!0)=>{const c={defaultValues:l._defaultValues};for(const f in n)Object.defineProperty(c,f,{get:()=>{const d=f;return l._proxyFormState[d]!==Sn.all&&(l._proxyFormState[d]=!u||Sn.all),i&&(i[d]=!0),n[d]}});return c};const yf=typeof window<"u"?q.useLayoutEffect:q.useEffect;function zS(n){const l=vf(),{control:i=l.control,disabled:u,name:c,exact:f}=n||{},[d,m]=q.useState(i._formState),p=q.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1});return yf(()=>i._subscribe({name:c,formState:p.current,exact:f,callback:v=>{!u&&m({...i._formState,...v})}}),[c,u,f]),q.useEffect(()=>{p.current.isValid&&i._setValid(!0)},[i]),q.useMemo(()=>oy(d,i,p.current,!1),[d,i])}var Vn=n=>typeof n=="string",sy=(n,l,i,u,c)=>Vn(n)?(u&&l.watch.add(n),rt(i,n,c)):Array.isArray(n)?n.map(f=>(u&&l.watch.add(f),rt(i,f))):(u&&(l.watchAll=!0),i),Fc=n=>He(n)||!ry(n);function ua(n,l,i=new WeakSet){if(Fc(n)||Fc(l))return n===l;if(rl(n)&&rl(l))return n.getTime()===l.getTime();const u=Object.keys(n),c=Object.keys(l);if(u.length!==c.length)return!1;if(i.has(n)||i.has(l))return!0;i.add(n),i.add(l);for(const f of u){const d=n[f];if(!c.includes(f))return!1;if(f!=="ref"){const m=l[f];if(rl(d)&&rl(m)||ce(d)&&ce(m)||Array.isArray(d)&&Array.isArray(m)?!ua(d,m,i):d!==m)return!1}}return!0}function TS(n){const l=vf(),{control:i=l.control,name:u,defaultValue:c,disabled:f,exact:d,compute:m}=n||{},p=q.useRef(c),v=q.useRef(m),b=q.useRef(void 0);v.current=m;const y=q.useMemo(()=>i._getWatch(u,p.current),[i,u]),[x,T]=q.useState(v.current?v.current(y):y);return yf(()=>i._subscribe({name:u,formState:{values:!0},exact:d,callback:k=>{if(!f){const C=sy(u,i._names,k.values||i._formValues,!1,p.current);if(v.current){const B=v.current(C);ua(B,b.current)||(T(B),b.current=B)}else T(C)}}}),[i,f,u,d]),q.useEffect(()=>i._removeUnmounted()),x}function OS(n){const l=vf(),{name:i,disabled:u,control:c=l.control,shouldUnregister:f,defaultValue:d}=n,m=uy(c._names.array,i),p=q.useMemo(()=>rt(c._formValues,i,rt(c._defaultValues,i,d)),[c,i,d]),v=TS({control:c,name:i,defaultValue:p,exact:!0}),b=zS({control:c,name:i,exact:!0}),y=q.useRef(n),x=q.useRef(c.register(i,{...n.rules,value:v,...en(n.disabled)?{disabled:n.disabled}:{}}));y.current=n;const T=q.useMemo(()=>Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!rt(b.errors,i)},isDirty:{enumerable:!0,get:()=>!!rt(b.dirtyFields,i)},isTouched:{enumerable:!0,get:()=>!!rt(b.touchedFields,i)},isValidating:{enumerable:!0,get:()=>!!rt(b.validatingFields,i)},error:{enumerable:!0,get:()=>rt(b.errors,i)}}),[b,i]),k=q.useCallback(H=>x.current.onChange({target:{value:iy(H),name:i},type:to.CHANGE}),[i]),C=q.useCallback(()=>x.current.onBlur({target:{value:rt(c._formValues,i),name:i},type:to.BLUR}),[i,c._formValues]),B=q.useCallback(H=>{const K=rt(c._fields,i);K&&H&&(K._f.ref={focus:()=>H.focus&&H.focus(),select:()=>H.select&&H.select(),setCustomValidity:F=>H.setCustomValidity(F),reportValidity:()=>H.reportValidity()})},[c._fields,i]),X=q.useMemo(()=>({name:i,value:v,...en(u)||b.disabled?{disabled:b.disabled||u}:{},onChange:k,onBlur:C,ref:B}),[i,u,b.disabled,k,C,B,v]);return q.useEffect(()=>{const H=c._options.shouldUnregister||f;c.register(i,{...y.current.rules,...en(y.current.disabled)?{disabled:y.current.disabled}:{}});const K=(F,Z)=>{const tt=rt(c._fields,F);tt&&tt._f&&(tt._f.mount=Z)};if(K(i,!0),H){const F=Se(rt(c._options.defaultValues,i));qt(c._defaultValues,i,F),se(rt(c._formValues,i))&&qt(c._formValues,i,F)}return!m&&c.register(i),()=>{(m?H&&!c._state.action:H)?c.unregister(i):K(i,!1)}},[i,c,m,f]),q.useEffect(()=>{c._setDisabledField({disabled:u,name:i})},[u,i,c]),q.useMemo(()=>({field:X,formState:b,fieldState:T}),[X,b,T])}const B2=n=>n.render(OS(n));var pf=(n,l,i,u,c)=>l?{...i[n],types:{...i[n]&&i[n].types?i[n].types:{},[u]:c||!0}}:{},hi=n=>Array.isArray(n)?n:[n],Lg=()=>{let n=[];return{get observers(){return n},next:c=>{for(const f of n)f.next&&f.next(c)},subscribe:c=>(n.push(c),{unsubscribe:()=>{n=n.filter(f=>f!==c)}}),unsubscribe:()=>{n=[]}}},Ge=n=>ce(n)&&!Object.keys(n).length,bf=n=>n.type==="file",_n=n=>typeof n=="function",eo=n=>{if(!df)return!1;const l=n?n.ownerDocument:0;return n instanceof(l&&l.defaultView?l.defaultView.HTMLElement:HTMLElement)},cy=n=>n.type==="select-multiple",Sf=n=>n.type==="radio",RS=n=>Sf(n)||Si(n),Hc=n=>eo(n)&&n.isConnected;function DS(n,l){const i=l.slice(0,-1).length;let u=0;for(;u{for(const l in n)if(_n(n[l]))return!0;return!1};function no(n,l={}){const i=Array.isArray(n);if(ce(n)||i)for(const u in n)Array.isArray(n[u])||ce(n[u])&&!fy(n[u])?(l[u]=Array.isArray(n[u])?[]:{},no(n[u],l[u])):He(n[u])||(l[u]=!0);return l}function dy(n,l,i){const u=Array.isArray(n);if(ce(n)||u)for(const c in n)Array.isArray(n[c])||ce(n[c])&&!fy(n[c])?se(l)||Fc(i[c])?i[c]=Array.isArray(n[c])?no(n[c],[]):{...no(n[c])}:dy(n[c],He(l)?{}:l[c],i[c]):i[c]=!ua(n[c],l[c]);return i}var ci=(n,l)=>dy(n,l,no(l));const Yg={value:!1,isValid:!1},qg={value:!0,isValid:!0};var hy=n=>{if(Array.isArray(n)){if(n.length>1){const l=n.filter(i=>i&&i.checked&&!i.disabled).map(i=>i.value);return{value:l,isValid:!!l.length}}return n[0].checked&&!n[0].disabled?n[0].attributes&&!se(n[0].attributes.value)?se(n[0].value)||n[0].value===""?qg:{value:n[0].value,isValid:!0}:qg:Yg}return Yg},my=(n,{valueAsNumber:l,valueAsDate:i,setValueAs:u})=>se(n)?n:l?n===""?NaN:n&&+n:i&&Vn(n)?new Date(n):u?u(n):n;const Gg={isValid:!1,value:null};var gy=n=>Array.isArray(n)?n.reduce((l,i)=>i&&i.checked&&!i.disabled?{isValid:!0,value:i.value}:l,Gg):Gg;function Xg(n){const l=n.ref;return bf(l)?l.files:Sf(l)?gy(n.refs).value:cy(l)?[...l.selectedOptions].map(({value:i})=>i):Si(l)?hy(n.refs).value:my(se(l.value)?n.ref.value:l.value,n)}var CS=(n,l,i,u)=>{const c={};for(const f of n){const d=rt(l,f);d&&qt(c,f,d._f)}return{criteriaMode:i,names:[...n],fields:c,shouldUseNativeValidation:u}},ao=n=>n instanceof RegExp,fi=n=>se(n)?n:ao(n)?n.source:ce(n)?ao(n.value)?n.value.source:n.value:n,Qg=n=>({isOnSubmit:!n||n===Sn.onSubmit,isOnBlur:n===Sn.onBlur,isOnChange:n===Sn.onChange,isOnAll:n===Sn.all,isOnTouch:n===Sn.onTouched});const $g="AsyncFunction";var kS=n=>!!n&&!!n.validate&&!!(_n(n.validate)&&n.validate.constructor.name===$g||ce(n.validate)&&Object.values(n.validate).find(l=>l.constructor.name===$g)),NS=n=>n.mount&&(n.required||n.min||n.max||n.maxLength||n.minLength||n.pattern||n.validate),Kg=(n,l,i)=>!i&&(l.watchAll||l.watch.has(n)||[...l.watch].some(u=>n.startsWith(u)&&/^\.\w+/.test(n.slice(u.length))));const mi=(n,l,i,u)=>{for(const c of i||Object.keys(n)){const f=rt(n,c);if(f){const{_f:d,...m}=f;if(d){if(d.refs&&d.refs[0]&&l(d.refs[0],c)&&!u)return!0;if(d.ref&&l(d.ref,d.name)&&!u)return!0;if(mi(m,l))break}else if(ce(m)&&mi(m,l))break}}};function Jg(n,l,i){const u=rt(n,i);if(u||ho(i))return{error:u,name:i};const c=i.split(".");for(;c.length;){const f=c.join("."),d=rt(l,f),m=rt(n,f);if(d&&!Array.isArray(d)&&i!==f)return{name:i};if(m&&m.type)return{name:f,error:m};if(m&&m.root&&m.root.type)return{name:`${f}.root`,error:m.root};c.pop()}return{name:i}}var US=(n,l,i,u)=>{i(n);const{name:c,...f}=n;return Ge(f)||Object.keys(f).length>=Object.keys(l).length||Object.keys(f).find(d=>l[d]===(!u||Sn.all))},ZS=(n,l,i)=>!n||!l||n===l||hi(n).some(u=>u&&(i?u===l:u.startsWith(l)||l.startsWith(u))),VS=(n,l,i,u,c)=>c.isOnAll?!1:!i&&c.isOnTouch?!(l||n):(i?u.isOnBlur:c.isOnBlur)?!n:(i?u.isOnChange:c.isOnChange)?n:!0,BS=(n,l)=>!hf(rt(n,l)).length&&me(n,l),HS=(n,l,i)=>{const u=hi(rt(n,i));return qt(u,"root",l[i]),qt(n,i,u),n},Ju=n=>Vn(n);function Fg(n,l,i="validate"){if(Ju(n)||Array.isArray(n)&&n.every(Ju)||en(n)&&!n)return{type:i,message:Ju(n)?n:"",ref:l}}var tr=n=>ce(n)&&!ao(n)?n:{value:n,message:""},Wg=async(n,l,i,u,c,f)=>{const{ref:d,refs:m,required:p,maxLength:v,minLength:b,min:y,max:x,pattern:T,validate:k,name:C,valueAsNumber:B,mount:X}=n._f,H=rt(i,C);if(!X||l.has(C))return{};const K=m?m[0]:d,F=lt=>{c&&K.reportValidity&&(K.setCustomValidity(en(lt)?"":lt||""),K.reportValidity())},Z={},tt=Sf(d),ut=Si(d),W=tt||ut,vt=(B||bf(d))&&se(d.value)&&se(H)||eo(d)&&d.value===""||H===""||Array.isArray(H)&&!H.length,Rt=pf.bind(null,C,u,Z),Et=(lt,ot,yt,bt=ia.maxLength,A=ia.minLength)=>{const L=lt?ot:yt;Z[C]={type:lt?bt:A,message:L,ref:d,...Rt(lt?bt:A,L)}};if(f?!Array.isArray(H)||!H.length:p&&(!W&&(vt||He(H))||en(H)&&!H||ut&&!hy(m).isValid||tt&&!gy(m).isValid)){const{value:lt,message:ot}=Ju(p)?{value:!!p,message:p}:tr(p);if(lt&&(Z[C]={type:ia.required,message:ot,ref:K,...Rt(ia.required,ot)},!u))return F(ot),Z}if(!vt&&(!He(y)||!He(x))){let lt,ot;const yt=tr(x),bt=tr(y);if(!He(H)&&!isNaN(H)){const A=d.valueAsNumber||H&&+H;He(yt.value)||(lt=A>yt.value),He(bt.value)||(ot=Anew Date(new Date().toDateString()+" "+_),U=d.type=="time",gt=d.type=="week";Vn(yt.value)&&H&&(lt=U?L(H)>L(yt.value):gt?H>yt.value:A>new Date(yt.value)),Vn(bt.value)&&H&&(ot=U?L(H)+lt.value,bt=!He(ot.value)&&H.length<+ot.value;if((yt||bt)&&(Et(yt,lt.message,ot.message),!u))return F(Z[C].message),Z}if(T&&!vt&&Vn(H)){const{value:lt,message:ot}=tr(T);if(ao(lt)&&!H.match(lt)&&(Z[C]={type:ia.pattern,message:ot,ref:d,...Rt(ia.pattern,ot)},!u))return F(ot),Z}if(k){if(_n(k)){const lt=await k(H,i),ot=Fg(lt,K);if(ot&&(Z[C]={...ot,...Rt(ia.validate,ot.message)},!u))return F(ot.message),Z}else if(ce(k)){let lt={};for(const ot in k){if(!Ge(lt)&&!u)break;const yt=Fg(await k[ot](H,i),K,ot);yt&&(lt={...yt,...Rt(ot,yt.message)},F(yt.message),u&&(Z[C]=lt))}if(!Ge(lt)&&(Z[C]={ref:K,...lt},!u))return Z}}return F(!0),Z};const jS={mode:Sn.onSubmit,reValidateMode:Sn.onChange,shouldFocusError:!0};function LS(n={}){let l={...jS,...n},i={submitCount:0,isDirty:!1,isReady:!1,isLoading:_n(l.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:l.errors||{},disabled:l.disabled||!1},u={},c=ce(l.defaultValues)||ce(l.values)?Se(l.defaultValues||l.values)||{}:{},f=l.shouldUnregister?{}:Se(c),d={action:!1,mount:!1,watch:!1},m={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set},p,v=0;const b={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1};let y={...b};const x={array:Lg(),state:Lg()},T=l.criteriaMode===Sn.all,k=w=>D=>{clearTimeout(v),v=setTimeout(w,D)},C=async w=>{if(!l.disabled&&(b.isValid||y.isValid||w)){const D=l.resolver?Ge((await ut()).errors):await vt(u,!0);D!==i.isValid&&x.state.next({isValid:D})}},B=(w,D)=>{!l.disabled&&(b.isValidating||b.validatingFields||y.isValidating||y.validatingFields)&&((w||Array.from(m.mount)).forEach(V=>{V&&(D?qt(i.validatingFields,V,D):me(i.validatingFields,V))}),x.state.next({validatingFields:i.validatingFields,isValidating:!Ge(i.validatingFields)}))},X=(w,D=[],V,nt,et=!0,I=!0)=>{if(nt&&V&&!l.disabled){if(d.action=!0,I&&Array.isArray(rt(u,w))){const st=V(rt(u,w),nt.argA,nt.argB);et&&qt(u,w,st)}if(I&&Array.isArray(rt(i.errors,w))){const st=V(rt(i.errors,w),nt.argA,nt.argB);et&&qt(i.errors,w,st),BS(i.errors,w)}if((b.touchedFields||y.touchedFields)&&I&&Array.isArray(rt(i.touchedFields,w))){const st=V(rt(i.touchedFields,w),nt.argA,nt.argB);et&&qt(i.touchedFields,w,st)}(b.dirtyFields||y.dirtyFields)&&(i.dirtyFields=ci(c,f)),x.state.next({name:w,isDirty:Et(w,D),dirtyFields:i.dirtyFields,errors:i.errors,isValid:i.isValid})}else qt(f,w,D)},H=(w,D)=>{qt(i.errors,w,D),x.state.next({errors:i.errors})},K=w=>{i.errors=w,x.state.next({errors:i.errors,isValid:!1})},F=(w,D,V,nt)=>{const et=rt(u,w);if(et){const I=rt(f,w,se(V)?rt(c,w):V);se(I)||nt&&nt.defaultChecked||D?qt(f,w,D?I:Xg(et._f)):yt(w,I),d.mount&&C()}},Z=(w,D,V,nt,et)=>{let I=!1,st=!1;const zt={name:w};if(!l.disabled){if(!V||nt){(b.isDirty||y.isDirty)&&(st=i.isDirty,i.isDirty=zt.isDirty=Et(),I=st!==zt.isDirty);const kt=ua(rt(c,w),D);st=!!rt(i.dirtyFields,w),kt?me(i.dirtyFields,w):qt(i.dirtyFields,w,!0),zt.dirtyFields=i.dirtyFields,I=I||(b.dirtyFields||y.dirtyFields)&&st!==!kt}if(V){const kt=rt(i.touchedFields,w);kt||(qt(i.touchedFields,w,V),zt.touchedFields=i.touchedFields,I=I||(b.touchedFields||y.touchedFields)&&kt!==V)}I&&et&&x.state.next(zt)}return I?zt:{}},tt=(w,D,V,nt)=>{const et=rt(i.errors,w),I=(b.isValid||y.isValid)&&en(D)&&i.isValid!==D;if(l.delayError&&V?(p=k(()=>H(w,V)),p(l.delayError)):(clearTimeout(v),p=null,V?qt(i.errors,w,V):me(i.errors,w)),(V?!ua(et,V):et)||!Ge(nt)||I){const st={...nt,...I&&en(D)?{isValid:D}:{},errors:i.errors,name:w};i={...i,...st},x.state.next(st)}},ut=async w=>{B(w,!0);const D=await l.resolver(f,l.context,CS(w||m.mount,u,l.criteriaMode,l.shouldUseNativeValidation));return B(w),D},W=async w=>{const{errors:D}=await ut(w);if(w)for(const V of w){const nt=rt(D,V);nt?qt(i.errors,V,nt):me(i.errors,V)}else i.errors=D;return D},vt=async(w,D,V={valid:!0})=>{for(const nt in w){const et=w[nt];if(et){const{_f:I,...st}=et;if(I){const zt=m.array.has(I.name),kt=et._f&&kS(et._f);kt&&b.validatingFields&&B([nt],!0);const jt=await Wg(et,m.disabled,f,T,l.shouldUseNativeValidation&&!D,zt);if(kt&&b.validatingFields&&B([nt]),jt[I.name]&&(V.valid=!1,D))break;!D&&(rt(jt,I.name)?zt?HS(i.errors,jt,I.name):qt(i.errors,I.name,jt[I.name]):me(i.errors,I.name))}!Ge(st)&&await vt(st,D,V)}}return V.valid},Rt=()=>{for(const w of m.unMount){const D=rt(u,w);D&&(D._f.refs?D._f.refs.every(V=>!Hc(V)):!Hc(D._f.ref))&&Ot(w)}m.unMount=new Set},Et=(w,D)=>!l.disabled&&(w&&D&&qt(f,w,D),!ua(_(),c)),lt=(w,D,V)=>sy(w,m,{...d.mount?f:se(D)?c:Vn(w)?{[w]:D}:D},V,D),ot=w=>hf(rt(d.mount?f:c,w,l.shouldUnregister?rt(c,w,[]):[])),yt=(w,D,V={})=>{const nt=rt(u,w);let et=D;if(nt){const I=nt._f;I&&(!I.disabled&&qt(f,w,my(D,I)),et=eo(I.ref)&&He(D)?"":D,cy(I.ref)?[...I.ref.options].forEach(st=>st.selected=et.includes(st.value)):I.refs?Si(I.ref)?I.refs.forEach(st=>{(!st.defaultChecked||!st.disabled)&&(Array.isArray(et)?st.checked=!!et.find(zt=>zt===st.value):st.checked=et===st.value||!!et)}):I.refs.forEach(st=>st.checked=st.value===et):bf(I.ref)?I.ref.value="":(I.ref.value=et,I.ref.type||x.state.next({name:w,values:Se(f)})))}(V.shouldDirty||V.shouldTouch)&&Z(w,et,V.shouldTouch,V.shouldDirty,!0),V.shouldValidate&>(w)},bt=(w,D,V)=>{for(const nt in D){if(!D.hasOwnProperty(nt))return;const et=D[nt],I=w+"."+nt,st=rt(u,I);(m.array.has(w)||ce(et)||st&&!st._f)&&!rl(et)?bt(I,et,V):yt(I,et,V)}},A=(w,D,V={})=>{const nt=rt(u,w),et=m.array.has(w),I=Se(D);qt(f,w,I),et?(x.array.next({name:w,values:Se(f)}),(b.isDirty||b.dirtyFields||y.isDirty||y.dirtyFields)&&V.shouldDirty&&x.state.next({name:w,dirtyFields:ci(c,f),isDirty:Et(w,I)})):nt&&!nt._f&&!He(I)?bt(w,I,V):yt(w,I,V),Kg(w,m)&&x.state.next({...i,name:w}),x.state.next({name:d.mount?w:void 0,values:Se(f)})},L=async w=>{d.mount=!0;const D=w.target;let V=D.name,nt=!0;const et=rt(u,V),I=kt=>{nt=Number.isNaN(kt)||rl(kt)&&isNaN(kt.getTime())||ua(kt,rt(f,V,kt))},st=Qg(l.mode),zt=Qg(l.reValidateMode);if(et){let kt,jt;const Qe=D.type?Xg(et._f):iy(w),$e=w.type===to.BLUR||w.type===to.FOCUS_OUT,An=!NS(et._f)&&!l.resolver&&!rt(i.errors,V)&&!et._f.deps||VS($e,rt(i.touchedFields,V),i.isSubmitted,zt,st),zn=Kg(V,m,$e);qt(f,V,Qe),$e?(!D||!D.readOnly)&&(et._f.onBlur&&et._f.onBlur(w),p&&p(0)):et._f.onChange&&et._f.onChange(w);const Tn=Z(V,Qe,$e),ln=!Ge(Tn)||zn;if(!$e&&x.state.next({name:V,type:w.type,values:Se(f)}),An)return(b.isValid||y.isValid)&&(l.mode==="onBlur"?$e&&C():$e||C()),ln&&x.state.next({name:V,...zn?{}:Tn});if(!$e&&zn&&x.state.next({...i}),l.resolver){const{errors:On}=await ut([V]);if(I(Qe),nt){const Yn=Jg(i.errors,u,V),ca=Jg(On,u,Yn.name||V);kt=ca.error,V=ca.name,jt=Ge(On)}}else B([V],!0),kt=(await Wg(et,m.disabled,f,T,l.shouldUseNativeValidation))[V],B([V]),I(Qe),nt&&(kt?jt=!1:(b.isValid||y.isValid)&&(jt=await vt(u,!0)));nt&&(et._f.deps&>(et._f.deps),tt(V,jt,kt,Tn))}},U=(w,D)=>{if(rt(i.errors,D)&&w.focus)return w.focus(),1},gt=async(w,D={})=>{let V,nt;const et=hi(w);if(l.resolver){const I=await W(se(w)?w:et);V=Ge(I),nt=w?!et.some(st=>rt(I,st)):V}else w?(nt=(await Promise.all(et.map(async I=>{const st=rt(u,I);return await vt(st&&st._f?{[I]:st}:st)}))).every(Boolean),!(!nt&&!i.isValid)&&C()):nt=V=await vt(u);return x.state.next({...!Vn(w)||(b.isValid||y.isValid)&&V!==i.isValid?{}:{name:w},...l.resolver||!w?{isValid:V}:{},errors:i.errors}),D.shouldFocus&&!nt&&mi(u,U,w?et:m.mount),nt},_=w=>{const D={...d.mount?f:c};return se(w)?D:Vn(w)?rt(D,w):w.map(V=>rt(D,V))},Q=(w,D)=>({invalid:!!rt((D||i).errors,w),isDirty:!!rt((D||i).dirtyFields,w),error:rt((D||i).errors,w),isValidating:!!rt(i.validatingFields,w),isTouched:!!rt((D||i).touchedFields,w)}),at=w=>{w&&hi(w).forEach(D=>me(i.errors,D)),x.state.next({errors:w?i.errors:{}})},j=(w,D,V)=>{const nt=(rt(u,w,{_f:{}})._f||{}).ref,et=rt(i.errors,w)||{},{ref:I,message:st,type:zt,...kt}=et;qt(i.errors,w,{...kt,...D,ref:nt}),x.state.next({name:w,errors:i.errors,isValid:!1}),V&&V.shouldFocus&&nt&&nt.focus&&nt.focus()},P=(w,D)=>_n(w)?x.state.subscribe({next:V=>"values"in V&&w(lt(void 0,D),V)}):lt(w,D,!0),ht=w=>x.state.subscribe({next:D=>{ZS(w.name,D.name,w.exact)&&US(D,w.formState||b,xe,w.reRenderRoot)&&w.callback({values:{...f},...i,...D,defaultValues:c})}}).unsubscribe,mt=w=>(d.mount=!0,y={...y,...w.formState},ht({...w,formState:y})),Ot=(w,D={})=>{for(const V of w?hi(w):m.mount)m.mount.delete(V),m.array.delete(V),D.keepValue||(me(u,V),me(f,V)),!D.keepError&&me(i.errors,V),!D.keepDirty&&me(i.dirtyFields,V),!D.keepTouched&&me(i.touchedFields,V),!D.keepIsValidating&&me(i.validatingFields,V),!l.shouldUnregister&&!D.keepDefaultValue&&me(c,V);x.state.next({values:Se(f)}),x.state.next({...i,...D.keepDirty?{isDirty:Et()}:{}}),!D.keepIsValid&&C()},St=({disabled:w,name:D})=>{(en(w)&&d.mount||w||m.disabled.has(D))&&(w?m.disabled.add(D):m.disabled.delete(D))},Wt=(w,D={})=>{let V=rt(u,w);const nt=en(D.disabled)||en(l.disabled);return qt(u,w,{...V||{},_f:{...V&&V._f?V._f:{ref:{name:w}},name:w,mount:!0,...D}}),m.mount.add(w),V?St({disabled:en(D.disabled)?D.disabled:l.disabled,name:w}):F(w,!0,D.value),{...nt?{disabled:D.disabled||l.disabled}:{},...l.progressive?{required:!!D.required,min:fi(D.min),max:fi(D.max),minLength:fi(D.minLength),maxLength:fi(D.maxLength),pattern:fi(D.pattern)}:{},name:w,onChange:L,onBlur:L,ref:et=>{if(et){Wt(w,D),V=rt(u,w);const I=se(et.value)&&et.querySelectorAll&&et.querySelectorAll("input,select,textarea")[0]||et,st=RS(I),zt=V._f.refs||[];if(st?zt.find(kt=>kt===I):I===V._f.ref)return;qt(u,w,{_f:{...V._f,...st?{refs:[...zt.filter(Hc),I,...Array.isArray(rt(c,w))?[{}]:[]],ref:{type:I.type,name:w}}:{ref:I}}}),F(w,!1,void 0,I)}else V=rt(u,w,{}),V._f&&(V._f.mount=!1),(l.shouldUnregister||D.shouldUnregister)&&!(uy(m.array,w)&&d.action)&&m.unMount.add(w)}}},Re=()=>l.shouldFocusError&&mi(u,U,m.mount),Ze=w=>{en(w)&&(x.state.next({disabled:w}),mi(u,(D,V)=>{const nt=rt(u,V);nt&&(D.disabled=nt._f.disabled||w,Array.isArray(nt._f.refs)&&nt._f.refs.forEach(et=>{et.disabled=nt._f.disabled||w}))},0,!1))},we=(w,D)=>async V=>{let nt;V&&(V.preventDefault&&V.preventDefault(),V.persist&&V.persist());let et=Se(f);if(x.state.next({isSubmitting:!0}),l.resolver){const{errors:I,values:st}=await ut();i.errors=I,et=Se(st)}else await vt(u);if(m.disabled.size)for(const I of m.disabled)me(et,I);if(me(i.errors,"root"),Ge(i.errors)){x.state.next({errors:{}});try{await w(et,V)}catch(I){nt=I}}else D&&await D({...i.errors},V),Re(),setTimeout(Re);if(x.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:Ge(i.errors)&&!nt,submitCount:i.submitCount+1,errors:i.errors}),nt)throw nt},Ha=(w,D={})=>{rt(u,w)&&(se(D.defaultValue)?A(w,Se(rt(c,w))):(A(w,D.defaultValue),qt(c,w,Se(D.defaultValue))),D.keepTouched||me(i.touchedFields,w),D.keepDirty||(me(i.dirtyFields,w),i.isDirty=D.defaultValue?Et(w,Se(rt(c,w))):Et()),D.keepError||(me(i.errors,w),b.isValid&&C()),x.state.next({...i}))},En=(w,D={})=>{const V=w?Se(w):c,nt=Se(V),et=Ge(w),I=et?c:nt;if(D.keepDefaultValues||(c=V),!D.keepValues){if(D.keepDirtyValues){const st=new Set([...m.mount,...Object.keys(ci(c,f))]);for(const zt of Array.from(st))rt(i.dirtyFields,zt)?qt(I,zt,rt(f,zt)):A(zt,rt(I,zt))}else{if(df&&se(w))for(const st of m.mount){const zt=rt(u,st);if(zt&&zt._f){const kt=Array.isArray(zt._f.refs)?zt._f.refs[0]:zt._f.ref;if(eo(kt)){const jt=kt.closest("form");if(jt){jt.reset();break}}}}if(D.keepFieldsRef)for(const st of m.mount)A(st,rt(I,st));else u={}}f=l.shouldUnregister?D.keepDefaultValues?Se(c):{}:Se(I),x.array.next({values:{...I}}),x.state.next({values:{...I}})}m={mount:D.keepDirtyValues?m.mount:new Set,unMount:new Set,array:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},d.mount=!b.isValid||!!D.keepIsValid||!!D.keepDirtyValues,d.watch=!!l.shouldUnregister,x.state.next({submitCount:D.keepSubmitCount?i.submitCount:0,isDirty:et?!1:D.keepDirty?i.isDirty:!!(D.keepDefaultValues&&!ua(w,c)),isSubmitted:D.keepIsSubmitted?i.isSubmitted:!1,dirtyFields:et?{}:D.keepDirtyValues?D.keepDefaultValues&&f?ci(c,f):i.dirtyFields:D.keepDefaultValues&&w?ci(c,w):D.keepDirty?i.dirtyFields:{},touchedFields:D.keepTouched?i.touchedFields:{},errors:D.keepErrors?i.errors:{},isSubmitSuccessful:D.keepIsSubmitSuccessful?i.isSubmitSuccessful:!1,isSubmitting:!1,defaultValues:c})},sl=(w,D)=>En(_n(w)?w(f):w,D),cl=(w,D={})=>{const V=rt(u,w),nt=V&&V._f;if(nt){const et=nt.refs?nt.refs[0]:nt.ref;et.focus&&(et.focus(),D.shouldSelect&&_n(et.select)&&et.select())}},xe=w=>{i={...i,...w}},Ve={control:{register:Wt,unregister:Ot,getFieldState:Q,handleSubmit:we,setError:j,_subscribe:ht,_runSchema:ut,_focusError:Re,_getWatch:lt,_getDirty:Et,_setValid:C,_setFieldArray:X,_setDisabledField:St,_setErrors:K,_getFieldArray:ot,_reset:En,_resetDefaultValues:()=>_n(l.defaultValues)&&l.defaultValues().then(w=>{sl(w,l.resetOptions),x.state.next({isLoading:!1})}),_removeUnmounted:Rt,_disableForm:Ze,_subjects:x,_proxyFormState:b,get _fields(){return u},get _formValues(){return f},get _state(){return d},set _state(w){d=w},get _defaultValues(){return c},get _names(){return m},set _names(w){m=w},get _formState(){return i},get _options(){return l},set _options(w){l={...l,...w}}},subscribe:mt,trigger:gt,register:Wt,handleSubmit:we,watch:P,setValue:A,getValues:_,reset:sl,resetField:Ha,clearErrors:at,unregister:Ot,setError:j,setFocus:cl,getFieldState:Q};return{...Ve,formControl:Ve}}function H2(n={}){const l=q.useRef(void 0),i=q.useRef(void 0),[u,c]=q.useState({isDirty:!1,isValidating:!1,isLoading:_n(n.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:n.errors||{},disabled:n.disabled||!1,isReady:!1,defaultValues:_n(n.defaultValues)?void 0:n.defaultValues});if(!l.current)if(n.formControl)l.current={...n.formControl,formState:u},n.defaultValues&&!_n(n.defaultValues)&&n.formControl.reset(n.defaultValues,n.resetOptions);else{const{formControl:d,...m}=LS(n);l.current={...m,formState:u}}const f=l.current.control;return f._options=n,yf(()=>{const d=f._subscribe({formState:f._proxyFormState,callback:()=>c({...f._formState}),reRenderRoot:!0});return c(m=>({...m,isReady:!0})),f._formState.isReady=!0,d},[f]),q.useEffect(()=>f._disableForm(n.disabled),[f,n.disabled]),q.useEffect(()=>{n.mode&&(f._options.mode=n.mode),n.reValidateMode&&(f._options.reValidateMode=n.reValidateMode)},[f,n.mode,n.reValidateMode]),q.useEffect(()=>{n.errors&&(f._setErrors(n.errors),f._focusError())},[f,n.errors]),q.useEffect(()=>{n.shouldUnregister&&f._subjects.state.next({values:f._getWatch()})},[f,n.shouldUnregister]),q.useEffect(()=>{if(f._proxyFormState.isDirty){const d=f._getDirty();d!==u.isDirty&&f._subjects.state.next({isDirty:d})}},[f,u.isDirty]),q.useEffect(()=>{n.values&&!ua(n.values,i.current)?(f._reset(n.values,{keepFieldsRef:!0,...f._options.resetOptions}),i.current=n.values,c(d=>({...d}))):f._resetDefaultValues()},[f,n.values]),q.useEffect(()=>{f._state.mount||(f._setValid(),f._state.mount=!0),f._state.watch&&(f._state.watch=!1,f._subjects.state.next({...f._formState})),f._removeUnmounted()}),l.current.formState=oy(u,f),l.current}const Pg=(n,l,i)=>{if(n&&"reportValidity"in n){const u=rt(i,l);n.setCustomValidity(u&&u.message||""),n.reportValidity()}},Wc=(n,l)=>{for(const i in l.fields){const u=l.fields[i];u&&u.ref&&"reportValidity"in u.ref?Pg(u.ref,i,n):u&&u.refs&&u.refs.forEach(c=>Pg(c,i,n))}},Ig=(n,l)=>{l.shouldUseNativeValidation&&Wc(n,l);const i={};for(const u in n){const c=rt(l.fields,u),f=Object.assign(n[u]||{},{ref:c&&c.ref});if(YS(l.names||Object.keys(n),u)){const d=Object.assign({},rt(i,u));qt(d,"root",f),qt(i,u,d)}else qt(i,u,f)}return i},YS=(n,l)=>{const i=tv(l);return n.some(u=>tv(u).match(`^${i}\\.\\d+`))};function tv(n){return n.replace(/\]|\[/g,"")}function J(n,l,i){function u(m,p){var v;Object.defineProperty(m,"_zod",{value:m._zod??{},enumerable:!1}),(v=m._zod).traits??(v.traits=new Set),m._zod.traits.add(n),l(m,p);for(const b in d.prototype)b in m||Object.defineProperty(m,b,{value:d.prototype[b].bind(m)});m._zod.constr=d,m._zod.def=p}const c=i?.Parent??Object;class f extends c{}Object.defineProperty(f,"name",{value:n});function d(m){var p;const v=i?.Parent?new f:this;u(v,m),(p=v._zod).deferred??(p.deferred=[]);for(const b of v._zod.deferred)b();return v}return Object.defineProperty(d,"init",{value:u}),Object.defineProperty(d,Symbol.hasInstance,{value:m=>i?.Parent&&m instanceof i.Parent?!0:m?._zod?.traits?.has(n)}),Object.defineProperty(d,"name",{value:n}),d}class lr extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}class vy extends Error{constructor(l){super(`Encountered unidirectional transform during encode: ${l}`),this.name="ZodEncodeError"}}const yy={};function ul(n){return yy}function qS(n){const l=Object.values(n).filter(u=>typeof u=="number");return Object.entries(n).filter(([u,c])=>l.indexOf(+u)===-1).map(([u,c])=>c)}function Pc(n,l){return typeof l=="bigint"?l.toString():l}function _f(n){return{get value(){{const l=n();return Object.defineProperty(this,"value",{value:l}),l}}}}function wf(n){return n==null}function xf(n){const l=n.startsWith("^")?1:0,i=n.endsWith("$")?n.length-1:n.length;return n.slice(l,i)}const ev=Symbol("evaluating");function Ft(n,l,i){let u;Object.defineProperty(n,l,{get(){if(u!==ev)return u===void 0&&(u=ev,u=i()),u},set(c){Object.defineProperty(n,l,{value:c})},configurable:!0})}function GS(n){return Object.create(Object.getPrototypeOf(n),Object.getOwnPropertyDescriptors(n))}function Va(n,l,i){Object.defineProperty(n,l,{value:i,writable:!0,enumerable:!0,configurable:!0})}function fr(...n){const l={};for(const i of n){const u=Object.getOwnPropertyDescriptors(i);Object.assign(l,u)}return Object.defineProperties({},l)}function nv(n){return JSON.stringify(n)}const py="captureStackTrace"in Error?Error.captureStackTrace:(...n)=>{};function lo(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}const XS=_f(()=>{if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{const n=Function;return new n(""),!0}catch{return!1}});function yi(n){if(lo(n)===!1)return!1;const l=n.constructor;if(l===void 0)return!0;const i=l.prototype;return!(lo(i)===!1||Object.prototype.hasOwnProperty.call(i,"isPrototypeOf")===!1)}function by(n){return yi(n)?{...n}:n}const QS=new Set(["string","number","symbol"]);function ir(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ba(n,l,i){const u=new n._zod.constr(l??n._zod.def);return(!l||i?.parent)&&(u._zod.parent=n),u}function At(n){const l=n;if(!l)return{};if(typeof l=="string")return{error:()=>l};if(l?.message!==void 0){if(l?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");l.error=l.message}return delete l.message,typeof l.error=="string"?{...l,error:()=>l.error}:l}function $S(n){return Object.keys(n).filter(l=>n[l]._zod.optin==="optional"&&n[l]._zod.optout==="optional")}function KS(n,l){const i=n._zod.def,u=fr(n._zod.def,{get shape(){const c={};for(const f in l){if(!(f in i.shape))throw new Error(`Unrecognized key: "${f}"`);l[f]&&(c[f]=i.shape[f])}return Va(this,"shape",c),c},checks:[]});return Ba(n,u)}function JS(n,l){const i=n._zod.def,u=fr(n._zod.def,{get shape(){const c={...n._zod.def.shape};for(const f in l){if(!(f in i.shape))throw new Error(`Unrecognized key: "${f}"`);l[f]&&delete c[f]}return Va(this,"shape",c),c},checks:[]});return Ba(n,u)}function FS(n,l){if(!yi(l))throw new Error("Invalid input to extend: expected a plain object");const i=n._zod.def.checks;if(i&&i.length>0)throw new Error("Object schemas containing refinements cannot be extended. Use `.safeExtend()` instead.");const c=fr(n._zod.def,{get shape(){const f={...n._zod.def.shape,...l};return Va(this,"shape",f),f},checks:[]});return Ba(n,c)}function WS(n,l){if(!yi(l))throw new Error("Invalid input to safeExtend: expected a plain object");const i={...n._zod.def,get shape(){const u={...n._zod.def.shape,...l};return Va(this,"shape",u),u},checks:n._zod.def.checks};return Ba(n,i)}function PS(n,l){const i=fr(n._zod.def,{get shape(){const u={...n._zod.def.shape,...l._zod.def.shape};return Va(this,"shape",u),u},get catchall(){return l._zod.def.catchall},checks:[]});return Ba(n,i)}function IS(n,l,i){const u=fr(l._zod.def,{get shape(){const c=l._zod.def.shape,f={...c};if(i)for(const d in i){if(!(d in c))throw new Error(`Unrecognized key: "${d}"`);i[d]&&(f[d]=n?new n({type:"optional",innerType:c[d]}):c[d])}else for(const d in c)f[d]=n?new n({type:"optional",innerType:c[d]}):c[d];return Va(this,"shape",f),f},checks:[]});return Ba(l,u)}function t_(n,l,i){const u=fr(l._zod.def,{get shape(){const c=l._zod.def.shape,f={...c};if(i)for(const d in i){if(!(d in f))throw new Error(`Unrecognized key: "${d}"`);i[d]&&(f[d]=new n({type:"nonoptional",innerType:c[d]}))}else for(const d in c)f[d]=new n({type:"nonoptional",innerType:c[d]});return Va(this,"shape",f),f},checks:[]});return Ba(l,u)}function er(n,l=0){if(n.aborted===!0)return!0;for(let i=l;i{var u;return(u=i).path??(u.path=[]),i.path.unshift(n),i})}function Lu(n){return typeof n=="string"?n:n?.message}function ol(n,l,i){const u={...n,path:n.path??[]};if(!n.message){const c=Lu(n.inst?._zod.def?.error?.(n))??Lu(l?.error?.(n))??Lu(i.customError?.(n))??Lu(i.localeError?.(n))??"Invalid input";u.message=c}return delete u.inst,delete u.continue,l?.reportInput||delete u.input,u}function Ef(n){return Array.isArray(n)?"array":typeof n=="string"?"string":"unknown"}function pi(...n){const[l,i,u]=n;return typeof l=="string"?{message:l,code:"custom",input:i,inst:u}:{...l}}const _y=(n,l)=>{n.name="$ZodError",Object.defineProperty(n,"_zod",{value:n._zod,enumerable:!1}),Object.defineProperty(n,"issues",{value:l,enumerable:!1}),n.message=JSON.stringify(l,Pc,2),Object.defineProperty(n,"toString",{value:()=>n.message,enumerable:!1})},Af=J("$ZodError",_y),mo=J("$ZodError",_y,{Parent:Error});function e_(n,l=i=>i.message){const i={},u=[];for(const c of n.issues)c.path.length>0?(i[c.path[0]]=i[c.path[0]]||[],i[c.path[0]].push(l(c))):u.push(l(c));return{formErrors:u,fieldErrors:i}}function n_(n,l){const i=l||function(f){return f.message},u={_errors:[]},c=f=>{for(const d of f.issues)if(d.code==="invalid_union"&&d.errors.length)d.errors.map(m=>c({issues:m}));else if(d.code==="invalid_key")c({issues:d.issues});else if(d.code==="invalid_element")c({issues:d.issues});else if(d.path.length===0)u._errors.push(i(d));else{let m=u,p=0;for(;p(l,i,u,c)=>{const f=u?Object.assign(u,{async:!1}):{async:!1},d=l._zod.run({value:i,issues:[]},f);if(d instanceof Promise)throw new lr;if(d.issues.length){const m=new(c?.Err??n)(d.issues.map(p=>ol(p,f,ul())));throw py(m,c?.callee),m}return d.value},a_=go(mo),vo=n=>async(l,i,u,c)=>{const f=u?Object.assign(u,{async:!0}):{async:!0};let d=l._zod.run({value:i,issues:[]},f);if(d instanceof Promise&&(d=await d),d.issues.length){const m=new(c?.Err??n)(d.issues.map(p=>ol(p,f,ul())));throw py(m,c?.callee),m}return d.value},l_=vo(mo),yo=n=>(l,i,u)=>{const c=u?{...u,async:!1}:{async:!1},f=l._zod.run({value:i,issues:[]},c);if(f instanceof Promise)throw new lr;return f.issues.length?{success:!1,error:new(n??Af)(f.issues.map(d=>ol(d,c,ul())))}:{success:!0,data:f.value}},r_=yo(mo),po=n=>async(l,i,u)=>{const c=u?Object.assign(u,{async:!0}):{async:!0};let f=l._zod.run({value:i,issues:[]},c);return f instanceof Promise&&(f=await f),f.issues.length?{success:!1,error:new n(f.issues.map(d=>ol(d,c,ul())))}:{success:!0,data:f.value}},i_=po(mo),u_=n=>(l,i,u)=>{const c=u?Object.assign(u,{direction:"backward"}):{direction:"backward"};return go(n)(l,i,c)},o_=n=>(l,i,u)=>go(n)(l,i,u),s_=n=>async(l,i,u)=>{const c=u?Object.assign(u,{direction:"backward"}):{direction:"backward"};return vo(n)(l,i,c)},c_=n=>async(l,i,u)=>vo(n)(l,i,u),f_=n=>(l,i,u)=>{const c=u?Object.assign(u,{direction:"backward"}):{direction:"backward"};return yo(n)(l,i,c)},d_=n=>(l,i,u)=>yo(n)(l,i,u),h_=n=>async(l,i,u)=>{const c=u?Object.assign(u,{direction:"backward"}):{direction:"backward"};return po(n)(l,i,c)},m_=n=>async(l,i,u)=>po(n)(l,i,u),g_=/^[cC][^\s-]{8,}$/,v_=/^[0-9a-z]+$/,y_=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,p_=/^[0-9a-vA-V]{20}$/,b_=/^[A-Za-z0-9]{27}$/,S_=/^[a-zA-Z0-9_-]{21}$/,__=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,w_=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,av=n=>n?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${n}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,x_=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,E_="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";function A_(){return new RegExp(E_,"u")}const z_=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,T_=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$/,O_=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,R_=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,D_=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,wy=/^[A-Za-z0-9_-]*$/,M_=/^(?=.{1,253}\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\.?$/,C_=/^\+(?:[0-9]){6,14}[0-9]$/,xy="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",k_=new RegExp(`^${xy}$`);function Ey(n){const l="(?:[01]\\d|2[0-3]):[0-5]\\d";return typeof n.precision=="number"?n.precision===-1?`${l}`:n.precision===0?`${l}:[0-5]\\d`:`${l}:[0-5]\\d\\.\\d{${n.precision}}`:`${l}(?::[0-5]\\d(?:\\.\\d+)?)?`}function N_(n){return new RegExp(`^${Ey(n)}$`)}function U_(n){const l=Ey({precision:n.precision}),i=["Z"];n.local&&i.push(""),n.offset&&i.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");const u=`${l}(?:${i.join("|")})`;return new RegExp(`^${xy}T(?:${u})$`)}const Z_=n=>{const l=n?`[\\s\\S]{${n?.minimum??0},${n?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${l}$`)},V_=/^[^A-Z]*$/,B_=/^[^a-z]*$/,Ln=J("$ZodCheck",(n,l)=>{var i;n._zod??(n._zod={}),n._zod.def=l,(i=n._zod).onattach??(i.onattach=[])}),H_=J("$ZodCheckMaxLength",(n,l)=>{var i;Ln.init(n,l),(i=n._zod.def).when??(i.when=u=>{const c=u.value;return!wf(c)&&c.length!==void 0}),n._zod.onattach.push(u=>{const c=u._zod.bag.maximum??Number.POSITIVE_INFINITY;l.maximum{const c=u.value;if(c.length<=l.maximum)return;const d=Ef(c);u.issues.push({origin:d,code:"too_big",maximum:l.maximum,inclusive:!0,input:c,inst:n,continue:!l.abort})}}),j_=J("$ZodCheckMinLength",(n,l)=>{var i;Ln.init(n,l),(i=n._zod.def).when??(i.when=u=>{const c=u.value;return!wf(c)&&c.length!==void 0}),n._zod.onattach.push(u=>{const c=u._zod.bag.minimum??Number.NEGATIVE_INFINITY;l.minimum>c&&(u._zod.bag.minimum=l.minimum)}),n._zod.check=u=>{const c=u.value;if(c.length>=l.minimum)return;const d=Ef(c);u.issues.push({origin:d,code:"too_small",minimum:l.minimum,inclusive:!0,input:c,inst:n,continue:!l.abort})}}),L_=J("$ZodCheckLengthEquals",(n,l)=>{var i;Ln.init(n,l),(i=n._zod.def).when??(i.when=u=>{const c=u.value;return!wf(c)&&c.length!==void 0}),n._zod.onattach.push(u=>{const c=u._zod.bag;c.minimum=l.length,c.maximum=l.length,c.length=l.length}),n._zod.check=u=>{const c=u.value,f=c.length;if(f===l.length)return;const d=Ef(c),m=f>l.length;u.issues.push({origin:d,...m?{code:"too_big",maximum:l.length}:{code:"too_small",minimum:l.length},inclusive:!0,exact:!0,input:u.value,inst:n,continue:!l.abort})}}),bo=J("$ZodCheckStringFormat",(n,l)=>{var i,u;Ln.init(n,l),n._zod.onattach.push(c=>{const f=c._zod.bag;f.format=l.format,l.pattern&&(f.patterns??(f.patterns=new Set),f.patterns.add(l.pattern))}),l.pattern?(i=n._zod).check??(i.check=c=>{l.pattern.lastIndex=0,!l.pattern.test(c.value)&&c.issues.push({origin:"string",code:"invalid_format",format:l.format,input:c.value,...l.pattern?{pattern:l.pattern.toString()}:{},inst:n,continue:!l.abort})}):(u=n._zod).check??(u.check=()=>{})}),Y_=J("$ZodCheckRegex",(n,l)=>{bo.init(n,l),n._zod.check=i=>{l.pattern.lastIndex=0,!l.pattern.test(i.value)&&i.issues.push({origin:"string",code:"invalid_format",format:"regex",input:i.value,pattern:l.pattern.toString(),inst:n,continue:!l.abort})}}),q_=J("$ZodCheckLowerCase",(n,l)=>{l.pattern??(l.pattern=V_),bo.init(n,l)}),G_=J("$ZodCheckUpperCase",(n,l)=>{l.pattern??(l.pattern=B_),bo.init(n,l)}),X_=J("$ZodCheckIncludes",(n,l)=>{Ln.init(n,l);const i=ir(l.includes),u=new RegExp(typeof l.position=="number"?`^.{${l.position}}${i}`:i);l.pattern=u,n._zod.onattach.push(c=>{const f=c._zod.bag;f.patterns??(f.patterns=new Set),f.patterns.add(u)}),n._zod.check=c=>{c.value.includes(l.includes,l.position)||c.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:l.includes,input:c.value,inst:n,continue:!l.abort})}}),Q_=J("$ZodCheckStartsWith",(n,l)=>{Ln.init(n,l);const i=new RegExp(`^${ir(l.prefix)}.*`);l.pattern??(l.pattern=i),n._zod.onattach.push(u=>{const c=u._zod.bag;c.patterns??(c.patterns=new Set),c.patterns.add(i)}),n._zod.check=u=>{u.value.startsWith(l.prefix)||u.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:l.prefix,input:u.value,inst:n,continue:!l.abort})}}),$_=J("$ZodCheckEndsWith",(n,l)=>{Ln.init(n,l);const i=new RegExp(`.*${ir(l.suffix)}$`);l.pattern??(l.pattern=i),n._zod.onattach.push(u=>{const c=u._zod.bag;c.patterns??(c.patterns=new Set),c.patterns.add(i)}),n._zod.check=u=>{u.value.endsWith(l.suffix)||u.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:l.suffix,input:u.value,inst:n,continue:!l.abort})}}),K_=J("$ZodCheckOverwrite",(n,l)=>{Ln.init(n,l),n._zod.check=i=>{i.value=l.tx(i.value)}});class J_{constructor(l=[]){this.content=[],this.indent=0,this&&(this.args=l)}indented(l){this.indent+=1,l(this),this.indent-=1}write(l){if(typeof l=="function"){l(this,{execution:"sync"}),l(this,{execution:"async"});return}const u=l.split(` +`)},o1=0,Pl=[];function s1(n){var l=it.useRef([]),i=it.useRef([0,0]),u=it.useRef(),c=it.useState(o1++)[0],f=it.useState(Yv)[0],d=it.useRef(n);it.useEffect(function(){d.current=n},[n]),it.useEffect(function(){if(n.inert){document.body.classList.add("block-interactivity-".concat(c));var C=Db([n.lockRef.current],(n.shards||[]).map(Og),!0).filter(Boolean);return C.forEach(function(B){return B.classList.add("allow-interactivity-".concat(c))}),function(){document.body.classList.remove("block-interactivity-".concat(c)),C.forEach(function(B){return B.classList.remove("allow-interactivity-".concat(c))})}}},[n.inert,n.lockRef.current,n.shards]);var m=it.useCallback(function(C,B){if("touches"in C&&C.touches.length===2||C.type==="wheel"&&C.ctrlKey)return!d.current.allowPinchZoom;var X=Bu(C),H=i.current,K="deltaX"in C?C.deltaX:H[0]-X[0],F="deltaY"in C?C.deltaY:H[1]-X[1],Z,tt=C.target,ut=Math.abs(K)>Math.abs(F)?"h":"v";if("touches"in C&&ut==="h"&&tt.type==="range")return!1;var W=zg(ut,tt);if(!W)return!0;if(W?Z=ut:(Z=ut==="v"?"h":"v",W=zg(ut,tt)),!W)return!1;if(!u.current&&"changedTouches"in C&&(K||F)&&(u.current=Z),!Z)return!0;var vt=u.current||Z;return r1(vt,B,C,vt==="h"?K:F)},[]),p=it.useCallback(function(C){var B=C;if(!(!Pl.length||Pl[Pl.length-1]!==f)){var X="deltaY"in B?Tg(B):Bu(B),H=l.current.filter(function(Z){return Z.name===B.type&&(Z.target===B.target||B.target===Z.shadowParent)&&i1(Z.delta,X)})[0];if(H&&H.should){B.cancelable&&B.preventDefault();return}if(!H){var K=(d.current.shards||[]).map(Og).filter(Boolean).filter(function(Z){return Z.contains(B.target)}),F=K.length>0?m(B,K[0]):!d.current.noIsolation;F&&B.cancelable&&B.preventDefault()}}},[]),v=it.useCallback(function(C,B,X,H){var K={name:C,delta:B,target:X,should:H,shadowParent:c1(X)};l.current.push(K),setTimeout(function(){l.current=l.current.filter(function(F){return F!==K})},1)},[]),b=it.useCallback(function(C){i.current=Bu(C),u.current=void 0},[]),y=it.useCallback(function(C){v(C.type,Tg(C),C.target,m(C,n.lockRef.current))},[]),x=it.useCallback(function(C){v(C.type,Bu(C),C.target,m(C,n.lockRef.current))},[]);it.useEffect(function(){return Pl.push(f),n.setCallbacks({onScrollCapture:y,onWheelCapture:y,onTouchMoveCapture:x}),document.addEventListener("wheel",p,Wl),document.addEventListener("touchmove",p,Wl),document.addEventListener("touchstart",b,Wl),function(){Pl=Pl.filter(function(C){return C!==f}),document.removeEventListener("wheel",p,Wl),document.removeEventListener("touchmove",p,Wl),document.removeEventListener("touchstart",b,Wl)}},[]);var T=n.removeScrollBar,k=n.inert;return it.createElement(it.Fragment,null,k?it.createElement(f,{styles:u1(c)}):null,T?it.createElement(Pb,{noRelative:n.noRelative,gapMode:n.gapMode}):null)}function c1(n){for(var l=null;n!==null;)n instanceof ShadowRoot&&(l=n.host,n=n.host),n=n.parentNode;return l}const f1=Hb(Lv,s1);var d1=it.forwardRef(function(n,l){return it.createElement(uo,Un({},n,{ref:l,sideCar:f1}))});d1.classNames=uo.classNames;var h1=function(n){if(typeof document>"u")return null;var l=Array.isArray(n)?n[0]:n;return l.ownerDocument.body},Il=new WeakMap,Hu=new WeakMap,ju={},Uc=0,Qv=function(n){return n&&(n.host||Qv(n.parentNode))},m1=function(n,l){return l.map(function(i){if(n.contains(i))return i;var u=Qv(i);return u&&n.contains(u)?u:(console.error("aria-hidden",i,"in not contained inside",n,". Doing nothing"),null)}).filter(function(i){return!!i})},g1=function(n,l,i,u){var c=m1(l,Array.isArray(n)?n:[n]);ju[i]||(ju[i]=new WeakMap);var f=ju[i],d=[],m=new Set,p=new Set(c),v=function(y){!y||m.has(y)||(m.add(y),v(y.parentNode))};c.forEach(v);var b=function(y){!y||p.has(y)||Array.prototype.forEach.call(y.children,function(x){if(m.has(x))b(x);else try{var T=x.getAttribute(u),k=T!==null&&T!=="false",C=(Il.get(x)||0)+1,B=(f.get(x)||0)+1;Il.set(x,C),f.set(x,B),d.push(x),C===1&&k&&Hu.set(x,!0),B===1&&x.setAttribute(i,"true"),k||x.setAttribute(u,"true")}catch(X){console.error("aria-hidden: cannot operate on ",x,X)}})};return b(l),m.clear(),Uc++,function(){d.forEach(function(y){var x=Il.get(y)-1,T=f.get(y)-1;Il.set(y,x),f.set(y,T),x||(Hu.has(y)||y.removeAttribute(u),Hu.delete(y)),T||y.removeAttribute(i)}),Uc--,Uc||(Il=new WeakMap,Il=new WeakMap,Hu=new WeakMap,ju={})}},A2=function(n,l,i){i===void 0&&(i="data-aria-hidden");var u=Array.from(Array.isArray(n)?n:[n]),c=h1(n);return c?(u.push.apply(u,Array.from(c.querySelectorAll("[aria-live], script"))),g1(u,c,i,"aria-hidden")):function(){return null}};const v1=["top","right","bottom","left"],Ua=Math.min,nn=Math.max,Fu=Math.round,Lu=Math.floor,Bn=n=>({x:n,y:n}),y1={left:"right",right:"left",bottom:"top",top:"bottom"},p1={start:"end",end:"start"};function $c(n,l,i){return nn(n,Ua(l,i))}function oa(n,l){return typeof n=="function"?n(l):n}function sa(n){return n.split("-")[0]}function sr(n){return n.split("-")[1]}function lf(n){return n==="x"?"y":"x"}function rf(n){return n==="y"?"height":"width"}const b1=new Set(["top","bottom"]);function Zn(n){return b1.has(sa(n))?"y":"x"}function uf(n){return lf(Zn(n))}function S1(n,l,i){i===void 0&&(i=!1);const u=sr(n),c=uf(n),f=rf(c);let d=c==="x"?u===(i?"end":"start")?"right":"left":u==="start"?"bottom":"top";return l.reference[f]>l.floating[f]&&(d=Wu(d)),[d,Wu(d)]}function _1(n){const l=Wu(n);return[Kc(n),l,Kc(l)]}function Kc(n){return n.replace(/start|end/g,l=>p1[l])}const Rg=["left","right"],Dg=["right","left"],w1=["top","bottom"],x1=["bottom","top"];function E1(n,l,i){switch(n){case"top":case"bottom":return i?l?Dg:Rg:l?Rg:Dg;case"left":case"right":return l?w1:x1;default:return[]}}function A1(n,l,i,u){const c=sr(n);let f=E1(sa(n),i==="start",u);return c&&(f=f.map(d=>d+"-"+c),l&&(f=f.concat(f.map(Kc)))),f}function Wu(n){return n.replace(/left|right|bottom|top/g,l=>y1[l])}function z1(n){return{top:0,right:0,bottom:0,left:0,...n}}function $v(n){return typeof n!="number"?z1(n):{top:n,right:n,bottom:n,left:n}}function Pu(n){const{x:l,y:i,width:u,height:c}=n;return{width:u,height:c,top:i,left:l,right:l+u,bottom:i+c,x:l,y:i}}function Mg(n,l,i){let{reference:u,floating:c}=n;const f=Zn(l),d=uf(l),m=rf(d),p=sa(l),v=f==="y",b=u.x+u.width/2-c.width/2,y=u.y+u.height/2-c.height/2,x=u[m]/2-c[m]/2;let T;switch(p){case"top":T={x:b,y:u.y-c.height};break;case"bottom":T={x:b,y:u.y+u.height};break;case"right":T={x:u.x+u.width,y};break;case"left":T={x:u.x-c.width,y};break;default:T={x:u.x,y:u.y}}switch(sr(l)){case"start":T[d]-=x*(i&&v?-1:1);break;case"end":T[d]+=x*(i&&v?-1:1);break}return T}const T1=async(n,l,i)=>{const{placement:u="bottom",strategy:c="absolute",middleware:f=[],platform:d}=i,m=f.filter(Boolean),p=await(d.isRTL==null?void 0:d.isRTL(l));let v=await d.getElementRects({reference:n,floating:l,strategy:c}),{x:b,y}=Mg(v,u,p),x=u,T={},k=0;for(let C=0;C({name:"arrow",options:n,async fn(l){const{x:i,y:u,placement:c,rects:f,platform:d,elements:m,middlewareData:p}=l,{element:v,padding:b=0}=oa(n,l)||{};if(v==null)return{};const y=$v(b),x={x:i,y:u},T=uf(c),k=rf(T),C=await d.getDimensions(v),B=T==="y",X=B?"top":"left",H=B?"bottom":"right",K=B?"clientHeight":"clientWidth",F=f.reference[k]+f.reference[T]-x[T]-f.floating[k],Z=x[T]-f.reference[T],tt=await(d.getOffsetParent==null?void 0:d.getOffsetParent(v));let ut=tt?tt[K]:0;(!ut||!await(d.isElement==null?void 0:d.isElement(tt)))&&(ut=m.floating[K]||f.floating[k]);const W=F/2-Z/2,vt=ut/2-C[k]/2-1,Rt=Ua(y[X],vt),Et=Ua(y[H],vt),lt=Rt,ot=ut-C[k]-Et,yt=ut/2-C[k]/2+W,bt=$c(lt,yt,ot),A=!p.arrow&&sr(c)!=null&&yt!==bt&&f.reference[k]/2-(ytyt<=0)){var Et,lt;const yt=(((Et=f.flip)==null?void 0:Et.index)||0)+1,bt=ut[yt];if(bt&&(!(y==="alignment"?H!==Zn(bt):!1)||Rt.every(U=>Zn(U.placement)===H?U.overflows[0]>0:!0)))return{data:{index:yt,overflows:Rt},reset:{placement:bt}};let A=(lt=Rt.filter(L=>L.overflows[0]<=0).sort((L,U)=>L.overflows[1]-U.overflows[1])[0])==null?void 0:lt.placement;if(!A)switch(T){case"bestFit":{var ot;const L=(ot=Rt.filter(U=>{if(tt){const gt=Zn(U.placement);return gt===H||gt==="y"}return!0}).map(U=>[U.placement,U.overflows.filter(gt=>gt>0).reduce((gt,_)=>gt+_,0)]).sort((U,gt)=>U[1]-gt[1])[0])==null?void 0:ot[0];L&&(A=L);break}case"initialPlacement":A=m;break}if(c!==A)return{reset:{placement:A}}}return{}}}};function Cg(n,l){return{top:n.top-l.height,right:n.right-l.width,bottom:n.bottom-l.height,left:n.left-l.width}}function kg(n){return v1.some(l=>n[l]>=0)}const D1=function(n){return n===void 0&&(n={}),{name:"hide",options:n,async fn(l){const{rects:i}=l,{strategy:u="referenceHidden",...c}=oa(n,l);switch(u){case"referenceHidden":{const f=await vi(l,{...c,elementContext:"reference"}),d=Cg(f,i.reference);return{data:{referenceHiddenOffsets:d,referenceHidden:kg(d)}}}case"escaped":{const f=await vi(l,{...c,altBoundary:!0}),d=Cg(f,i.floating);return{data:{escapedOffsets:d,escaped:kg(d)}}}default:return{}}}}},Kv=new Set(["left","top"]);async function M1(n,l){const{placement:i,platform:u,elements:c}=n,f=await(u.isRTL==null?void 0:u.isRTL(c.floating)),d=sa(i),m=sr(i),p=Zn(i)==="y",v=Kv.has(d)?-1:1,b=f&&p?-1:1,y=oa(l,n);let{mainAxis:x,crossAxis:T,alignmentAxis:k}=typeof y=="number"?{mainAxis:y,crossAxis:0,alignmentAxis:null}:{mainAxis:y.mainAxis||0,crossAxis:y.crossAxis||0,alignmentAxis:y.alignmentAxis};return m&&typeof k=="number"&&(T=m==="end"?k*-1:k),p?{x:T*b,y:x*v}:{x:x*v,y:T*b}}const C1=function(n){return n===void 0&&(n=0),{name:"offset",options:n,async fn(l){var i,u;const{x:c,y:f,placement:d,middlewareData:m}=l,p=await M1(l,n);return d===((i=m.offset)==null?void 0:i.placement)&&(u=m.arrow)!=null&&u.alignmentOffset?{}:{x:c+p.x,y:f+p.y,data:{...p,placement:d}}}}},k1=function(n){return n===void 0&&(n={}),{name:"shift",options:n,async fn(l){const{x:i,y:u,placement:c}=l,{mainAxis:f=!0,crossAxis:d=!1,limiter:m={fn:B=>{let{x:X,y:H}=B;return{x:X,y:H}}},...p}=oa(n,l),v={x:i,y:u},b=await vi(l,p),y=Zn(sa(c)),x=lf(y);let T=v[x],k=v[y];if(f){const B=x==="y"?"top":"left",X=x==="y"?"bottom":"right",H=T+b[B],K=T-b[X];T=$c(H,T,K)}if(d){const B=y==="y"?"top":"left",X=y==="y"?"bottom":"right",H=k+b[B],K=k-b[X];k=$c(H,k,K)}const C=m.fn({...l,[x]:T,[y]:k});return{...C,data:{x:C.x-i,y:C.y-u,enabled:{[x]:f,[y]:d}}}}}},N1=function(n){return n===void 0&&(n={}),{options:n,fn(l){const{x:i,y:u,placement:c,rects:f,middlewareData:d}=l,{offset:m=0,mainAxis:p=!0,crossAxis:v=!0}=oa(n,l),b={x:i,y:u},y=Zn(c),x=lf(y);let T=b[x],k=b[y];const C=oa(m,l),B=typeof C=="number"?{mainAxis:C,crossAxis:0}:{mainAxis:0,crossAxis:0,...C};if(p){const K=x==="y"?"height":"width",F=f.reference[x]-f.floating[K]+B.mainAxis,Z=f.reference[x]+f.reference[K]-B.mainAxis;TZ&&(T=Z)}if(v){var X,H;const K=x==="y"?"width":"height",F=Kv.has(sa(c)),Z=f.reference[y]-f.floating[K]+(F&&((X=d.offset)==null?void 0:X[y])||0)+(F?0:B.crossAxis),tt=f.reference[y]+f.reference[K]+(F?0:((H=d.offset)==null?void 0:H[y])||0)-(F?B.crossAxis:0);ktt&&(k=tt)}return{[x]:T,[y]:k}}}},U1=function(n){return n===void 0&&(n={}),{name:"size",options:n,async fn(l){var i,u;const{placement:c,rects:f,platform:d,elements:m}=l,{apply:p=()=>{},...v}=oa(n,l),b=await vi(l,v),y=sa(c),x=sr(c),T=Zn(c)==="y",{width:k,height:C}=f.floating;let B,X;y==="top"||y==="bottom"?(B=y,X=x===(await(d.isRTL==null?void 0:d.isRTL(m.floating))?"start":"end")?"left":"right"):(X=y,B=x==="end"?"top":"bottom");const H=C-b.top-b.bottom,K=k-b.left-b.right,F=Ua(C-b[B],H),Z=Ua(k-b[X],K),tt=!l.middlewareData.shift;let ut=F,W=Z;if((i=l.middlewareData.shift)!=null&&i.enabled.x&&(W=K),(u=l.middlewareData.shift)!=null&&u.enabled.y&&(ut=H),tt&&!x){const Rt=nn(b.left,0),Et=nn(b.right,0),lt=nn(b.top,0),ot=nn(b.bottom,0);T?W=k-2*(Rt!==0||Et!==0?Rt+Et:nn(b.left,b.right)):ut=C-2*(lt!==0||ot!==0?lt+ot:nn(b.top,b.bottom))}await p({...l,availableWidth:W,availableHeight:ut});const vt=await d.getDimensions(m.floating);return k!==vt.width||C!==vt.height?{reset:{rects:!0}}:{}}}};function oo(){return typeof window<"u"}function cr(n){return Jv(n)?(n.nodeName||"").toLowerCase():"#document"}function an(n){var l;return(n==null||(l=n.ownerDocument)==null?void 0:l.defaultView)||window}function jn(n){var l;return(l=(Jv(n)?n.ownerDocument:n.document)||window.document)==null?void 0:l.documentElement}function Jv(n){return oo()?n instanceof Node||n instanceof an(n).Node:!1}function wn(n){return oo()?n instanceof Element||n instanceof an(n).Element:!1}function Hn(n){return oo()?n instanceof HTMLElement||n instanceof an(n).HTMLElement:!1}function Ng(n){return!oo()||typeof ShadowRoot>"u"?!1:n instanceof ShadowRoot||n instanceof an(n).ShadowRoot}const Z1=new Set(["inline","contents"]);function Si(n){const{overflow:l,overflowX:i,overflowY:u,display:c}=xn(n);return/auto|scroll|overlay|hidden|clip/.test(l+u+i)&&!Z1.has(c)}const V1=new Set(["table","td","th"]);function B1(n){return V1.has(cr(n))}const H1=[":popover-open",":modal"];function so(n){return H1.some(l=>{try{return n.matches(l)}catch{return!1}})}const j1=["transform","translate","scale","rotate","perspective"],L1=["transform","translate","scale","rotate","perspective","filter"],Y1=["paint","layout","strict","content"];function of(n){const l=sf(),i=wn(n)?xn(n):n;return j1.some(u=>i[u]?i[u]!=="none":!1)||(i.containerType?i.containerType!=="normal":!1)||!l&&(i.backdropFilter?i.backdropFilter!=="none":!1)||!l&&(i.filter?i.filter!=="none":!1)||L1.some(u=>(i.willChange||"").includes(u))||Y1.some(u=>(i.contain||"").includes(u))}function q1(n){let l=Za(n);for(;Hn(l)&&!rr(l);){if(of(l))return l;if(so(l))return null;l=Za(l)}return null}function sf(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const G1=new Set(["html","body","#document"]);function rr(n){return G1.has(cr(n))}function xn(n){return an(n).getComputedStyle(n)}function co(n){return wn(n)?{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}:{scrollLeft:n.scrollX,scrollTop:n.scrollY}}function Za(n){if(cr(n)==="html")return n;const l=n.assignedSlot||n.parentNode||Ng(n)&&n.host||jn(n);return Ng(l)?l.host:l}function Fv(n){const l=Za(n);return rr(l)?n.ownerDocument?n.ownerDocument.body:n.body:Hn(l)&&Si(l)?l:Fv(l)}function yi(n,l,i){var u;l===void 0&&(l=[]),i===void 0&&(i=!0);const c=Fv(n),f=c===((u=n.ownerDocument)==null?void 0:u.body),d=an(c);if(f){const m=Jc(d);return l.concat(d,d.visualViewport||[],Si(c)?c:[],m&&i?yi(m):[])}return l.concat(c,yi(c,[],i))}function Jc(n){return n.parent&&Object.getPrototypeOf(n.parent)?n.frameElement:null}function Wv(n){const l=xn(n);let i=parseFloat(l.width)||0,u=parseFloat(l.height)||0;const c=Hn(n),f=c?n.offsetWidth:i,d=c?n.offsetHeight:u,m=Fu(i)!==f||Fu(u)!==d;return m&&(i=f,u=d),{width:i,height:u,$:m}}function cf(n){return wn(n)?n:n.contextElement}function ar(n){const l=cf(n);if(!Hn(l))return Bn(1);const i=l.getBoundingClientRect(),{width:u,height:c,$:f}=Wv(l);let d=(f?Fu(i.width):i.width)/u,m=(f?Fu(i.height):i.height)/c;return(!d||!Number.isFinite(d))&&(d=1),(!m||!Number.isFinite(m))&&(m=1),{x:d,y:m}}const X1=Bn(0);function Pv(n){const l=an(n);return!sf()||!l.visualViewport?X1:{x:l.visualViewport.offsetLeft,y:l.visualViewport.offsetTop}}function Q1(n,l,i){return l===void 0&&(l=!1),!i||l&&i!==an(n)?!1:l}function il(n,l,i,u){l===void 0&&(l=!1),i===void 0&&(i=!1);const c=n.getBoundingClientRect(),f=cf(n);let d=Bn(1);l&&(u?wn(u)&&(d=ar(u)):d=ar(n));const m=Q1(f,i,u)?Pv(f):Bn(0);let p=(c.left+m.x)/d.x,v=(c.top+m.y)/d.y,b=c.width/d.x,y=c.height/d.y;if(f){const x=an(f),T=u&&wn(u)?an(u):u;let k=x,C=Jc(k);for(;C&&u&&T!==k;){const B=ar(C),X=C.getBoundingClientRect(),H=xn(C),K=X.left+(C.clientLeft+parseFloat(H.paddingLeft))*B.x,F=X.top+(C.clientTop+parseFloat(H.paddingTop))*B.y;p*=B.x,v*=B.y,b*=B.x,y*=B.y,p+=K,v+=F,k=an(C),C=Jc(k)}}return Pu({width:b,height:y,x:p,y:v})}function fo(n,l){const i=co(n).scrollLeft;return l?l.left+i:il(jn(n)).left+i}function Iv(n,l){const i=n.getBoundingClientRect(),u=i.left+l.scrollLeft-fo(n,i),c=i.top+l.scrollTop;return{x:u,y:c}}function $1(n){let{elements:l,rect:i,offsetParent:u,strategy:c}=n;const f=c==="fixed",d=jn(u),m=l?so(l.floating):!1;if(u===d||m&&f)return i;let p={scrollLeft:0,scrollTop:0},v=Bn(1);const b=Bn(0),y=Hn(u);if((y||!y&&!f)&&((cr(u)!=="body"||Si(d))&&(p=co(u)),Hn(u))){const T=il(u);v=ar(u),b.x=T.x+u.clientLeft,b.y=T.y+u.clientTop}const x=d&&!y&&!f?Iv(d,p):Bn(0);return{width:i.width*v.x,height:i.height*v.y,x:i.x*v.x-p.scrollLeft*v.x+b.x+x.x,y:i.y*v.y-p.scrollTop*v.y+b.y+x.y}}function K1(n){return Array.from(n.getClientRects())}function J1(n){const l=jn(n),i=co(n),u=n.ownerDocument.body,c=nn(l.scrollWidth,l.clientWidth,u.scrollWidth,u.clientWidth),f=nn(l.scrollHeight,l.clientHeight,u.scrollHeight,u.clientHeight);let d=-i.scrollLeft+fo(n);const m=-i.scrollTop;return xn(u).direction==="rtl"&&(d+=nn(l.clientWidth,u.clientWidth)-c),{width:c,height:f,x:d,y:m}}const Ug=25;function F1(n,l){const i=an(n),u=jn(n),c=i.visualViewport;let f=u.clientWidth,d=u.clientHeight,m=0,p=0;if(c){f=c.width,d=c.height;const b=sf();(!b||b&&l==="fixed")&&(m=c.offsetLeft,p=c.offsetTop)}const v=fo(u);if(v<=0){const b=u.ownerDocument,y=b.body,x=getComputedStyle(y),T=b.compatMode==="CSS1Compat"&&parseFloat(x.marginLeft)+parseFloat(x.marginRight)||0,k=Math.abs(u.clientWidth-y.clientWidth-T);k<=Ug&&(f-=k)}else v<=Ug&&(f+=v);return{width:f,height:d,x:m,y:p}}const W1=new Set(["absolute","fixed"]);function P1(n,l){const i=il(n,!0,l==="fixed"),u=i.top+n.clientTop,c=i.left+n.clientLeft,f=Hn(n)?ar(n):Bn(1),d=n.clientWidth*f.x,m=n.clientHeight*f.y,p=c*f.x,v=u*f.y;return{width:d,height:m,x:p,y:v}}function Zg(n,l,i){let u;if(l==="viewport")u=F1(n,i);else if(l==="document")u=J1(jn(n));else if(wn(l))u=P1(l,i);else{const c=Pv(n);u={x:l.x-c.x,y:l.y-c.y,width:l.width,height:l.height}}return Pu(u)}function ty(n,l){const i=Za(n);return i===l||!wn(i)||rr(i)?!1:xn(i).position==="fixed"||ty(i,l)}function I1(n,l){const i=l.get(n);if(i)return i;let u=yi(n,[],!1).filter(m=>wn(m)&&cr(m)!=="body"),c=null;const f=xn(n).position==="fixed";let d=f?Za(n):n;for(;wn(d)&&!rr(d);){const m=xn(d),p=of(d);!p&&m.position==="fixed"&&(c=null),(f?!p&&!c:!p&&m.position==="static"&&!!c&&W1.has(c.position)||Si(d)&&!p&&ty(n,d))?u=u.filter(b=>b!==d):c=m,d=Za(d)}return l.set(n,u),u}function tS(n){let{element:l,boundary:i,rootBoundary:u,strategy:c}=n;const d=[...i==="clippingAncestors"?so(l)?[]:I1(l,this._c):[].concat(i),u],m=d[0],p=d.reduce((v,b)=>{const y=Zg(l,b,c);return v.top=nn(y.top,v.top),v.right=Ua(y.right,v.right),v.bottom=Ua(y.bottom,v.bottom),v.left=nn(y.left,v.left),v},Zg(l,m,c));return{width:p.right-p.left,height:p.bottom-p.top,x:p.left,y:p.top}}function eS(n){const{width:l,height:i}=Wv(n);return{width:l,height:i}}function nS(n,l,i){const u=Hn(l),c=jn(l),f=i==="fixed",d=il(n,!0,f,l);let m={scrollLeft:0,scrollTop:0};const p=Bn(0);function v(){p.x=fo(c)}if(u||!u&&!f)if((cr(l)!=="body"||Si(c))&&(m=co(l)),u){const T=il(l,!0,f,l);p.x=T.x+l.clientLeft,p.y=T.y+l.clientTop}else c&&v();f&&!u&&c&&v();const b=c&&!u&&!f?Iv(c,m):Bn(0),y=d.left+m.scrollLeft-p.x-b.x,x=d.top+m.scrollTop-p.y-b.y;return{x:y,y:x,width:d.width,height:d.height}}function Zc(n){return xn(n).position==="static"}function Vg(n,l){if(!Hn(n)||xn(n).position==="fixed")return null;if(l)return l(n);let i=n.offsetParent;return jn(n)===i&&(i=i.ownerDocument.body),i}function ey(n,l){const i=an(n);if(so(n))return i;if(!Hn(n)){let c=Za(n);for(;c&&!rr(c);){if(wn(c)&&!Zc(c))return c;c=Za(c)}return i}let u=Vg(n,l);for(;u&&B1(u)&&Zc(u);)u=Vg(u,l);return u&&rr(u)&&Zc(u)&&!of(u)?i:u||q1(n)||i}const aS=async function(n){const l=this.getOffsetParent||ey,i=this.getDimensions,u=await i(n.floating);return{reference:nS(n.reference,await l(n.floating),n.strategy),floating:{x:0,y:0,width:u.width,height:u.height}}};function lS(n){return xn(n).direction==="rtl"}const rS={convertOffsetParentRelativeRectToViewportRelativeRect:$1,getDocumentElement:jn,getClippingRect:tS,getOffsetParent:ey,getElementRects:aS,getClientRects:K1,getDimensions:eS,getScale:ar,isElement:wn,isRTL:lS};function ny(n,l){return n.x===l.x&&n.y===l.y&&n.width===l.width&&n.height===l.height}function iS(n,l){let i=null,u;const c=jn(n);function f(){var m;clearTimeout(u),(m=i)==null||m.disconnect(),i=null}function d(m,p){m===void 0&&(m=!1),p===void 0&&(p=1),f();const v=n.getBoundingClientRect(),{left:b,top:y,width:x,height:T}=v;if(m||l(),!x||!T)return;const k=Lu(y),C=Lu(c.clientWidth-(b+x)),B=Lu(c.clientHeight-(y+T)),X=Lu(b),K={rootMargin:-k+"px "+-C+"px "+-B+"px "+-X+"px",threshold:nn(0,Ua(1,p))||1};let F=!0;function Z(tt){const ut=tt[0].intersectionRatio;if(ut!==p){if(!F)return d();ut?d(!1,ut):u=setTimeout(()=>{d(!1,1e-7)},1e3)}ut===1&&!ny(v,n.getBoundingClientRect())&&d(),F=!1}try{i=new IntersectionObserver(Z,{...K,root:c.ownerDocument})}catch{i=new IntersectionObserver(Z,K)}i.observe(n)}return d(!0),f}function z2(n,l,i,u){u===void 0&&(u={});const{ancestorScroll:c=!0,ancestorResize:f=!0,elementResize:d=typeof ResizeObserver=="function",layoutShift:m=typeof IntersectionObserver=="function",animationFrame:p=!1}=u,v=cf(n),b=c||f?[...v?yi(v):[],...yi(l)]:[];b.forEach(X=>{c&&X.addEventListener("scroll",i,{passive:!0}),f&&X.addEventListener("resize",i)});const y=v&&m?iS(v,i):null;let x=-1,T=null;d&&(T=new ResizeObserver(X=>{let[H]=X;H&&H.target===v&&T&&(T.unobserve(l),cancelAnimationFrame(x),x=requestAnimationFrame(()=>{var K;(K=T)==null||K.observe(l)})),i()}),v&&!p&&T.observe(v),T.observe(l));let k,C=p?il(n):null;p&&B();function B(){const X=il(n);C&&!ny(C,X)&&i(),C=X,k=requestAnimationFrame(B)}return i(),()=>{var X;b.forEach(H=>{c&&H.removeEventListener("scroll",i),f&&H.removeEventListener("resize",i)}),y?.(),(X=T)==null||X.disconnect(),T=null,p&&cancelAnimationFrame(k)}}const uS=C1,oS=k1,sS=R1,cS=U1,fS=D1,Bg=O1,dS=N1,hS=(n,l,i)=>{const u=new Map,c={platform:rS,...i},f={...c.platform,_c:u};return T1(n,l,{...c,platform:f})};var mS=typeof document<"u",gS=function(){},Ku=mS?it.useLayoutEffect:gS;function Iu(n,l){if(n===l)return!0;if(typeof n!=typeof l)return!1;if(typeof n=="function"&&n.toString()===l.toString())return!0;let i,u,c;if(n&&l&&typeof n=="object"){if(Array.isArray(n)){if(i=n.length,i!==l.length)return!1;for(u=i;u--!==0;)if(!Iu(n[u],l[u]))return!1;return!0}if(c=Object.keys(n),i=c.length,i!==Object.keys(l).length)return!1;for(u=i;u--!==0;)if(!{}.hasOwnProperty.call(l,c[u]))return!1;for(u=i;u--!==0;){const f=c[u];if(!(f==="_owner"&&n.$$typeof)&&!Iu(n[f],l[f]))return!1}return!0}return n!==n&&l!==l}function ay(n){return typeof window>"u"?1:(n.ownerDocument.defaultView||window).devicePixelRatio||1}function Hg(n,l){const i=ay(n);return Math.round(l*i)/i}function Vc(n){const l=it.useRef(n);return Ku(()=>{l.current=n}),l}function T2(n){n===void 0&&(n={});const{placement:l="bottom",strategy:i="absolute",middleware:u=[],platform:c,elements:{reference:f,floating:d}={},transform:m=!0,whileElementsMounted:p,open:v}=n,[b,y]=it.useState({x:0,y:0,strategy:i,placement:l,middlewareData:{},isPositioned:!1}),[x,T]=it.useState(u);Iu(x,u)||T(u);const[k,C]=it.useState(null),[B,X]=it.useState(null),H=it.useCallback(U=>{U!==tt.current&&(tt.current=U,C(U))},[]),K=it.useCallback(U=>{U!==ut.current&&(ut.current=U,X(U))},[]),F=f||k,Z=d||B,tt=it.useRef(null),ut=it.useRef(null),W=it.useRef(b),vt=p!=null,Rt=Vc(p),Et=Vc(c),lt=Vc(v),ot=it.useCallback(()=>{if(!tt.current||!ut.current)return;const U={placement:l,strategy:i,middleware:x};Et.current&&(U.platform=Et.current),hS(tt.current,ut.current,U).then(gt=>{const _={...gt,isPositioned:lt.current!==!1};yt.current&&!Iu(W.current,_)&&(W.current=_,Tv.flushSync(()=>{y(_)}))})},[x,l,i,Et,lt]);Ku(()=>{v===!1&&W.current.isPositioned&&(W.current.isPositioned=!1,y(U=>({...U,isPositioned:!1})))},[v]);const yt=it.useRef(!1);Ku(()=>(yt.current=!0,()=>{yt.current=!1}),[]),Ku(()=>{if(F&&(tt.current=F),Z&&(ut.current=Z),F&&Z){if(Rt.current)return Rt.current(F,Z,ot);ot()}},[F,Z,ot,Rt,vt]);const bt=it.useMemo(()=>({reference:tt,floating:ut,setReference:H,setFloating:K}),[H,K]),A=it.useMemo(()=>({reference:F,floating:Z}),[F,Z]),L=it.useMemo(()=>{const U={position:i,left:0,top:0};if(!A.floating)return U;const gt=Hg(A.floating,b.x),_=Hg(A.floating,b.y);return m?{...U,transform:"translate("+gt+"px, "+_+"px)",...ay(A.floating)>=1.5&&{willChange:"transform"}}:{position:i,left:gt,top:_}},[i,m,A.floating,b.x,b.y]);return it.useMemo(()=>({...b,update:ot,refs:bt,elements:A,floatingStyles:L}),[b,ot,bt,A,L])}const vS=n=>{function l(i){return{}.hasOwnProperty.call(i,"current")}return{name:"arrow",options:n,fn(i){const{element:u,padding:c}=typeof n=="function"?n(i):n;return u&&l(u)?u.current!=null?Bg({element:u.current,padding:c}).fn(i):{}:u?Bg({element:u,padding:c}).fn(i):{}}}},O2=(n,l)=>({...uS(n),options:[n,l]}),R2=(n,l)=>({...oS(n),options:[n,l]}),D2=(n,l)=>({...dS(n),options:[n,l]}),M2=(n,l)=>({...sS(n),options:[n,l]}),C2=(n,l)=>({...cS(n),options:[n,l]}),k2=(n,l)=>({...fS(n),options:[n,l]}),N2=(n,l)=>({...vS(n),options:[n,l]});var yS=(n,l,i,u,c,f,d,m)=>{let p=document.documentElement,v=["light","dark"];function b(T){(Array.isArray(n)?n:[n]).forEach(k=>{let C=k==="class",B=C&&f?c.map(X=>f[X]||X):c;C?(p.classList.remove(...B),p.classList.add(f&&f[T]?f[T]:T)):p.setAttribute(k,T)}),y(T)}function y(T){m&&v.includes(T)&&(p.style.colorScheme=T)}function x(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)b(u);else try{let T=localStorage.getItem(l)||i,k=d&&T==="system"?x():T;b(k)}catch{}},jg=["light","dark"],ly="(prefers-color-scheme: dark)",pS=typeof window>"u",ff=it.createContext(void 0),bS={setTheme:n=>{},themes:[]},U2=()=>{var n;return(n=it.useContext(ff))!=null?n:bS},Z2=n=>it.useContext(ff)?it.createElement(it.Fragment,null,n.children):it.createElement(_S,{...n}),SS=["light","dark"],_S=({forcedTheme:n,disableTransitionOnChange:l=!1,enableSystem:i=!0,enableColorScheme:u=!0,storageKey:c="theme",themes:f=SS,defaultTheme:d=i?"system":"light",attribute:m="data-theme",value:p,children:v,nonce:b,scriptProps:y})=>{let[x,T]=it.useState(()=>xS(c,d)),[k,C]=it.useState(()=>x==="system"?Bc():x),B=p?Object.values(p):f,X=it.useCallback(Z=>{let tt=Z;if(!tt)return;Z==="system"&&i&&(tt=Bc());let ut=p?p[tt]:tt,W=l?ES(b):null,vt=document.documentElement,Rt=Et=>{Et==="class"?(vt.classList.remove(...B),ut&&vt.classList.add(ut)):Et.startsWith("data-")&&(ut?vt.setAttribute(Et,ut):vt.removeAttribute(Et))};if(Array.isArray(m)?m.forEach(Rt):Rt(m),u){let Et=jg.includes(d)?d:null,lt=jg.includes(tt)?tt:Et;vt.style.colorScheme=lt}W?.()},[b]),H=it.useCallback(Z=>{let tt=typeof Z=="function"?Z(x):Z;T(tt);try{localStorage.setItem(c,tt)}catch{}},[x]),K=it.useCallback(Z=>{let tt=Bc(Z);C(tt),x==="system"&&i&&!n&&X("system")},[x,n]);it.useEffect(()=>{let Z=window.matchMedia(ly);return Z.addListener(K),K(Z),()=>Z.removeListener(K)},[K]),it.useEffect(()=>{let Z=tt=>{tt.key===c&&(tt.newValue?T(tt.newValue):H(d))};return window.addEventListener("storage",Z),()=>window.removeEventListener("storage",Z)},[H]),it.useEffect(()=>{X(n??x)},[n,x]);let F=it.useMemo(()=>({theme:x,setTheme:H,forcedTheme:n,resolvedTheme:x==="system"?k:x,themes:i?[...f,"system"]:f,systemTheme:i?k:void 0}),[x,H,n,k,i,f]);return it.createElement(ff.Provider,{value:F},it.createElement(wS,{forcedTheme:n,storageKey:c,attribute:m,enableSystem:i,enableColorScheme:u,defaultTheme:d,value:p,themes:f,nonce:b,scriptProps:y}),v)},wS=it.memo(({forcedTheme:n,storageKey:l,attribute:i,enableSystem:u,enableColorScheme:c,defaultTheme:f,value:d,themes:m,nonce:p,scriptProps:v})=>{let b=JSON.stringify([i,l,f,n,m,d,u,c]).slice(1,-1);return it.createElement("script",{...v,suppressHydrationWarning:!0,nonce:typeof window>"u"?p:"",dangerouslySetInnerHTML:{__html:`(${yS.toString()})(${b})`}})}),xS=(n,l)=>{if(pS)return;let i;try{i=localStorage.getItem(n)||void 0}catch{}return i||l},ES=n=>{let l=document.createElement("style");return n&&l.setAttribute("nonce",n),l.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(l),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(l)},1)}},Bc=n=>(n||(n=window.matchMedia(ly)),n.matches?"dark":"light"),_i=n=>n.type==="checkbox",rl=n=>n instanceof Date,He=n=>n==null;const ry=n=>typeof n=="object";var ce=n=>!He(n)&&!Array.isArray(n)&&ry(n)&&!rl(n),iy=n=>ce(n)&&n.target?_i(n.target)?n.target.checked:n.target.value:n,AS=n=>n.substring(0,n.search(/\.\d+(\.|$)/))||n,uy=(n,l)=>n.has(AS(l)),zS=n=>{const l=n.constructor&&n.constructor.prototype;return ce(l)&&l.hasOwnProperty("isPrototypeOf")},df=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function Se(n){let l;const i=Array.isArray(n),u=typeof FileList<"u"?n instanceof FileList:!1;if(n instanceof Date)l=new Date(n);else if(!(df&&(n instanceof Blob||u))&&(i||ce(n)))if(l=i?[]:Object.create(Object.getPrototypeOf(n)),!i&&!zS(n))l=n;else for(const c in n)n.hasOwnProperty(c)&&(l[c]=Se(n[c]));else return n;return l}var ho=n=>/^\w*$/.test(n),se=n=>n===void 0,hf=n=>Array.isArray(n)?n.filter(Boolean):[],mf=n=>hf(n.replace(/["|']|\]/g,"").split(/\.|\[/)),rt=(n,l,i)=>{if(!l||!ce(n))return i;const u=(ho(l)?[l]:mf(l)).reduce((c,f)=>He(c)?c:c[f],n);return se(u)||u===n?se(n[l])?i:n[l]:u},en=n=>typeof n=="boolean",qt=(n,l,i)=>{let u=-1;const c=ho(l)?[l]:mf(l),f=c.length,d=f-1;for(;++uq.useContext(gf),V2=n=>{const{children:l,...i}=n;return q.createElement(gf.Provider,{value:i},l)};var oy=(n,l,i,u=!0)=>{const c={defaultValues:l._defaultValues};for(const f in n)Object.defineProperty(c,f,{get:()=>{const d=f;return l._proxyFormState[d]!==Sn.all&&(l._proxyFormState[d]=!u||Sn.all),i&&(i[d]=!0),n[d]}});return c};const yf=typeof window<"u"?q.useLayoutEffect:q.useEffect;function TS(n){const l=vf(),{control:i=l.control,disabled:u,name:c,exact:f}=n||{},[d,m]=q.useState(i._formState),p=q.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1});return yf(()=>i._subscribe({name:c,formState:p.current,exact:f,callback:v=>{!u&&m({...i._formState,...v})}}),[c,u,f]),q.useEffect(()=>{p.current.isValid&&i._setValid(!0)},[i]),q.useMemo(()=>oy(d,i,p.current,!1),[d,i])}var Vn=n=>typeof n=="string",sy=(n,l,i,u,c)=>Vn(n)?(u&&l.watch.add(n),rt(i,n,c)):Array.isArray(n)?n.map(f=>(u&&l.watch.add(f),rt(i,f))):(u&&(l.watchAll=!0),i),Fc=n=>He(n)||!ry(n);function ua(n,l,i=new WeakSet){if(Fc(n)||Fc(l))return n===l;if(rl(n)&&rl(l))return n.getTime()===l.getTime();const u=Object.keys(n),c=Object.keys(l);if(u.length!==c.length)return!1;if(i.has(n)||i.has(l))return!0;i.add(n),i.add(l);for(const f of u){const d=n[f];if(!c.includes(f))return!1;if(f!=="ref"){const m=l[f];if(rl(d)&&rl(m)||ce(d)&&ce(m)||Array.isArray(d)&&Array.isArray(m)?!ua(d,m,i):d!==m)return!1}}return!0}function OS(n){const l=vf(),{control:i=l.control,name:u,defaultValue:c,disabled:f,exact:d,compute:m}=n||{},p=q.useRef(c),v=q.useRef(m),b=q.useRef(void 0);v.current=m;const y=q.useMemo(()=>i._getWatch(u,p.current),[i,u]),[x,T]=q.useState(v.current?v.current(y):y);return yf(()=>i._subscribe({name:u,formState:{values:!0},exact:d,callback:k=>{if(!f){const C=sy(u,i._names,k.values||i._formValues,!1,p.current);if(v.current){const B=v.current(C);ua(B,b.current)||(T(B),b.current=B)}else T(C)}}}),[i,f,u,d]),q.useEffect(()=>i._removeUnmounted()),x}function RS(n){const l=vf(),{name:i,disabled:u,control:c=l.control,shouldUnregister:f,defaultValue:d}=n,m=uy(c._names.array,i),p=q.useMemo(()=>rt(c._formValues,i,rt(c._defaultValues,i,d)),[c,i,d]),v=OS({control:c,name:i,defaultValue:p,exact:!0}),b=TS({control:c,name:i,exact:!0}),y=q.useRef(n),x=q.useRef(c.register(i,{...n.rules,value:v,...en(n.disabled)?{disabled:n.disabled}:{}}));y.current=n;const T=q.useMemo(()=>Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!rt(b.errors,i)},isDirty:{enumerable:!0,get:()=>!!rt(b.dirtyFields,i)},isTouched:{enumerable:!0,get:()=>!!rt(b.touchedFields,i)},isValidating:{enumerable:!0,get:()=>!!rt(b.validatingFields,i)},error:{enumerable:!0,get:()=>rt(b.errors,i)}}),[b,i]),k=q.useCallback(H=>x.current.onChange({target:{value:iy(H),name:i},type:to.CHANGE}),[i]),C=q.useCallback(()=>x.current.onBlur({target:{value:rt(c._formValues,i),name:i},type:to.BLUR}),[i,c._formValues]),B=q.useCallback(H=>{const K=rt(c._fields,i);K&&H&&(K._f.ref={focus:()=>H.focus&&H.focus(),select:()=>H.select&&H.select(),setCustomValidity:F=>H.setCustomValidity(F),reportValidity:()=>H.reportValidity()})},[c._fields,i]),X=q.useMemo(()=>({name:i,value:v,...en(u)||b.disabled?{disabled:b.disabled||u}:{},onChange:k,onBlur:C,ref:B}),[i,u,b.disabled,k,C,B,v]);return q.useEffect(()=>{const H=c._options.shouldUnregister||f;c.register(i,{...y.current.rules,...en(y.current.disabled)?{disabled:y.current.disabled}:{}});const K=(F,Z)=>{const tt=rt(c._fields,F);tt&&tt._f&&(tt._f.mount=Z)};if(K(i,!0),H){const F=Se(rt(c._options.defaultValues,i));qt(c._defaultValues,i,F),se(rt(c._formValues,i))&&qt(c._formValues,i,F)}return!m&&c.register(i),()=>{(m?H&&!c._state.action:H)?c.unregister(i):K(i,!1)}},[i,c,m,f]),q.useEffect(()=>{c._setDisabledField({disabled:u,name:i})},[u,i,c]),q.useMemo(()=>({field:X,formState:b,fieldState:T}),[X,b,T])}const B2=n=>n.render(RS(n));var pf=(n,l,i,u,c)=>l?{...i[n],types:{...i[n]&&i[n].types?i[n].types:{},[u]:c||!0}}:{},mi=n=>Array.isArray(n)?n:[n],Lg=()=>{let n=[];return{get observers(){return n},next:c=>{for(const f of n)f.next&&f.next(c)},subscribe:c=>(n.push(c),{unsubscribe:()=>{n=n.filter(f=>f!==c)}}),unsubscribe:()=>{n=[]}}},Ge=n=>ce(n)&&!Object.keys(n).length,bf=n=>n.type==="file",_n=n=>typeof n=="function",eo=n=>{if(!df)return!1;const l=n?n.ownerDocument:0;return n instanceof(l&&l.defaultView?l.defaultView.HTMLElement:HTMLElement)},cy=n=>n.type==="select-multiple",Sf=n=>n.type==="radio",DS=n=>Sf(n)||_i(n),Hc=n=>eo(n)&&n.isConnected;function MS(n,l){const i=l.slice(0,-1).length;let u=0;for(;u{for(const l in n)if(_n(n[l]))return!0;return!1};function no(n,l={}){const i=Array.isArray(n);if(ce(n)||i)for(const u in n)Array.isArray(n[u])||ce(n[u])&&!fy(n[u])?(l[u]=Array.isArray(n[u])?[]:{},no(n[u],l[u])):He(n[u])||(l[u]=!0);return l}function dy(n,l,i){const u=Array.isArray(n);if(ce(n)||u)for(const c in n)Array.isArray(n[c])||ce(n[c])&&!fy(n[c])?se(l)||Fc(i[c])?i[c]=Array.isArray(n[c])?no(n[c],[]):{...no(n[c])}:dy(n[c],He(l)?{}:l[c],i[c]):i[c]=!ua(n[c],l[c]);return i}var ci=(n,l)=>dy(n,l,no(l));const Yg={value:!1,isValid:!1},qg={value:!0,isValid:!0};var hy=n=>{if(Array.isArray(n)){if(n.length>1){const l=n.filter(i=>i&&i.checked&&!i.disabled).map(i=>i.value);return{value:l,isValid:!!l.length}}return n[0].checked&&!n[0].disabled?n[0].attributes&&!se(n[0].attributes.value)?se(n[0].value)||n[0].value===""?qg:{value:n[0].value,isValid:!0}:qg:Yg}return Yg},my=(n,{valueAsNumber:l,valueAsDate:i,setValueAs:u})=>se(n)?n:l?n===""?NaN:n&&+n:i&&Vn(n)?new Date(n):u?u(n):n;const Gg={isValid:!1,value:null};var gy=n=>Array.isArray(n)?n.reduce((l,i)=>i&&i.checked&&!i.disabled?{isValid:!0,value:i.value}:l,Gg):Gg;function Xg(n){const l=n.ref;return bf(l)?l.files:Sf(l)?gy(n.refs).value:cy(l)?[...l.selectedOptions].map(({value:i})=>i):_i(l)?hy(n.refs).value:my(se(l.value)?n.ref.value:l.value,n)}var kS=(n,l,i,u)=>{const c={};for(const f of n){const d=rt(l,f);d&&qt(c,f,d._f)}return{criteriaMode:i,names:[...n],fields:c,shouldUseNativeValidation:u}},ao=n=>n instanceof RegExp,fi=n=>se(n)?n:ao(n)?n.source:ce(n)?ao(n.value)?n.value.source:n.value:n,Qg=n=>({isOnSubmit:!n||n===Sn.onSubmit,isOnBlur:n===Sn.onBlur,isOnChange:n===Sn.onChange,isOnAll:n===Sn.all,isOnTouch:n===Sn.onTouched});const $g="AsyncFunction";var NS=n=>!!n&&!!n.validate&&!!(_n(n.validate)&&n.validate.constructor.name===$g||ce(n.validate)&&Object.values(n.validate).find(l=>l.constructor.name===$g)),US=n=>n.mount&&(n.required||n.min||n.max||n.maxLength||n.minLength||n.pattern||n.validate),Kg=(n,l,i)=>!i&&(l.watchAll||l.watch.has(n)||[...l.watch].some(u=>n.startsWith(u)&&/^\.\w+/.test(n.slice(u.length))));const gi=(n,l,i,u)=>{for(const c of i||Object.keys(n)){const f=rt(n,c);if(f){const{_f:d,...m}=f;if(d){if(d.refs&&d.refs[0]&&l(d.refs[0],c)&&!u)return!0;if(d.ref&&l(d.ref,d.name)&&!u)return!0;if(gi(m,l))break}else if(ce(m)&&gi(m,l))break}}};function Jg(n,l,i){const u=rt(n,i);if(u||ho(i))return{error:u,name:i};const c=i.split(".");for(;c.length;){const f=c.join("."),d=rt(l,f),m=rt(n,f);if(d&&!Array.isArray(d)&&i!==f)return{name:i};if(m&&m.type)return{name:f,error:m};if(m&&m.root&&m.root.type)return{name:`${f}.root`,error:m.root};c.pop()}return{name:i}}var ZS=(n,l,i,u)=>{i(n);const{name:c,...f}=n;return Ge(f)||Object.keys(f).length>=Object.keys(l).length||Object.keys(f).find(d=>l[d]===(!u||Sn.all))},VS=(n,l,i)=>!n||!l||n===l||mi(n).some(u=>u&&(i?u===l:u.startsWith(l)||l.startsWith(u))),BS=(n,l,i,u,c)=>c.isOnAll?!1:!i&&c.isOnTouch?!(l||n):(i?u.isOnBlur:c.isOnBlur)?!n:(i?u.isOnChange:c.isOnChange)?n:!0,HS=(n,l)=>!hf(rt(n,l)).length&&me(n,l),jS=(n,l,i)=>{const u=mi(rt(n,i));return qt(u,"root",l[i]),qt(n,i,u),n},Ju=n=>Vn(n);function Fg(n,l,i="validate"){if(Ju(n)||Array.isArray(n)&&n.every(Ju)||en(n)&&!n)return{type:i,message:Ju(n)?n:"",ref:l}}var tr=n=>ce(n)&&!ao(n)?n:{value:n,message:""},Wg=async(n,l,i,u,c,f)=>{const{ref:d,refs:m,required:p,maxLength:v,minLength:b,min:y,max:x,pattern:T,validate:k,name:C,valueAsNumber:B,mount:X}=n._f,H=rt(i,C);if(!X||l.has(C))return{};const K=m?m[0]:d,F=lt=>{c&&K.reportValidity&&(K.setCustomValidity(en(lt)?"":lt||""),K.reportValidity())},Z={},tt=Sf(d),ut=_i(d),W=tt||ut,vt=(B||bf(d))&&se(d.value)&&se(H)||eo(d)&&d.value===""||H===""||Array.isArray(H)&&!H.length,Rt=pf.bind(null,C,u,Z),Et=(lt,ot,yt,bt=ia.maxLength,A=ia.minLength)=>{const L=lt?ot:yt;Z[C]={type:lt?bt:A,message:L,ref:d,...Rt(lt?bt:A,L)}};if(f?!Array.isArray(H)||!H.length:p&&(!W&&(vt||He(H))||en(H)&&!H||ut&&!hy(m).isValid||tt&&!gy(m).isValid)){const{value:lt,message:ot}=Ju(p)?{value:!!p,message:p}:tr(p);if(lt&&(Z[C]={type:ia.required,message:ot,ref:K,...Rt(ia.required,ot)},!u))return F(ot),Z}if(!vt&&(!He(y)||!He(x))){let lt,ot;const yt=tr(x),bt=tr(y);if(!He(H)&&!isNaN(H)){const A=d.valueAsNumber||H&&+H;He(yt.value)||(lt=A>yt.value),He(bt.value)||(ot=Anew Date(new Date().toDateString()+" "+_),U=d.type=="time",gt=d.type=="week";Vn(yt.value)&&H&&(lt=U?L(H)>L(yt.value):gt?H>yt.value:A>new Date(yt.value)),Vn(bt.value)&&H&&(ot=U?L(H)+lt.value,bt=!He(ot.value)&&H.length<+ot.value;if((yt||bt)&&(Et(yt,lt.message,ot.message),!u))return F(Z[C].message),Z}if(T&&!vt&&Vn(H)){const{value:lt,message:ot}=tr(T);if(ao(lt)&&!H.match(lt)&&(Z[C]={type:ia.pattern,message:ot,ref:d,...Rt(ia.pattern,ot)},!u))return F(ot),Z}if(k){if(_n(k)){const lt=await k(H,i),ot=Fg(lt,K);if(ot&&(Z[C]={...ot,...Rt(ia.validate,ot.message)},!u))return F(ot.message),Z}else if(ce(k)){let lt={};for(const ot in k){if(!Ge(lt)&&!u)break;const yt=Fg(await k[ot](H,i),K,ot);yt&&(lt={...yt,...Rt(ot,yt.message)},F(yt.message),u&&(Z[C]=lt))}if(!Ge(lt)&&(Z[C]={ref:K,...lt},!u))return Z}}return F(!0),Z};const LS={mode:Sn.onSubmit,reValidateMode:Sn.onChange,shouldFocusError:!0};function YS(n={}){let l={...LS,...n},i={submitCount:0,isDirty:!1,isReady:!1,isLoading:_n(l.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:l.errors||{},disabled:l.disabled||!1},u={},c=ce(l.defaultValues)||ce(l.values)?Se(l.defaultValues||l.values)||{}:{},f=l.shouldUnregister?{}:Se(c),d={action:!1,mount:!1,watch:!1},m={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set},p,v=0;const b={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1};let y={...b};const x={array:Lg(),state:Lg()},T=l.criteriaMode===Sn.all,k=w=>D=>{clearTimeout(v),v=setTimeout(w,D)},C=async w=>{if(!l.disabled&&(b.isValid||y.isValid||w)){const D=l.resolver?Ge((await ut()).errors):await vt(u,!0);D!==i.isValid&&x.state.next({isValid:D})}},B=(w,D)=>{!l.disabled&&(b.isValidating||b.validatingFields||y.isValidating||y.validatingFields)&&((w||Array.from(m.mount)).forEach(V=>{V&&(D?qt(i.validatingFields,V,D):me(i.validatingFields,V))}),x.state.next({validatingFields:i.validatingFields,isValidating:!Ge(i.validatingFields)}))},X=(w,D=[],V,nt,et=!0,I=!0)=>{if(nt&&V&&!l.disabled){if(d.action=!0,I&&Array.isArray(rt(u,w))){const st=V(rt(u,w),nt.argA,nt.argB);et&&qt(u,w,st)}if(I&&Array.isArray(rt(i.errors,w))){const st=V(rt(i.errors,w),nt.argA,nt.argB);et&&qt(i.errors,w,st),HS(i.errors,w)}if((b.touchedFields||y.touchedFields)&&I&&Array.isArray(rt(i.touchedFields,w))){const st=V(rt(i.touchedFields,w),nt.argA,nt.argB);et&&qt(i.touchedFields,w,st)}(b.dirtyFields||y.dirtyFields)&&(i.dirtyFields=ci(c,f)),x.state.next({name:w,isDirty:Et(w,D),dirtyFields:i.dirtyFields,errors:i.errors,isValid:i.isValid})}else qt(f,w,D)},H=(w,D)=>{qt(i.errors,w,D),x.state.next({errors:i.errors})},K=w=>{i.errors=w,x.state.next({errors:i.errors,isValid:!1})},F=(w,D,V,nt)=>{const et=rt(u,w);if(et){const I=rt(f,w,se(V)?rt(c,w):V);se(I)||nt&&nt.defaultChecked||D?qt(f,w,D?I:Xg(et._f)):yt(w,I),d.mount&&C()}},Z=(w,D,V,nt,et)=>{let I=!1,st=!1;const zt={name:w};if(!l.disabled){if(!V||nt){(b.isDirty||y.isDirty)&&(st=i.isDirty,i.isDirty=zt.isDirty=Et(),I=st!==zt.isDirty);const kt=ua(rt(c,w),D);st=!!rt(i.dirtyFields,w),kt?me(i.dirtyFields,w):qt(i.dirtyFields,w,!0),zt.dirtyFields=i.dirtyFields,I=I||(b.dirtyFields||y.dirtyFields)&&st!==!kt}if(V){const kt=rt(i.touchedFields,w);kt||(qt(i.touchedFields,w,V),zt.touchedFields=i.touchedFields,I=I||(b.touchedFields||y.touchedFields)&&kt!==V)}I&&et&&x.state.next(zt)}return I?zt:{}},tt=(w,D,V,nt)=>{const et=rt(i.errors,w),I=(b.isValid||y.isValid)&&en(D)&&i.isValid!==D;if(l.delayError&&V?(p=k(()=>H(w,V)),p(l.delayError)):(clearTimeout(v),p=null,V?qt(i.errors,w,V):me(i.errors,w)),(V?!ua(et,V):et)||!Ge(nt)||I){const st={...nt,...I&&en(D)?{isValid:D}:{},errors:i.errors,name:w};i={...i,...st},x.state.next(st)}},ut=async w=>{B(w,!0);const D=await l.resolver(f,l.context,kS(w||m.mount,u,l.criteriaMode,l.shouldUseNativeValidation));return B(w),D},W=async w=>{const{errors:D}=await ut(w);if(w)for(const V of w){const nt=rt(D,V);nt?qt(i.errors,V,nt):me(i.errors,V)}else i.errors=D;return D},vt=async(w,D,V={valid:!0})=>{for(const nt in w){const et=w[nt];if(et){const{_f:I,...st}=et;if(I){const zt=m.array.has(I.name),kt=et._f&&NS(et._f);kt&&b.validatingFields&&B([nt],!0);const jt=await Wg(et,m.disabled,f,T,l.shouldUseNativeValidation&&!D,zt);if(kt&&b.validatingFields&&B([nt]),jt[I.name]&&(V.valid=!1,D))break;!D&&(rt(jt,I.name)?zt?jS(i.errors,jt,I.name):qt(i.errors,I.name,jt[I.name]):me(i.errors,I.name))}!Ge(st)&&await vt(st,D,V)}}return V.valid},Rt=()=>{for(const w of m.unMount){const D=rt(u,w);D&&(D._f.refs?D._f.refs.every(V=>!Hc(V)):!Hc(D._f.ref))&&Ot(w)}m.unMount=new Set},Et=(w,D)=>!l.disabled&&(w&&D&&qt(f,w,D),!ua(_(),c)),lt=(w,D,V)=>sy(w,m,{...d.mount?f:se(D)?c:Vn(w)?{[w]:D}:D},V,D),ot=w=>hf(rt(d.mount?f:c,w,l.shouldUnregister?rt(c,w,[]):[])),yt=(w,D,V={})=>{const nt=rt(u,w);let et=D;if(nt){const I=nt._f;I&&(!I.disabled&&qt(f,w,my(D,I)),et=eo(I.ref)&&He(D)?"":D,cy(I.ref)?[...I.ref.options].forEach(st=>st.selected=et.includes(st.value)):I.refs?_i(I.ref)?I.refs.forEach(st=>{(!st.defaultChecked||!st.disabled)&&(Array.isArray(et)?st.checked=!!et.find(zt=>zt===st.value):st.checked=et===st.value||!!et)}):I.refs.forEach(st=>st.checked=st.value===et):bf(I.ref)?I.ref.value="":(I.ref.value=et,I.ref.type||x.state.next({name:w,values:Se(f)})))}(V.shouldDirty||V.shouldTouch)&&Z(w,et,V.shouldTouch,V.shouldDirty,!0),V.shouldValidate&>(w)},bt=(w,D,V)=>{for(const nt in D){if(!D.hasOwnProperty(nt))return;const et=D[nt],I=w+"."+nt,st=rt(u,I);(m.array.has(w)||ce(et)||st&&!st._f)&&!rl(et)?bt(I,et,V):yt(I,et,V)}},A=(w,D,V={})=>{const nt=rt(u,w),et=m.array.has(w),I=Se(D);qt(f,w,I),et?(x.array.next({name:w,values:Se(f)}),(b.isDirty||b.dirtyFields||y.isDirty||y.dirtyFields)&&V.shouldDirty&&x.state.next({name:w,dirtyFields:ci(c,f),isDirty:Et(w,I)})):nt&&!nt._f&&!He(I)?bt(w,I,V):yt(w,I,V),Kg(w,m)&&x.state.next({...i,name:w}),x.state.next({name:d.mount?w:void 0,values:Se(f)})},L=async w=>{d.mount=!0;const D=w.target;let V=D.name,nt=!0;const et=rt(u,V),I=kt=>{nt=Number.isNaN(kt)||rl(kt)&&isNaN(kt.getTime())||ua(kt,rt(f,V,kt))},st=Qg(l.mode),zt=Qg(l.reValidateMode);if(et){let kt,jt;const Qe=D.type?Xg(et._f):iy(w),$e=w.type===to.BLUR||w.type===to.FOCUS_OUT,An=!US(et._f)&&!l.resolver&&!rt(i.errors,V)&&!et._f.deps||BS($e,rt(i.touchedFields,V),i.isSubmitted,zt,st),zn=Kg(V,m,$e);qt(f,V,Qe),$e?(!D||!D.readOnly)&&(et._f.onBlur&&et._f.onBlur(w),p&&p(0)):et._f.onChange&&et._f.onChange(w);const Tn=Z(V,Qe,$e),ln=!Ge(Tn)||zn;if(!$e&&x.state.next({name:V,type:w.type,values:Se(f)}),An)return(b.isValid||y.isValid)&&(l.mode==="onBlur"?$e&&C():$e||C()),ln&&x.state.next({name:V,...zn?{}:Tn});if(!$e&&zn&&x.state.next({...i}),l.resolver){const{errors:On}=await ut([V]);if(I(Qe),nt){const Yn=Jg(i.errors,u,V),ca=Jg(On,u,Yn.name||V);kt=ca.error,V=ca.name,jt=Ge(On)}}else B([V],!0),kt=(await Wg(et,m.disabled,f,T,l.shouldUseNativeValidation))[V],B([V]),I(Qe),nt&&(kt?jt=!1:(b.isValid||y.isValid)&&(jt=await vt(u,!0)));nt&&(et._f.deps&>(et._f.deps),tt(V,jt,kt,Tn))}},U=(w,D)=>{if(rt(i.errors,D)&&w.focus)return w.focus(),1},gt=async(w,D={})=>{let V,nt;const et=mi(w);if(l.resolver){const I=await W(se(w)?w:et);V=Ge(I),nt=w?!et.some(st=>rt(I,st)):V}else w?(nt=(await Promise.all(et.map(async I=>{const st=rt(u,I);return await vt(st&&st._f?{[I]:st}:st)}))).every(Boolean),!(!nt&&!i.isValid)&&C()):nt=V=await vt(u);return x.state.next({...!Vn(w)||(b.isValid||y.isValid)&&V!==i.isValid?{}:{name:w},...l.resolver||!w?{isValid:V}:{},errors:i.errors}),D.shouldFocus&&!nt&&gi(u,U,w?et:m.mount),nt},_=w=>{const D={...d.mount?f:c};return se(w)?D:Vn(w)?rt(D,w):w.map(V=>rt(D,V))},Q=(w,D)=>({invalid:!!rt((D||i).errors,w),isDirty:!!rt((D||i).dirtyFields,w),error:rt((D||i).errors,w),isValidating:!!rt(i.validatingFields,w),isTouched:!!rt((D||i).touchedFields,w)}),at=w=>{w&&mi(w).forEach(D=>me(i.errors,D)),x.state.next({errors:w?i.errors:{}})},j=(w,D,V)=>{const nt=(rt(u,w,{_f:{}})._f||{}).ref,et=rt(i.errors,w)||{},{ref:I,message:st,type:zt,...kt}=et;qt(i.errors,w,{...kt,...D,ref:nt}),x.state.next({name:w,errors:i.errors,isValid:!1}),V&&V.shouldFocus&&nt&&nt.focus&&nt.focus()},P=(w,D)=>_n(w)?x.state.subscribe({next:V=>"values"in V&&w(lt(void 0,D),V)}):lt(w,D,!0),ht=w=>x.state.subscribe({next:D=>{VS(w.name,D.name,w.exact)&&ZS(D,w.formState||b,xe,w.reRenderRoot)&&w.callback({values:{...f},...i,...D,defaultValues:c})}}).unsubscribe,mt=w=>(d.mount=!0,y={...y,...w.formState},ht({...w,formState:y})),Ot=(w,D={})=>{for(const V of w?mi(w):m.mount)m.mount.delete(V),m.array.delete(V),D.keepValue||(me(u,V),me(f,V)),!D.keepError&&me(i.errors,V),!D.keepDirty&&me(i.dirtyFields,V),!D.keepTouched&&me(i.touchedFields,V),!D.keepIsValidating&&me(i.validatingFields,V),!l.shouldUnregister&&!D.keepDefaultValue&&me(c,V);x.state.next({values:Se(f)}),x.state.next({...i,...D.keepDirty?{isDirty:Et()}:{}}),!D.keepIsValid&&C()},St=({disabled:w,name:D})=>{(en(w)&&d.mount||w||m.disabled.has(D))&&(w?m.disabled.add(D):m.disabled.delete(D))},Wt=(w,D={})=>{let V=rt(u,w);const nt=en(D.disabled)||en(l.disabled);return qt(u,w,{...V||{},_f:{...V&&V._f?V._f:{ref:{name:w}},name:w,mount:!0,...D}}),m.mount.add(w),V?St({disabled:en(D.disabled)?D.disabled:l.disabled,name:w}):F(w,!0,D.value),{...nt?{disabled:D.disabled||l.disabled}:{},...l.progressive?{required:!!D.required,min:fi(D.min),max:fi(D.max),minLength:fi(D.minLength),maxLength:fi(D.maxLength),pattern:fi(D.pattern)}:{},name:w,onChange:L,onBlur:L,ref:et=>{if(et){Wt(w,D),V=rt(u,w);const I=se(et.value)&&et.querySelectorAll&&et.querySelectorAll("input,select,textarea")[0]||et,st=DS(I),zt=V._f.refs||[];if(st?zt.find(kt=>kt===I):I===V._f.ref)return;qt(u,w,{_f:{...V._f,...st?{refs:[...zt.filter(Hc),I,...Array.isArray(rt(c,w))?[{}]:[]],ref:{type:I.type,name:w}}:{ref:I}}}),F(w,!1,void 0,I)}else V=rt(u,w,{}),V._f&&(V._f.mount=!1),(l.shouldUnregister||D.shouldUnregister)&&!(uy(m.array,w)&&d.action)&&m.unMount.add(w)}}},Re=()=>l.shouldFocusError&&gi(u,U,m.mount),Ze=w=>{en(w)&&(x.state.next({disabled:w}),gi(u,(D,V)=>{const nt=rt(u,V);nt&&(D.disabled=nt._f.disabled||w,Array.isArray(nt._f.refs)&&nt._f.refs.forEach(et=>{et.disabled=nt._f.disabled||w}))},0,!1))},we=(w,D)=>async V=>{let nt;V&&(V.preventDefault&&V.preventDefault(),V.persist&&V.persist());let et=Se(f);if(x.state.next({isSubmitting:!0}),l.resolver){const{errors:I,values:st}=await ut();i.errors=I,et=Se(st)}else await vt(u);if(m.disabled.size)for(const I of m.disabled)me(et,I);if(me(i.errors,"root"),Ge(i.errors)){x.state.next({errors:{}});try{await w(et,V)}catch(I){nt=I}}else D&&await D({...i.errors},V),Re(),setTimeout(Re);if(x.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:Ge(i.errors)&&!nt,submitCount:i.submitCount+1,errors:i.errors}),nt)throw nt},Ha=(w,D={})=>{rt(u,w)&&(se(D.defaultValue)?A(w,Se(rt(c,w))):(A(w,D.defaultValue),qt(c,w,Se(D.defaultValue))),D.keepTouched||me(i.touchedFields,w),D.keepDirty||(me(i.dirtyFields,w),i.isDirty=D.defaultValue?Et(w,Se(rt(c,w))):Et()),D.keepError||(me(i.errors,w),b.isValid&&C()),x.state.next({...i}))},En=(w,D={})=>{const V=w?Se(w):c,nt=Se(V),et=Ge(w),I=et?c:nt;if(D.keepDefaultValues||(c=V),!D.keepValues){if(D.keepDirtyValues){const st=new Set([...m.mount,...Object.keys(ci(c,f))]);for(const zt of Array.from(st))rt(i.dirtyFields,zt)?qt(I,zt,rt(f,zt)):A(zt,rt(I,zt))}else{if(df&&se(w))for(const st of m.mount){const zt=rt(u,st);if(zt&&zt._f){const kt=Array.isArray(zt._f.refs)?zt._f.refs[0]:zt._f.ref;if(eo(kt)){const jt=kt.closest("form");if(jt){jt.reset();break}}}}if(D.keepFieldsRef)for(const st of m.mount)A(st,rt(I,st));else u={}}f=l.shouldUnregister?D.keepDefaultValues?Se(c):{}:Se(I),x.array.next({values:{...I}}),x.state.next({values:{...I}})}m={mount:D.keepDirtyValues?m.mount:new Set,unMount:new Set,array:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},d.mount=!b.isValid||!!D.keepIsValid||!!D.keepDirtyValues,d.watch=!!l.shouldUnregister,x.state.next({submitCount:D.keepSubmitCount?i.submitCount:0,isDirty:et?!1:D.keepDirty?i.isDirty:!!(D.keepDefaultValues&&!ua(w,c)),isSubmitted:D.keepIsSubmitted?i.isSubmitted:!1,dirtyFields:et?{}:D.keepDirtyValues?D.keepDefaultValues&&f?ci(c,f):i.dirtyFields:D.keepDefaultValues&&w?ci(c,w):D.keepDirty?i.dirtyFields:{},touchedFields:D.keepTouched?i.touchedFields:{},errors:D.keepErrors?i.errors:{},isSubmitSuccessful:D.keepIsSubmitSuccessful?i.isSubmitSuccessful:!1,isSubmitting:!1,defaultValues:c})},sl=(w,D)=>En(_n(w)?w(f):w,D),cl=(w,D={})=>{const V=rt(u,w),nt=V&&V._f;if(nt){const et=nt.refs?nt.refs[0]:nt.ref;et.focus&&(et.focus(),D.shouldSelect&&_n(et.select)&&et.select())}},xe=w=>{i={...i,...w}},Ve={control:{register:Wt,unregister:Ot,getFieldState:Q,handleSubmit:we,setError:j,_subscribe:ht,_runSchema:ut,_focusError:Re,_getWatch:lt,_getDirty:Et,_setValid:C,_setFieldArray:X,_setDisabledField:St,_setErrors:K,_getFieldArray:ot,_reset:En,_resetDefaultValues:()=>_n(l.defaultValues)&&l.defaultValues().then(w=>{sl(w,l.resetOptions),x.state.next({isLoading:!1})}),_removeUnmounted:Rt,_disableForm:Ze,_subjects:x,_proxyFormState:b,get _fields(){return u},get _formValues(){return f},get _state(){return d},set _state(w){d=w},get _defaultValues(){return c},get _names(){return m},set _names(w){m=w},get _formState(){return i},get _options(){return l},set _options(w){l={...l,...w}}},subscribe:mt,trigger:gt,register:Wt,handleSubmit:we,watch:P,setValue:A,getValues:_,reset:sl,resetField:Ha,clearErrors:at,unregister:Ot,setError:j,setFocus:cl,getFieldState:Q};return{...Ve,formControl:Ve}}function H2(n={}){const l=q.useRef(void 0),i=q.useRef(void 0),[u,c]=q.useState({isDirty:!1,isValidating:!1,isLoading:_n(n.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:n.errors||{},disabled:n.disabled||!1,isReady:!1,defaultValues:_n(n.defaultValues)?void 0:n.defaultValues});if(!l.current)if(n.formControl)l.current={...n.formControl,formState:u},n.defaultValues&&!_n(n.defaultValues)&&n.formControl.reset(n.defaultValues,n.resetOptions);else{const{formControl:d,...m}=YS(n);l.current={...m,formState:u}}const f=l.current.control;return f._options=n,yf(()=>{const d=f._subscribe({formState:f._proxyFormState,callback:()=>c({...f._formState}),reRenderRoot:!0});return c(m=>({...m,isReady:!0})),f._formState.isReady=!0,d},[f]),q.useEffect(()=>f._disableForm(n.disabled),[f,n.disabled]),q.useEffect(()=>{n.mode&&(f._options.mode=n.mode),n.reValidateMode&&(f._options.reValidateMode=n.reValidateMode)},[f,n.mode,n.reValidateMode]),q.useEffect(()=>{n.errors&&(f._setErrors(n.errors),f._focusError())},[f,n.errors]),q.useEffect(()=>{n.shouldUnregister&&f._subjects.state.next({values:f._getWatch()})},[f,n.shouldUnregister]),q.useEffect(()=>{if(f._proxyFormState.isDirty){const d=f._getDirty();d!==u.isDirty&&f._subjects.state.next({isDirty:d})}},[f,u.isDirty]),q.useEffect(()=>{n.values&&!ua(n.values,i.current)?(f._reset(n.values,{keepFieldsRef:!0,...f._options.resetOptions}),i.current=n.values,c(d=>({...d}))):f._resetDefaultValues()},[f,n.values]),q.useEffect(()=>{f._state.mount||(f._setValid(),f._state.mount=!0),f._state.watch&&(f._state.watch=!1,f._subjects.state.next({...f._formState})),f._removeUnmounted()}),l.current.formState=oy(u,f),l.current}const Pg=(n,l,i)=>{if(n&&"reportValidity"in n){const u=rt(i,l);n.setCustomValidity(u&&u.message||""),n.reportValidity()}},Wc=(n,l)=>{for(const i in l.fields){const u=l.fields[i];u&&u.ref&&"reportValidity"in u.ref?Pg(u.ref,i,n):u&&u.refs&&u.refs.forEach(c=>Pg(c,i,n))}},Ig=(n,l)=>{l.shouldUseNativeValidation&&Wc(n,l);const i={};for(const u in n){const c=rt(l.fields,u),f=Object.assign(n[u]||{},{ref:c&&c.ref});if(qS(l.names||Object.keys(n),u)){const d=Object.assign({},rt(i,u));qt(d,"root",f),qt(i,u,d)}else qt(i,u,f)}return i},qS=(n,l)=>{const i=tv(l);return n.some(u=>tv(u).match(`^${i}\\.\\d+`))};function tv(n){return n.replace(/\]|\[/g,"")}function J(n,l,i){function u(m,p){var v;Object.defineProperty(m,"_zod",{value:m._zod??{},enumerable:!1}),(v=m._zod).traits??(v.traits=new Set),m._zod.traits.add(n),l(m,p);for(const b in d.prototype)b in m||Object.defineProperty(m,b,{value:d.prototype[b].bind(m)});m._zod.constr=d,m._zod.def=p}const c=i?.Parent??Object;class f extends c{}Object.defineProperty(f,"name",{value:n});function d(m){var p;const v=i?.Parent?new f:this;u(v,m),(p=v._zod).deferred??(p.deferred=[]);for(const b of v._zod.deferred)b();return v}return Object.defineProperty(d,"init",{value:u}),Object.defineProperty(d,Symbol.hasInstance,{value:m=>i?.Parent&&m instanceof i.Parent?!0:m?._zod?.traits?.has(n)}),Object.defineProperty(d,"name",{value:n}),d}class lr extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}class vy extends Error{constructor(l){super(`Encountered unidirectional transform during encode: ${l}`),this.name="ZodEncodeError"}}const yy={};function ul(n){return yy}function GS(n){const l=Object.values(n).filter(u=>typeof u=="number");return Object.entries(n).filter(([u,c])=>l.indexOf(+u)===-1).map(([u,c])=>c)}function Pc(n,l){return typeof l=="bigint"?l.toString():l}function _f(n){return{get value(){{const l=n();return Object.defineProperty(this,"value",{value:l}),l}}}}function wf(n){return n==null}function xf(n){const l=n.startsWith("^")?1:0,i=n.endsWith("$")?n.length-1:n.length;return n.slice(l,i)}const ev=Symbol("evaluating");function Ft(n,l,i){let u;Object.defineProperty(n,l,{get(){if(u!==ev)return u===void 0&&(u=ev,u=i()),u},set(c){Object.defineProperty(n,l,{value:c})},configurable:!0})}function XS(n){return Object.create(Object.getPrototypeOf(n),Object.getOwnPropertyDescriptors(n))}function Va(n,l,i){Object.defineProperty(n,l,{value:i,writable:!0,enumerable:!0,configurable:!0})}function fr(...n){const l={};for(const i of n){const u=Object.getOwnPropertyDescriptors(i);Object.assign(l,u)}return Object.defineProperties({},l)}function nv(n){return JSON.stringify(n)}const py="captureStackTrace"in Error?Error.captureStackTrace:(...n)=>{};function lo(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}const QS=_f(()=>{if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{const n=Function;return new n(""),!0}catch{return!1}});function pi(n){if(lo(n)===!1)return!1;const l=n.constructor;if(l===void 0)return!0;const i=l.prototype;return!(lo(i)===!1||Object.prototype.hasOwnProperty.call(i,"isPrototypeOf")===!1)}function by(n){return pi(n)?{...n}:n}const $S=new Set(["string","number","symbol"]);function ir(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ba(n,l,i){const u=new n._zod.constr(l??n._zod.def);return(!l||i?.parent)&&(u._zod.parent=n),u}function At(n){const l=n;if(!l)return{};if(typeof l=="string")return{error:()=>l};if(l?.message!==void 0){if(l?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");l.error=l.message}return delete l.message,typeof l.error=="string"?{...l,error:()=>l.error}:l}function KS(n){return Object.keys(n).filter(l=>n[l]._zod.optin==="optional"&&n[l]._zod.optout==="optional")}function JS(n,l){const i=n._zod.def,u=fr(n._zod.def,{get shape(){const c={};for(const f in l){if(!(f in i.shape))throw new Error(`Unrecognized key: "${f}"`);l[f]&&(c[f]=i.shape[f])}return Va(this,"shape",c),c},checks:[]});return Ba(n,u)}function FS(n,l){const i=n._zod.def,u=fr(n._zod.def,{get shape(){const c={...n._zod.def.shape};for(const f in l){if(!(f in i.shape))throw new Error(`Unrecognized key: "${f}"`);l[f]&&delete c[f]}return Va(this,"shape",c),c},checks:[]});return Ba(n,u)}function WS(n,l){if(!pi(l))throw new Error("Invalid input to extend: expected a plain object");const i=n._zod.def.checks;if(i&&i.length>0)throw new Error("Object schemas containing refinements cannot be extended. Use `.safeExtend()` instead.");const c=fr(n._zod.def,{get shape(){const f={...n._zod.def.shape,...l};return Va(this,"shape",f),f},checks:[]});return Ba(n,c)}function PS(n,l){if(!pi(l))throw new Error("Invalid input to safeExtend: expected a plain object");const i={...n._zod.def,get shape(){const u={...n._zod.def.shape,...l};return Va(this,"shape",u),u},checks:n._zod.def.checks};return Ba(n,i)}function IS(n,l){const i=fr(n._zod.def,{get shape(){const u={...n._zod.def.shape,...l._zod.def.shape};return Va(this,"shape",u),u},get catchall(){return l._zod.def.catchall},checks:[]});return Ba(n,i)}function t_(n,l,i){const u=fr(l._zod.def,{get shape(){const c=l._zod.def.shape,f={...c};if(i)for(const d in i){if(!(d in c))throw new Error(`Unrecognized key: "${d}"`);i[d]&&(f[d]=n?new n({type:"optional",innerType:c[d]}):c[d])}else for(const d in c)f[d]=n?new n({type:"optional",innerType:c[d]}):c[d];return Va(this,"shape",f),f},checks:[]});return Ba(l,u)}function e_(n,l,i){const u=fr(l._zod.def,{get shape(){const c=l._zod.def.shape,f={...c};if(i)for(const d in i){if(!(d in f))throw new Error(`Unrecognized key: "${d}"`);i[d]&&(f[d]=new n({type:"nonoptional",innerType:c[d]}))}else for(const d in c)f[d]=new n({type:"nonoptional",innerType:c[d]});return Va(this,"shape",f),f},checks:[]});return Ba(l,u)}function er(n,l=0){if(n.aborted===!0)return!0;for(let i=l;i{var u;return(u=i).path??(u.path=[]),i.path.unshift(n),i})}function Yu(n){return typeof n=="string"?n:n?.message}function ol(n,l,i){const u={...n,path:n.path??[]};if(!n.message){const c=Yu(n.inst?._zod.def?.error?.(n))??Yu(l?.error?.(n))??Yu(i.customError?.(n))??Yu(i.localeError?.(n))??"Invalid input";u.message=c}return delete u.inst,delete u.continue,l?.reportInput||delete u.input,u}function Ef(n){return Array.isArray(n)?"array":typeof n=="string"?"string":"unknown"}function bi(...n){const[l,i,u]=n;return typeof l=="string"?{message:l,code:"custom",input:i,inst:u}:{...l}}const _y=(n,l)=>{n.name="$ZodError",Object.defineProperty(n,"_zod",{value:n._zod,enumerable:!1}),Object.defineProperty(n,"issues",{value:l,enumerable:!1}),n.message=JSON.stringify(l,Pc,2),Object.defineProperty(n,"toString",{value:()=>n.message,enumerable:!1})},Af=J("$ZodError",_y),mo=J("$ZodError",_y,{Parent:Error});function n_(n,l=i=>i.message){const i={},u=[];for(const c of n.issues)c.path.length>0?(i[c.path[0]]=i[c.path[0]]||[],i[c.path[0]].push(l(c))):u.push(l(c));return{formErrors:u,fieldErrors:i}}function a_(n,l){const i=l||function(f){return f.message},u={_errors:[]},c=f=>{for(const d of f.issues)if(d.code==="invalid_union"&&d.errors.length)d.errors.map(m=>c({issues:m}));else if(d.code==="invalid_key")c({issues:d.issues});else if(d.code==="invalid_element")c({issues:d.issues});else if(d.path.length===0)u._errors.push(i(d));else{let m=u,p=0;for(;p(l,i,u,c)=>{const f=u?Object.assign(u,{async:!1}):{async:!1},d=l._zod.run({value:i,issues:[]},f);if(d instanceof Promise)throw new lr;if(d.issues.length){const m=new(c?.Err??n)(d.issues.map(p=>ol(p,f,ul())));throw py(m,c?.callee),m}return d.value},l_=go(mo),vo=n=>async(l,i,u,c)=>{const f=u?Object.assign(u,{async:!0}):{async:!0};let d=l._zod.run({value:i,issues:[]},f);if(d instanceof Promise&&(d=await d),d.issues.length){const m=new(c?.Err??n)(d.issues.map(p=>ol(p,f,ul())));throw py(m,c?.callee),m}return d.value},r_=vo(mo),yo=n=>(l,i,u)=>{const c=u?{...u,async:!1}:{async:!1},f=l._zod.run({value:i,issues:[]},c);if(f instanceof Promise)throw new lr;return f.issues.length?{success:!1,error:new(n??Af)(f.issues.map(d=>ol(d,c,ul())))}:{success:!0,data:f.value}},i_=yo(mo),po=n=>async(l,i,u)=>{const c=u?Object.assign(u,{async:!0}):{async:!0};let f=l._zod.run({value:i,issues:[]},c);return f instanceof Promise&&(f=await f),f.issues.length?{success:!1,error:new n(f.issues.map(d=>ol(d,c,ul())))}:{success:!0,data:f.value}},u_=po(mo),o_=n=>(l,i,u)=>{const c=u?Object.assign(u,{direction:"backward"}):{direction:"backward"};return go(n)(l,i,c)},s_=n=>(l,i,u)=>go(n)(l,i,u),c_=n=>async(l,i,u)=>{const c=u?Object.assign(u,{direction:"backward"}):{direction:"backward"};return vo(n)(l,i,c)},f_=n=>async(l,i,u)=>vo(n)(l,i,u),d_=n=>(l,i,u)=>{const c=u?Object.assign(u,{direction:"backward"}):{direction:"backward"};return yo(n)(l,i,c)},h_=n=>(l,i,u)=>yo(n)(l,i,u),m_=n=>async(l,i,u)=>{const c=u?Object.assign(u,{direction:"backward"}):{direction:"backward"};return po(n)(l,i,c)},g_=n=>async(l,i,u)=>po(n)(l,i,u),v_=/^[cC][^\s-]{8,}$/,y_=/^[0-9a-z]+$/,p_=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,b_=/^[0-9a-vA-V]{20}$/,S_=/^[A-Za-z0-9]{27}$/,__=/^[a-zA-Z0-9_-]{21}$/,w_=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,x_=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,av=n=>n?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${n}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,E_=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,A_="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";function z_(){return new RegExp(A_,"u")}const T_=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,O_=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$/,R_=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,D_=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,M_=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,wy=/^[A-Za-z0-9_-]*$/,C_=/^(?=.{1,253}\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\.?$/,k_=/^\+(?:[0-9]){6,14}[0-9]$/,xy="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",N_=new RegExp(`^${xy}$`);function Ey(n){const l="(?:[01]\\d|2[0-3]):[0-5]\\d";return typeof n.precision=="number"?n.precision===-1?`${l}`:n.precision===0?`${l}:[0-5]\\d`:`${l}:[0-5]\\d\\.\\d{${n.precision}}`:`${l}(?::[0-5]\\d(?:\\.\\d+)?)?`}function U_(n){return new RegExp(`^${Ey(n)}$`)}function Z_(n){const l=Ey({precision:n.precision}),i=["Z"];n.local&&i.push(""),n.offset&&i.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");const u=`${l}(?:${i.join("|")})`;return new RegExp(`^${xy}T(?:${u})$`)}const V_=n=>{const l=n?`[\\s\\S]{${n?.minimum??0},${n?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${l}$`)},B_=/^[^A-Z]*$/,H_=/^[^a-z]*$/,Ln=J("$ZodCheck",(n,l)=>{var i;n._zod??(n._zod={}),n._zod.def=l,(i=n._zod).onattach??(i.onattach=[])}),j_=J("$ZodCheckMaxLength",(n,l)=>{var i;Ln.init(n,l),(i=n._zod.def).when??(i.when=u=>{const c=u.value;return!wf(c)&&c.length!==void 0}),n._zod.onattach.push(u=>{const c=u._zod.bag.maximum??Number.POSITIVE_INFINITY;l.maximum{const c=u.value;if(c.length<=l.maximum)return;const d=Ef(c);u.issues.push({origin:d,code:"too_big",maximum:l.maximum,inclusive:!0,input:c,inst:n,continue:!l.abort})}}),L_=J("$ZodCheckMinLength",(n,l)=>{var i;Ln.init(n,l),(i=n._zod.def).when??(i.when=u=>{const c=u.value;return!wf(c)&&c.length!==void 0}),n._zod.onattach.push(u=>{const c=u._zod.bag.minimum??Number.NEGATIVE_INFINITY;l.minimum>c&&(u._zod.bag.minimum=l.minimum)}),n._zod.check=u=>{const c=u.value;if(c.length>=l.minimum)return;const d=Ef(c);u.issues.push({origin:d,code:"too_small",minimum:l.minimum,inclusive:!0,input:c,inst:n,continue:!l.abort})}}),Y_=J("$ZodCheckLengthEquals",(n,l)=>{var i;Ln.init(n,l),(i=n._zod.def).when??(i.when=u=>{const c=u.value;return!wf(c)&&c.length!==void 0}),n._zod.onattach.push(u=>{const c=u._zod.bag;c.minimum=l.length,c.maximum=l.length,c.length=l.length}),n._zod.check=u=>{const c=u.value,f=c.length;if(f===l.length)return;const d=Ef(c),m=f>l.length;u.issues.push({origin:d,...m?{code:"too_big",maximum:l.length}:{code:"too_small",minimum:l.length},inclusive:!0,exact:!0,input:u.value,inst:n,continue:!l.abort})}}),bo=J("$ZodCheckStringFormat",(n,l)=>{var i,u;Ln.init(n,l),n._zod.onattach.push(c=>{const f=c._zod.bag;f.format=l.format,l.pattern&&(f.patterns??(f.patterns=new Set),f.patterns.add(l.pattern))}),l.pattern?(i=n._zod).check??(i.check=c=>{l.pattern.lastIndex=0,!l.pattern.test(c.value)&&c.issues.push({origin:"string",code:"invalid_format",format:l.format,input:c.value,...l.pattern?{pattern:l.pattern.toString()}:{},inst:n,continue:!l.abort})}):(u=n._zod).check??(u.check=()=>{})}),q_=J("$ZodCheckRegex",(n,l)=>{bo.init(n,l),n._zod.check=i=>{l.pattern.lastIndex=0,!l.pattern.test(i.value)&&i.issues.push({origin:"string",code:"invalid_format",format:"regex",input:i.value,pattern:l.pattern.toString(),inst:n,continue:!l.abort})}}),G_=J("$ZodCheckLowerCase",(n,l)=>{l.pattern??(l.pattern=B_),bo.init(n,l)}),X_=J("$ZodCheckUpperCase",(n,l)=>{l.pattern??(l.pattern=H_),bo.init(n,l)}),Q_=J("$ZodCheckIncludes",(n,l)=>{Ln.init(n,l);const i=ir(l.includes),u=new RegExp(typeof l.position=="number"?`^.{${l.position}}${i}`:i);l.pattern=u,n._zod.onattach.push(c=>{const f=c._zod.bag;f.patterns??(f.patterns=new Set),f.patterns.add(u)}),n._zod.check=c=>{c.value.includes(l.includes,l.position)||c.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:l.includes,input:c.value,inst:n,continue:!l.abort})}}),$_=J("$ZodCheckStartsWith",(n,l)=>{Ln.init(n,l);const i=new RegExp(`^${ir(l.prefix)}.*`);l.pattern??(l.pattern=i),n._zod.onattach.push(u=>{const c=u._zod.bag;c.patterns??(c.patterns=new Set),c.patterns.add(i)}),n._zod.check=u=>{u.value.startsWith(l.prefix)||u.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:l.prefix,input:u.value,inst:n,continue:!l.abort})}}),K_=J("$ZodCheckEndsWith",(n,l)=>{Ln.init(n,l);const i=new RegExp(`.*${ir(l.suffix)}$`);l.pattern??(l.pattern=i),n._zod.onattach.push(u=>{const c=u._zod.bag;c.patterns??(c.patterns=new Set),c.patterns.add(i)}),n._zod.check=u=>{u.value.endsWith(l.suffix)||u.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:l.suffix,input:u.value,inst:n,continue:!l.abort})}}),J_=J("$ZodCheckOverwrite",(n,l)=>{Ln.init(n,l),n._zod.check=i=>{i.value=l.tx(i.value)}});class F_{constructor(l=[]){this.content=[],this.indent=0,this&&(this.args=l)}indented(l){this.indent+=1,l(this),this.indent-=1}write(l){if(typeof l=="function"){l(this,{execution:"sync"}),l(this,{execution:"async"});return}const u=l.split(` `).filter(d=>d),c=Math.min(...u.map(d=>d.length-d.trimStart().length)),f=u.map(d=>d.slice(c)).map(d=>" ".repeat(this.indent*2)+d);for(const d of f)this.content.push(d)}compile(){const l=Function,i=this?.args,c=[...(this?.content??[""]).map(f=>` ${f}`)];return new l(...i,c.join(` -`))}}const F_={major:4,minor:1,patch:5},ge=J("$ZodType",(n,l)=>{var i;n??(n={}),n._zod.def=l,n._zod.bag=n._zod.bag||{},n._zod.version=F_;const u=[...n._zod.def.checks??[]];n._zod.traits.has("$ZodCheck")&&u.unshift(n);for(const c of u)for(const f of c._zod.onattach)f(n);if(u.length===0)(i=n._zod).deferred??(i.deferred=[]),n._zod.deferred?.push(()=>{n._zod.run=n._zod.parse});else{const c=(d,m,p)=>{let v=er(d),b;for(const y of m){if(y._zod.def.when){if(!y._zod.def.when(d))continue}else if(v)continue;const x=d.issues.length,T=y._zod.check(d);if(T instanceof Promise&&p?.async===!1)throw new lr;if(b||T instanceof Promise)b=(b??Promise.resolve()).then(async()=>{await T,d.issues.length!==x&&(v||(v=er(d,x)))});else{if(d.issues.length===x)continue;v||(v=er(d,x))}}return b?b.then(()=>d):d},f=(d,m,p)=>{if(er(d))return d.aborted=!0,d;const v=c(m,u,p);if(v instanceof Promise){if(p.async===!1)throw new lr;return v.then(b=>n._zod.parse(b,p))}return n._zod.parse(v,p)};n._zod.run=(d,m)=>{if(m.skipChecks)return n._zod.parse(d,m);if(m.direction==="backward"){const v=n._zod.parse({value:d.value,issues:[]},{...m,skipChecks:!0});return v instanceof Promise?v.then(b=>f(b,d,m)):f(v,d,m)}const p=n._zod.parse(d,m);if(p instanceof Promise){if(m.async===!1)throw new lr;return p.then(v=>c(v,u,m))}return c(p,u,m)}}n["~standard"]={validate:c=>{try{const f=r_(n,c);return f.success?{value:f.data}:{issues:f.error?.issues}}catch{return i_(n,c).then(d=>d.success?{value:d.data}:{issues:d.error?.issues})}},vendor:"zod",version:1}}),zf=J("$ZodString",(n,l)=>{ge.init(n,l),n._zod.pattern=[...n?._zod.bag?.patterns??[]].pop()??Z_(n._zod.bag),n._zod.parse=(i,u)=>{if(l.coerce)try{i.value=String(i.value)}catch{}return typeof i.value=="string"||i.issues.push({expected:"string",code:"invalid_type",input:i.value,inst:n}),i}}),It=J("$ZodStringFormat",(n,l)=>{bo.init(n,l),zf.init(n,l)}),W_=J("$ZodGUID",(n,l)=>{l.pattern??(l.pattern=w_),It.init(n,l)}),P_=J("$ZodUUID",(n,l)=>{if(l.version){const u={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[l.version];if(u===void 0)throw new Error(`Invalid UUID version: "${l.version}"`);l.pattern??(l.pattern=av(u))}else l.pattern??(l.pattern=av());It.init(n,l)}),I_=J("$ZodEmail",(n,l)=>{l.pattern??(l.pattern=x_),It.init(n,l)}),tw=J("$ZodURL",(n,l)=>{It.init(n,l),n._zod.check=i=>{try{const u=i.value.trim(),c=new URL(u);l.hostname&&(l.hostname.lastIndex=0,l.hostname.test(c.hostname)||i.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:M_.source,input:i.value,inst:n,continue:!l.abort})),l.protocol&&(l.protocol.lastIndex=0,l.protocol.test(c.protocol.endsWith(":")?c.protocol.slice(0,-1):c.protocol)||i.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:l.protocol.source,input:i.value,inst:n,continue:!l.abort})),l.normalize?i.value=c.href:i.value=u;return}catch{i.issues.push({code:"invalid_format",format:"url",input:i.value,inst:n,continue:!l.abort})}}}),ew=J("$ZodEmoji",(n,l)=>{l.pattern??(l.pattern=A_()),It.init(n,l)}),nw=J("$ZodNanoID",(n,l)=>{l.pattern??(l.pattern=S_),It.init(n,l)}),aw=J("$ZodCUID",(n,l)=>{l.pattern??(l.pattern=g_),It.init(n,l)}),lw=J("$ZodCUID2",(n,l)=>{l.pattern??(l.pattern=v_),It.init(n,l)}),rw=J("$ZodULID",(n,l)=>{l.pattern??(l.pattern=y_),It.init(n,l)}),iw=J("$ZodXID",(n,l)=>{l.pattern??(l.pattern=p_),It.init(n,l)}),uw=J("$ZodKSUID",(n,l)=>{l.pattern??(l.pattern=b_),It.init(n,l)}),ow=J("$ZodISODateTime",(n,l)=>{l.pattern??(l.pattern=U_(l)),It.init(n,l)}),sw=J("$ZodISODate",(n,l)=>{l.pattern??(l.pattern=k_),It.init(n,l)}),cw=J("$ZodISOTime",(n,l)=>{l.pattern??(l.pattern=N_(l)),It.init(n,l)}),fw=J("$ZodISODuration",(n,l)=>{l.pattern??(l.pattern=__),It.init(n,l)}),dw=J("$ZodIPv4",(n,l)=>{l.pattern??(l.pattern=z_),It.init(n,l),n._zod.onattach.push(i=>{const u=i._zod.bag;u.format="ipv4"})}),hw=J("$ZodIPv6",(n,l)=>{l.pattern??(l.pattern=T_),It.init(n,l),n._zod.onattach.push(i=>{const u=i._zod.bag;u.format="ipv6"}),n._zod.check=i=>{try{new URL(`http://[${i.value}]`)}catch{i.issues.push({code:"invalid_format",format:"ipv6",input:i.value,inst:n,continue:!l.abort})}}}),mw=J("$ZodCIDRv4",(n,l)=>{l.pattern??(l.pattern=O_),It.init(n,l)}),gw=J("$ZodCIDRv6",(n,l)=>{l.pattern??(l.pattern=R_),It.init(n,l),n._zod.check=i=>{const[u,c]=i.value.split("/");try{if(!c)throw new Error;const f=Number(c);if(`${f}`!==c)throw new Error;if(f<0||f>128)throw new Error;new URL(`http://[${u}]`)}catch{i.issues.push({code:"invalid_format",format:"cidrv6",input:i.value,inst:n,continue:!l.abort})}}});function Ay(n){if(n==="")return!0;if(n.length%4!==0)return!1;try{return atob(n),!0}catch{return!1}}const vw=J("$ZodBase64",(n,l)=>{l.pattern??(l.pattern=D_),It.init(n,l),n._zod.onattach.push(i=>{i._zod.bag.contentEncoding="base64"}),n._zod.check=i=>{Ay(i.value)||i.issues.push({code:"invalid_format",format:"base64",input:i.value,inst:n,continue:!l.abort})}});function yw(n){if(!wy.test(n))return!1;const l=n.replace(/[-_]/g,u=>u==="-"?"+":"/"),i=l.padEnd(Math.ceil(l.length/4)*4,"=");return Ay(i)}const pw=J("$ZodBase64URL",(n,l)=>{l.pattern??(l.pattern=wy),It.init(n,l),n._zod.onattach.push(i=>{i._zod.bag.contentEncoding="base64url"}),n._zod.check=i=>{yw(i.value)||i.issues.push({code:"invalid_format",format:"base64url",input:i.value,inst:n,continue:!l.abort})}}),bw=J("$ZodE164",(n,l)=>{l.pattern??(l.pattern=C_),It.init(n,l)});function Sw(n,l=null){try{const i=n.split(".");if(i.length!==3)return!1;const[u]=i;if(!u)return!1;const c=JSON.parse(atob(u));return!("typ"in c&&c?.typ!=="JWT"||!c.alg||l&&(!("alg"in c)||c.alg!==l))}catch{return!1}}const _w=J("$ZodJWT",(n,l)=>{It.init(n,l),n._zod.check=i=>{Sw(i.value,l.alg)||i.issues.push({code:"invalid_format",format:"jwt",input:i.value,inst:n,continue:!l.abort})}}),ww=J("$ZodUnknown",(n,l)=>{ge.init(n,l),n._zod.parse=i=>i}),xw=J("$ZodNever",(n,l)=>{ge.init(n,l),n._zod.parse=(i,u)=>(i.issues.push({expected:"never",code:"invalid_type",input:i.value,inst:n}),i)});function lv(n,l,i){n.issues.length&&l.issues.push(...Sy(i,n.issues)),l.value[i]=n.value}const Ew=J("$ZodArray",(n,l)=>{ge.init(n,l),n._zod.parse=(i,u)=>{const c=i.value;if(!Array.isArray(c))return i.issues.push({expected:"array",code:"invalid_type",input:c,inst:n}),i;i.value=Array(c.length);const f=[];for(let d=0;dlv(v,i,d))):lv(p,i,d)}return f.length?Promise.all(f).then(()=>i):i}});function ro(n,l,i,u){n.issues.length&&l.issues.push(...Sy(i,n.issues)),n.value===void 0?i in u&&(l.value[i]=void 0):l.value[i]=n.value}function zy(n){const l=Object.keys(n.shape);for(const u of l)if(!n.shape[u]._zod.traits.has("$ZodType"))throw new Error(`Invalid element at key "${u}": expected a Zod schema`);const i=$S(n.shape);return{...n,keys:l,keySet:new Set(l),numKeys:l.length,optionalKeys:new Set(i)}}function Ty(n,l,i,u,c,f){const d=[],m=c.keySet,p=c.catchall._zod,v=p.def.type;for(const b of Object.keys(l)){if(m.has(b))continue;if(v==="never"){d.push(b);continue}const y=p.run({value:l[b],issues:[]},u);y instanceof Promise?n.push(y.then(x=>ro(x,i,b,l))):ro(y,i,b,l)}return d.length&&i.issues.push({code:"unrecognized_keys",keys:d,input:l,inst:f}),n.length?Promise.all(n).then(()=>i):i}const Aw=J("$ZodObject",(n,l)=>{ge.init(n,l);const i=_f(()=>zy(l));Ft(n._zod,"propValues",()=>{const d=l.shape,m={};for(const p in d){const v=d[p]._zod;if(v.values){m[p]??(m[p]=new Set);for(const b of v.values)m[p].add(b)}}return m});const u=lo,c=l.catchall;let f;n._zod.parse=(d,m)=>{f??(f=i.value);const p=d.value;if(!u(p))return d.issues.push({expected:"object",code:"invalid_type",input:p,inst:n}),d;d.value={};const v=[],b=f.shape;for(const y of f.keys){const T=b[y]._zod.run({value:p[y],issues:[]},m);T instanceof Promise?v.push(T.then(k=>ro(k,d,y,p))):ro(T,d,y,p)}return c?Ty(v,p,d,m,i.value,n):v.length?Promise.all(v).then(()=>d):d}}),zw=J("$ZodObjectJIT",(n,l)=>{Aw.init(n,l);const i=n._zod.parse,u=_f(()=>zy(l)),c=x=>{const T=new J_(["shape","payload","ctx"]),k=u.value,C=K=>{const F=nv(K);return`shape[${F}]._zod.run({ value: input[${F}], issues: [] }, ctx)`};T.write("const input = payload.value;");const B=Object.create(null);let X=0;for(const K of k.keys)B[K]=`key_${X++}`;T.write("const newResult = {}");for(const K of k.keys){const F=B[K],Z=nv(K);T.write(`const ${F} = ${C(K)};`),T.write(` +`))}}const W_={major:4,minor:1,patch:5},ge=J("$ZodType",(n,l)=>{var i;n??(n={}),n._zod.def=l,n._zod.bag=n._zod.bag||{},n._zod.version=W_;const u=[...n._zod.def.checks??[]];n._zod.traits.has("$ZodCheck")&&u.unshift(n);for(const c of u)for(const f of c._zod.onattach)f(n);if(u.length===0)(i=n._zod).deferred??(i.deferred=[]),n._zod.deferred?.push(()=>{n._zod.run=n._zod.parse});else{const c=(d,m,p)=>{let v=er(d),b;for(const y of m){if(y._zod.def.when){if(!y._zod.def.when(d))continue}else if(v)continue;const x=d.issues.length,T=y._zod.check(d);if(T instanceof Promise&&p?.async===!1)throw new lr;if(b||T instanceof Promise)b=(b??Promise.resolve()).then(async()=>{await T,d.issues.length!==x&&(v||(v=er(d,x)))});else{if(d.issues.length===x)continue;v||(v=er(d,x))}}return b?b.then(()=>d):d},f=(d,m,p)=>{if(er(d))return d.aborted=!0,d;const v=c(m,u,p);if(v instanceof Promise){if(p.async===!1)throw new lr;return v.then(b=>n._zod.parse(b,p))}return n._zod.parse(v,p)};n._zod.run=(d,m)=>{if(m.skipChecks)return n._zod.parse(d,m);if(m.direction==="backward"){const v=n._zod.parse({value:d.value,issues:[]},{...m,skipChecks:!0});return v instanceof Promise?v.then(b=>f(b,d,m)):f(v,d,m)}const p=n._zod.parse(d,m);if(p instanceof Promise){if(m.async===!1)throw new lr;return p.then(v=>c(v,u,m))}return c(p,u,m)}}n["~standard"]={validate:c=>{try{const f=i_(n,c);return f.success?{value:f.data}:{issues:f.error?.issues}}catch{return u_(n,c).then(d=>d.success?{value:d.data}:{issues:d.error?.issues})}},vendor:"zod",version:1}}),zf=J("$ZodString",(n,l)=>{ge.init(n,l),n._zod.pattern=[...n?._zod.bag?.patterns??[]].pop()??V_(n._zod.bag),n._zod.parse=(i,u)=>{if(l.coerce)try{i.value=String(i.value)}catch{}return typeof i.value=="string"||i.issues.push({expected:"string",code:"invalid_type",input:i.value,inst:n}),i}}),It=J("$ZodStringFormat",(n,l)=>{bo.init(n,l),zf.init(n,l)}),P_=J("$ZodGUID",(n,l)=>{l.pattern??(l.pattern=x_),It.init(n,l)}),I_=J("$ZodUUID",(n,l)=>{if(l.version){const u={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[l.version];if(u===void 0)throw new Error(`Invalid UUID version: "${l.version}"`);l.pattern??(l.pattern=av(u))}else l.pattern??(l.pattern=av());It.init(n,l)}),tw=J("$ZodEmail",(n,l)=>{l.pattern??(l.pattern=E_),It.init(n,l)}),ew=J("$ZodURL",(n,l)=>{It.init(n,l),n._zod.check=i=>{try{const u=i.value.trim(),c=new URL(u);l.hostname&&(l.hostname.lastIndex=0,l.hostname.test(c.hostname)||i.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:C_.source,input:i.value,inst:n,continue:!l.abort})),l.protocol&&(l.protocol.lastIndex=0,l.protocol.test(c.protocol.endsWith(":")?c.protocol.slice(0,-1):c.protocol)||i.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:l.protocol.source,input:i.value,inst:n,continue:!l.abort})),l.normalize?i.value=c.href:i.value=u;return}catch{i.issues.push({code:"invalid_format",format:"url",input:i.value,inst:n,continue:!l.abort})}}}),nw=J("$ZodEmoji",(n,l)=>{l.pattern??(l.pattern=z_()),It.init(n,l)}),aw=J("$ZodNanoID",(n,l)=>{l.pattern??(l.pattern=__),It.init(n,l)}),lw=J("$ZodCUID",(n,l)=>{l.pattern??(l.pattern=v_),It.init(n,l)}),rw=J("$ZodCUID2",(n,l)=>{l.pattern??(l.pattern=y_),It.init(n,l)}),iw=J("$ZodULID",(n,l)=>{l.pattern??(l.pattern=p_),It.init(n,l)}),uw=J("$ZodXID",(n,l)=>{l.pattern??(l.pattern=b_),It.init(n,l)}),ow=J("$ZodKSUID",(n,l)=>{l.pattern??(l.pattern=S_),It.init(n,l)}),sw=J("$ZodISODateTime",(n,l)=>{l.pattern??(l.pattern=Z_(l)),It.init(n,l)}),cw=J("$ZodISODate",(n,l)=>{l.pattern??(l.pattern=N_),It.init(n,l)}),fw=J("$ZodISOTime",(n,l)=>{l.pattern??(l.pattern=U_(l)),It.init(n,l)}),dw=J("$ZodISODuration",(n,l)=>{l.pattern??(l.pattern=w_),It.init(n,l)}),hw=J("$ZodIPv4",(n,l)=>{l.pattern??(l.pattern=T_),It.init(n,l),n._zod.onattach.push(i=>{const u=i._zod.bag;u.format="ipv4"})}),mw=J("$ZodIPv6",(n,l)=>{l.pattern??(l.pattern=O_),It.init(n,l),n._zod.onattach.push(i=>{const u=i._zod.bag;u.format="ipv6"}),n._zod.check=i=>{try{new URL(`http://[${i.value}]`)}catch{i.issues.push({code:"invalid_format",format:"ipv6",input:i.value,inst:n,continue:!l.abort})}}}),gw=J("$ZodCIDRv4",(n,l)=>{l.pattern??(l.pattern=R_),It.init(n,l)}),vw=J("$ZodCIDRv6",(n,l)=>{l.pattern??(l.pattern=D_),It.init(n,l),n._zod.check=i=>{const[u,c]=i.value.split("/");try{if(!c)throw new Error;const f=Number(c);if(`${f}`!==c)throw new Error;if(f<0||f>128)throw new Error;new URL(`http://[${u}]`)}catch{i.issues.push({code:"invalid_format",format:"cidrv6",input:i.value,inst:n,continue:!l.abort})}}});function Ay(n){if(n==="")return!0;if(n.length%4!==0)return!1;try{return atob(n),!0}catch{return!1}}const yw=J("$ZodBase64",(n,l)=>{l.pattern??(l.pattern=M_),It.init(n,l),n._zod.onattach.push(i=>{i._zod.bag.contentEncoding="base64"}),n._zod.check=i=>{Ay(i.value)||i.issues.push({code:"invalid_format",format:"base64",input:i.value,inst:n,continue:!l.abort})}});function pw(n){if(!wy.test(n))return!1;const l=n.replace(/[-_]/g,u=>u==="-"?"+":"/"),i=l.padEnd(Math.ceil(l.length/4)*4,"=");return Ay(i)}const bw=J("$ZodBase64URL",(n,l)=>{l.pattern??(l.pattern=wy),It.init(n,l),n._zod.onattach.push(i=>{i._zod.bag.contentEncoding="base64url"}),n._zod.check=i=>{pw(i.value)||i.issues.push({code:"invalid_format",format:"base64url",input:i.value,inst:n,continue:!l.abort})}}),Sw=J("$ZodE164",(n,l)=>{l.pattern??(l.pattern=k_),It.init(n,l)});function _w(n,l=null){try{const i=n.split(".");if(i.length!==3)return!1;const[u]=i;if(!u)return!1;const c=JSON.parse(atob(u));return!("typ"in c&&c?.typ!=="JWT"||!c.alg||l&&(!("alg"in c)||c.alg!==l))}catch{return!1}}const ww=J("$ZodJWT",(n,l)=>{It.init(n,l),n._zod.check=i=>{_w(i.value,l.alg)||i.issues.push({code:"invalid_format",format:"jwt",input:i.value,inst:n,continue:!l.abort})}}),xw=J("$ZodUnknown",(n,l)=>{ge.init(n,l),n._zod.parse=i=>i}),Ew=J("$ZodNever",(n,l)=>{ge.init(n,l),n._zod.parse=(i,u)=>(i.issues.push({expected:"never",code:"invalid_type",input:i.value,inst:n}),i)});function lv(n,l,i){n.issues.length&&l.issues.push(...Sy(i,n.issues)),l.value[i]=n.value}const Aw=J("$ZodArray",(n,l)=>{ge.init(n,l),n._zod.parse=(i,u)=>{const c=i.value;if(!Array.isArray(c))return i.issues.push({expected:"array",code:"invalid_type",input:c,inst:n}),i;i.value=Array(c.length);const f=[];for(let d=0;dlv(v,i,d))):lv(p,i,d)}return f.length?Promise.all(f).then(()=>i):i}});function ro(n,l,i,u){n.issues.length&&l.issues.push(...Sy(i,n.issues)),n.value===void 0?i in u&&(l.value[i]=void 0):l.value[i]=n.value}function zy(n){const l=Object.keys(n.shape);for(const u of l)if(!n.shape[u]._zod.traits.has("$ZodType"))throw new Error(`Invalid element at key "${u}": expected a Zod schema`);const i=KS(n.shape);return{...n,keys:l,keySet:new Set(l),numKeys:l.length,optionalKeys:new Set(i)}}function Ty(n,l,i,u,c,f){const d=[],m=c.keySet,p=c.catchall._zod,v=p.def.type;for(const b of Object.keys(l)){if(m.has(b))continue;if(v==="never"){d.push(b);continue}const y=p.run({value:l[b],issues:[]},u);y instanceof Promise?n.push(y.then(x=>ro(x,i,b,l))):ro(y,i,b,l)}return d.length&&i.issues.push({code:"unrecognized_keys",keys:d,input:l,inst:f}),n.length?Promise.all(n).then(()=>i):i}const zw=J("$ZodObject",(n,l)=>{ge.init(n,l);const i=_f(()=>zy(l));Ft(n._zod,"propValues",()=>{const d=l.shape,m={};for(const p in d){const v=d[p]._zod;if(v.values){m[p]??(m[p]=new Set);for(const b of v.values)m[p].add(b)}}return m});const u=lo,c=l.catchall;let f;n._zod.parse=(d,m)=>{f??(f=i.value);const p=d.value;if(!u(p))return d.issues.push({expected:"object",code:"invalid_type",input:p,inst:n}),d;d.value={};const v=[],b=f.shape;for(const y of f.keys){const T=b[y]._zod.run({value:p[y],issues:[]},m);T instanceof Promise?v.push(T.then(k=>ro(k,d,y,p))):ro(T,d,y,p)}return c?Ty(v,p,d,m,i.value,n):v.length?Promise.all(v).then(()=>d):d}}),Tw=J("$ZodObjectJIT",(n,l)=>{zw.init(n,l);const i=n._zod.parse,u=_f(()=>zy(l)),c=x=>{const T=new F_(["shape","payload","ctx"]),k=u.value,C=K=>{const F=nv(K);return`shape[${F}]._zod.run({ value: input[${F}], issues: [] }, ctx)`};T.write("const input = payload.value;");const B=Object.create(null);let X=0;for(const K of k.keys)B[K]=`key_${X++}`;T.write("const newResult = {}");for(const K of k.keys){const F=B[K],Z=nv(K);T.write(`const ${F} = ${C(K)};`),T.write(` if (${F}.issues.length) { payload.issues = payload.issues.concat(${F}.issues.map(iss => ({ ...iss, @@ -79,7 +79,7 @@ import{g as Av}from"./router-CcA--AgE.js";function q0(n,l){for(var i=0;iH(x,K,F)};let f;const d=lo,m=!yy.jitless,v=m&&XS.value,b=l.catchall;let y;n._zod.parse=(x,T)=>{y??(y=u.value);const k=x.value;return d(k)?m&&v&&T?.async===!1&&T.jitless!==!0?(f||(f=c(l.shape)),x=f(x,T),b?Ty([],k,x,T,y,n):x):i(x,T):(x.issues.push({expected:"object",code:"invalid_type",input:k,inst:n}),x)}});function rv(n,l,i,u){for(const f of n)if(f.issues.length===0)return l.value=f.value,l;const c=n.filter(f=>!er(f));return c.length===1?(l.value=c[0].value,c[0]):(l.issues.push({code:"invalid_union",input:l.value,inst:i,errors:n.map(f=>f.issues.map(d=>ol(d,u,ul())))}),l)}const Tw=J("$ZodUnion",(n,l)=>{ge.init(n,l),Ft(n._zod,"optin",()=>l.options.some(c=>c._zod.optin==="optional")?"optional":void 0),Ft(n._zod,"optout",()=>l.options.some(c=>c._zod.optout==="optional")?"optional":void 0),Ft(n._zod,"values",()=>{if(l.options.every(c=>c._zod.values))return new Set(l.options.flatMap(c=>Array.from(c._zod.values)))}),Ft(n._zod,"pattern",()=>{if(l.options.every(c=>c._zod.pattern)){const c=l.options.map(f=>f._zod.pattern);return new RegExp(`^(${c.map(f=>xf(f.source)).join("|")})$`)}});const i=l.options.length===1,u=l.options[0]._zod.run;n._zod.parse=(c,f)=>{if(i)return u(c,f);let d=!1;const m=[];for(const p of l.options){const v=p._zod.run({value:c.value,issues:[]},f);if(v instanceof Promise)m.push(v),d=!0;else{if(v.issues.length===0)return v;m.push(v)}}return d?Promise.all(m).then(p=>rv(p,c,n,f)):rv(m,c,n,f)}}),Ow=J("$ZodIntersection",(n,l)=>{ge.init(n,l),n._zod.parse=(i,u)=>{const c=i.value,f=l.left._zod.run({value:c,issues:[]},u),d=l.right._zod.run({value:c,issues:[]},u);return f instanceof Promise||d instanceof Promise?Promise.all([f,d]).then(([p,v])=>iv(i,p,v)):iv(i,f,d)}});function Ic(n,l){if(n===l)return{valid:!0,data:n};if(n instanceof Date&&l instanceof Date&&+n==+l)return{valid:!0,data:n};if(yi(n)&&yi(l)){const i=Object.keys(l),u=Object.keys(n).filter(f=>i.indexOf(f)!==-1),c={...n,...l};for(const f of u){const d=Ic(n[f],l[f]);if(!d.valid)return{valid:!1,mergeErrorPath:[f,...d.mergeErrorPath]};c[f]=d.data}return{valid:!0,data:c}}if(Array.isArray(n)&&Array.isArray(l)){if(n.length!==l.length)return{valid:!1,mergeErrorPath:[]};const i=[];for(let u=0;u{ge.init(n,l);const i=qS(l.entries),u=new Set(i);n._zod.values=u,n._zod.pattern=new RegExp(`^(${i.filter(c=>QS.has(typeof c)).map(c=>typeof c=="string"?ir(c):c.toString()).join("|")})$`),n._zod.parse=(c,f)=>{const d=c.value;return u.has(d)||c.issues.push({code:"invalid_value",values:i,input:d,inst:n}),c}}),Dw=J("$ZodLiteral",(n,l)=>{if(ge.init(n,l),l.values.length===0)throw new Error("Cannot create literal schema with no valid values");n._zod.values=new Set(l.values),n._zod.pattern=new RegExp(`^(${l.values.map(i=>typeof i=="string"?ir(i):i?ir(i.toString()):String(i)).join("|")})$`),n._zod.parse=(i,u)=>{const c=i.value;return n._zod.values.has(c)||i.issues.push({code:"invalid_value",values:l.values,input:c,inst:n}),i}}),Mw=J("$ZodTransform",(n,l)=>{ge.init(n,l),n._zod.parse=(i,u)=>{if(u.direction==="backward")throw new vy(n.constructor.name);const c=l.transform(i.value,i);if(u.async)return(c instanceof Promise?c:Promise.resolve(c)).then(d=>(i.value=d,i));if(c instanceof Promise)throw new lr;return i.value=c,i}});function uv(n,l){return n.issues.length&&l===void 0?{issues:[],value:void 0}:n}const Cw=J("$ZodOptional",(n,l)=>{ge.init(n,l),n._zod.optin="optional",n._zod.optout="optional",Ft(n._zod,"values",()=>l.innerType._zod.values?new Set([...l.innerType._zod.values,void 0]):void 0),Ft(n._zod,"pattern",()=>{const i=l.innerType._zod.pattern;return i?new RegExp(`^(${xf(i.source)})?$`):void 0}),n._zod.parse=(i,u)=>{if(l.innerType._zod.optin==="optional"){const c=l.innerType._zod.run(i,u);return c instanceof Promise?c.then(f=>uv(f,i.value)):uv(c,i.value)}return i.value===void 0?i:l.innerType._zod.run(i,u)}}),kw=J("$ZodNullable",(n,l)=>{ge.init(n,l),Ft(n._zod,"optin",()=>l.innerType._zod.optin),Ft(n._zod,"optout",()=>l.innerType._zod.optout),Ft(n._zod,"pattern",()=>{const i=l.innerType._zod.pattern;return i?new RegExp(`^(${xf(i.source)}|null)$`):void 0}),Ft(n._zod,"values",()=>l.innerType._zod.values?new Set([...l.innerType._zod.values,null]):void 0),n._zod.parse=(i,u)=>i.value===null?i:l.innerType._zod.run(i,u)}),Nw=J("$ZodDefault",(n,l)=>{ge.init(n,l),n._zod.optin="optional",Ft(n._zod,"values",()=>l.innerType._zod.values),n._zod.parse=(i,u)=>{if(u.direction==="backward")return l.innerType._zod.run(i,u);if(i.value===void 0)return i.value=l.defaultValue,i;const c=l.innerType._zod.run(i,u);return c instanceof Promise?c.then(f=>ov(f,l)):ov(c,l)}});function ov(n,l){return n.value===void 0&&(n.value=l.defaultValue),n}const Uw=J("$ZodPrefault",(n,l)=>{ge.init(n,l),n._zod.optin="optional",Ft(n._zod,"values",()=>l.innerType._zod.values),n._zod.parse=(i,u)=>(u.direction==="backward"||i.value===void 0&&(i.value=l.defaultValue),l.innerType._zod.run(i,u))}),Zw=J("$ZodNonOptional",(n,l)=>{ge.init(n,l),Ft(n._zod,"values",()=>{const i=l.innerType._zod.values;return i?new Set([...i].filter(u=>u!==void 0)):void 0}),n._zod.parse=(i,u)=>{const c=l.innerType._zod.run(i,u);return c instanceof Promise?c.then(f=>sv(f,n)):sv(c,n)}});function sv(n,l){return!n.issues.length&&n.value===void 0&&n.issues.push({code:"invalid_type",expected:"nonoptional",input:n.value,inst:l}),n}const Vw=J("$ZodCatch",(n,l)=>{ge.init(n,l),Ft(n._zod,"optin",()=>l.innerType._zod.optin),Ft(n._zod,"optout",()=>l.innerType._zod.optout),Ft(n._zod,"values",()=>l.innerType._zod.values),n._zod.parse=(i,u)=>{if(u.direction==="backward")return l.innerType._zod.run(i,u);const c=l.innerType._zod.run(i,u);return c instanceof Promise?c.then(f=>(i.value=f.value,f.issues.length&&(i.value=l.catchValue({...i,error:{issues:f.issues.map(d=>ol(d,u,ul()))},input:i.value}),i.issues=[]),i)):(i.value=c.value,c.issues.length&&(i.value=l.catchValue({...i,error:{issues:c.issues.map(f=>ol(f,u,ul()))},input:i.value}),i.issues=[]),i)}}),Bw=J("$ZodPipe",(n,l)=>{ge.init(n,l),Ft(n._zod,"values",()=>l.in._zod.values),Ft(n._zod,"optin",()=>l.in._zod.optin),Ft(n._zod,"optout",()=>l.out._zod.optout),Ft(n._zod,"propValues",()=>l.in._zod.propValues),n._zod.parse=(i,u)=>{if(u.direction==="backward"){const f=l.out._zod.run(i,u);return f instanceof Promise?f.then(d=>Yu(d,l.in,u)):Yu(f,l.in,u)}const c=l.in._zod.run(i,u);return c instanceof Promise?c.then(f=>Yu(f,l.out,u)):Yu(c,l.out,u)}});function Yu(n,l,i){return n.issues.length?(n.aborted=!0,n):l._zod.run({value:n.value,issues:n.issues},i)}const Hw=J("$ZodReadonly",(n,l)=>{ge.init(n,l),Ft(n._zod,"propValues",()=>l.innerType._zod.propValues),Ft(n._zod,"values",()=>l.innerType._zod.values),Ft(n._zod,"optin",()=>l.innerType._zod.optin),Ft(n._zod,"optout",()=>l.innerType._zod.optout),n._zod.parse=(i,u)=>{if(u.direction==="backward")return l.innerType._zod.run(i,u);const c=l.innerType._zod.run(i,u);return c instanceof Promise?c.then(cv):cv(c)}});function cv(n){return n.value=Object.freeze(n.value),n}const jw=J("$ZodCustom",(n,l)=>{Ln.init(n,l),ge.init(n,l),n._zod.parse=(i,u)=>i,n._zod.check=i=>{const u=i.value,c=l.fn(u);if(c instanceof Promise)return c.then(f=>fv(f,i,u,n));fv(c,i,u,n)}});function fv(n,l,i,u){if(!n){const c={code:"custom",input:i,inst:u,path:[...u._zod.def.path??[]],continue:!u._zod.def.abort};u._zod.def.params&&(c.params=u._zod.def.params),l.issues.push(pi(c))}}class Lw{constructor(){this._map=new Map,this._idmap=new Map}add(l,...i){const u=i[0];if(this._map.set(l,u),u&&typeof u=="object"&&"id"in u){if(this._idmap.has(u.id))throw new Error(`ID ${u.id} already exists in the registry`);this._idmap.set(u.id,l)}return this}clear(){return this._map=new Map,this._idmap=new Map,this}remove(l){const i=this._map.get(l);return i&&typeof i=="object"&&"id"in i&&this._idmap.delete(i.id),this._map.delete(l),this}get(l){const i=l._zod.parent;if(i){const u={...this.get(i)??{}};delete u.id;const c={...u,...this._map.get(l)};return Object.keys(c).length?c:void 0}return this._map.get(l)}has(l){return this._map.has(l)}}function Yw(){return new Lw}const qu=Yw();function qw(n,l){return new n({type:"string",...At(l)})}function Oy(n,l){return new n({type:"string",format:"email",check:"string_format",abort:!1,...At(l)})}function dv(n,l){return new n({type:"string",format:"guid",check:"string_format",abort:!1,...At(l)})}function Gw(n,l){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,...At(l)})}function Xw(n,l){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...At(l)})}function Qw(n,l){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...At(l)})}function $w(n,l){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...At(l)})}function Kw(n,l){return new n({type:"string",format:"url",check:"string_format",abort:!1,...At(l)})}function Jw(n,l){return new n({type:"string",format:"emoji",check:"string_format",abort:!1,...At(l)})}function Fw(n,l){return new n({type:"string",format:"nanoid",check:"string_format",abort:!1,...At(l)})}function Ww(n,l){return new n({type:"string",format:"cuid",check:"string_format",abort:!1,...At(l)})}function Pw(n,l){return new n({type:"string",format:"cuid2",check:"string_format",abort:!1,...At(l)})}function Iw(n,l){return new n({type:"string",format:"ulid",check:"string_format",abort:!1,...At(l)})}function tx(n,l){return new n({type:"string",format:"xid",check:"string_format",abort:!1,...At(l)})}function ex(n,l){return new n({type:"string",format:"ksuid",check:"string_format",abort:!1,...At(l)})}function nx(n,l){return new n({type:"string",format:"ipv4",check:"string_format",abort:!1,...At(l)})}function ax(n,l){return new n({type:"string",format:"ipv6",check:"string_format",abort:!1,...At(l)})}function lx(n,l){return new n({type:"string",format:"cidrv4",check:"string_format",abort:!1,...At(l)})}function rx(n,l){return new n({type:"string",format:"cidrv6",check:"string_format",abort:!1,...At(l)})}function ix(n,l){return new n({type:"string",format:"base64",check:"string_format",abort:!1,...At(l)})}function ux(n,l){return new n({type:"string",format:"base64url",check:"string_format",abort:!1,...At(l)})}function ox(n,l){return new n({type:"string",format:"e164",check:"string_format",abort:!1,...At(l)})}function sx(n,l){return new n({type:"string",format:"jwt",check:"string_format",abort:!1,...At(l)})}function cx(n,l){return new n({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...At(l)})}function fx(n,l){return new n({type:"string",format:"date",check:"string_format",...At(l)})}function dx(n,l){return new n({type:"string",format:"time",check:"string_format",precision:null,...At(l)})}function hx(n,l){return new n({type:"string",format:"duration",check:"string_format",...At(l)})}function mx(n){return new n({type:"unknown"})}function gx(n,l){return new n({type:"never",...At(l)})}function Ry(n,l){return new H_({check:"max_length",...At(l),maximum:n})}function io(n,l){return new j_({check:"min_length",...At(l),minimum:n})}function Dy(n,l){return new L_({check:"length_equals",...At(l),length:n})}function vx(n,l){return new Y_({check:"string_format",format:"regex",...At(l),pattern:n})}function yx(n){return new q_({check:"string_format",format:"lowercase",...At(n)})}function px(n){return new G_({check:"string_format",format:"uppercase",...At(n)})}function bx(n,l){return new X_({check:"string_format",format:"includes",...At(l),includes:n})}function Sx(n,l){return new Q_({check:"string_format",format:"starts_with",...At(l),prefix:n})}function _x(n,l){return new $_({check:"string_format",format:"ends_with",...At(l),suffix:n})}function _i(n){return new K_({check:"overwrite",tx:n})}function wx(n){return _i(l=>l.normalize(n))}function xx(){return _i(n=>n.trim())}function Ex(){return _i(n=>n.toLowerCase())}function Ax(){return _i(n=>n.toUpperCase())}function zx(n,l,i){return new n({type:"array",element:l,...At(i)})}function Tx(n,l,i){return new n({type:"custom",check:"custom",fn:l,...At(i)})}function Ox(n){const l=Rx(i=>(i.addIssue=u=>{if(typeof u=="string")i.issues.push(pi(u,i.value,l._zod.def));else{const c=u;c.fatal&&(c.continue=!1),c.code??(c.code="custom"),c.input??(c.input=i.value),c.inst??(c.inst=l),c.continue??(c.continue=!l._zod.def.abort),i.issues.push(pi(c))}},n(i.value,i)));return l}function Rx(n,l){const i=new Ln({check:"custom",...At(l)});return i._zod.check=n,i}function hv(n,l){try{var i=n()}catch(u){return l(u)}return i&&i.then?i.then(void 0,l):i}function Dx(n,l){for(var i={};n.length;){var u=n[0],c=u.code,f=u.message,d=u.path.join(".");if(!i[d])if("unionErrors"in u){var m=u.unionErrors[0].errors[0];i[d]={message:m.message,type:m.code}}else i[d]={message:f,type:c};if("unionErrors"in u&&u.unionErrors.forEach(function(b){return b.errors.forEach(function(y){return n.push(y)})}),l){var p=i[d].types,v=p&&p[u.code];i[d]=pf(d,l,i,c,v?[].concat(v,u.message):u.message)}n.shift()}return i}function Mx(n,l){for(var i={};n.length;){var u=n[0],c=u.code,f=u.message,d=u.path.join(".");if(!i[d])if(u.code==="invalid_union"&&u.errors.length>0){var m=u.errors[0][0];i[d]={message:m.message,type:m.code}}else i[d]={message:f,type:c};if(u.code==="invalid_union"&&u.errors.forEach(function(b){return b.forEach(function(y){return n.push(y)})}),l){var p=i[d].types,v=p&&p[u.code];i[d]=pf(d,l,i,c,v?[].concat(v,u.message):u.message)}n.shift()}return i}function j2(n,l,i){if(i===void 0&&(i={}),(function(u){return"_def"in u&&typeof u._def=="object"&&"typeName"in u._def})(n))return function(u,c,f){try{return Promise.resolve(hv(function(){return Promise.resolve(n[i.mode==="sync"?"parse":"parseAsync"](u,l)).then(function(d){return f.shouldUseNativeValidation&&Wc({},f),{errors:{},values:i.raw?Object.assign({},u):d}})},function(d){if((function(m){return Array.isArray(m?.issues)})(d))return{values:{},errors:Ig(Dx(d.errors,!f.shouldUseNativeValidation&&f.criteriaMode==="all"),f)};throw d}))}catch(d){return Promise.reject(d)}};if((function(u){return"_zod"in u&&typeof u._zod=="object"})(n))return function(u,c,f){try{return Promise.resolve(hv(function(){return Promise.resolve((i.mode==="sync"?a_:l_)(n,u,l)).then(function(d){return f.shouldUseNativeValidation&&Wc({},f),{errors:{},values:i.raw?Object.assign({},u):d}})},function(d){if((function(m){return m instanceof Af})(d))return{values:{},errors:Ig(Mx(d.issues,!f.shouldUseNativeValidation&&f.criteriaMode==="all"),f)};throw d}))}catch(d){return Promise.reject(d)}};throw new Error("Invalid input: not a Zod schema")}function Cx(n){if(typeof document>"u")return;let l=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css",l.appendChild(i),i.styleSheet?i.styleSheet.cssText=n:i.appendChild(document.createTextNode(n))}const kx=n=>{switch(n){case"success":return Zx;case"info":return Bx;case"warning":return Vx;case"error":return Hx;default:return null}},Nx=Array(12).fill(0),Ux=({visible:n,className:l})=>q.createElement("div",{className:["sonner-loading-wrapper",l].filter(Boolean).join(" "),"data-visible":n},q.createElement("div",{className:"sonner-spinner"},Nx.map((i,u)=>q.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${u}`})))),Zx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},q.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),Vx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},q.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),Bx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},q.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),Hx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},q.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),jx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},q.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),q.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),Lx=()=>{const[n,l]=q.useState(document.hidden);return q.useEffect(()=>{const i=()=>{l(document.hidden)};return document.addEventListener("visibilitychange",i),()=>window.removeEventListener("visibilitychange",i)},[]),n};let tf=1;class Yx{constructor(){this.subscribe=l=>(this.subscribers.push(l),()=>{const i=this.subscribers.indexOf(l);this.subscribers.splice(i,1)}),this.publish=l=>{this.subscribers.forEach(i=>i(l))},this.addToast=l=>{this.publish(l),this.toasts=[...this.toasts,l]},this.create=l=>{var i;const{message:u,...c}=l,f=typeof l?.id=="number"||((i=l.id)==null?void 0:i.length)>0?l.id:tf++,d=this.toasts.find(p=>p.id===f),m=l.dismissible===void 0?!0:l.dismissible;return this.dismissedToasts.has(f)&&this.dismissedToasts.delete(f),d?this.toasts=this.toasts.map(p=>p.id===f?(this.publish({...p,...l,id:f,title:u}),{...p,...l,id:f,dismissible:m,title:u}):p):this.addToast({title:u,...c,dismissible:m,id:f}),f},this.dismiss=l=>(l?(this.dismissedToasts.add(l),requestAnimationFrame(()=>this.subscribers.forEach(i=>i({id:l,dismiss:!0})))):this.toasts.forEach(i=>{this.subscribers.forEach(u=>u({id:i.id,dismiss:!0}))}),l),this.message=(l,i)=>this.create({...i,message:l}),this.error=(l,i)=>this.create({...i,message:l,type:"error"}),this.success=(l,i)=>this.create({...i,type:"success",message:l}),this.info=(l,i)=>this.create({...i,type:"info",message:l}),this.warning=(l,i)=>this.create({...i,type:"warning",message:l}),this.loading=(l,i)=>this.create({...i,type:"loading",message:l}),this.promise=(l,i)=>{if(!i)return;let u;i.loading!==void 0&&(u=this.create({...i,promise:l,type:"loading",message:i.loading,description:typeof i.description!="function"?i.description:void 0}));const c=Promise.resolve(l instanceof Function?l():l);let f=u!==void 0,d;const m=c.then(async v=>{if(d=["resolve",v],q.isValidElement(v))f=!1,this.create({id:u,type:"default",message:v});else if(Gx(v)&&!v.ok){f=!1;const y=typeof i.error=="function"?await i.error(`HTTP error! status: ${v.status}`):i.error,x=typeof i.description=="function"?await i.description(`HTTP error! status: ${v.status}`):i.description,k=typeof y=="object"&&!q.isValidElement(y)?y:{message:y};this.create({id:u,type:"error",description:x,...k})}else if(v instanceof Error){f=!1;const y=typeof i.error=="function"?await i.error(v):i.error,x=typeof i.description=="function"?await i.description(v):i.description,k=typeof y=="object"&&!q.isValidElement(y)?y:{message:y};this.create({id:u,type:"error",description:x,...k})}else if(i.success!==void 0){f=!1;const y=typeof i.success=="function"?await i.success(v):i.success,x=typeof i.description=="function"?await i.description(v):i.description,k=typeof y=="object"&&!q.isValidElement(y)?y:{message:y};this.create({id:u,type:"success",description:x,...k})}}).catch(async v=>{if(d=["reject",v],i.error!==void 0){f=!1;const b=typeof i.error=="function"?await i.error(v):i.error,y=typeof i.description=="function"?await i.description(v):i.description,T=typeof b=="object"&&!q.isValidElement(b)?b:{message:b};this.create({id:u,type:"error",description:y,...T})}}).finally(()=>{f&&(this.dismiss(u),u=void 0),i.finally==null||i.finally.call(i)}),p=()=>new Promise((v,b)=>m.then(()=>d[0]==="reject"?b(d[1]):v(d[1])).catch(b));return typeof u!="string"&&typeof u!="number"?{unwrap:p}:Object.assign(u,{unwrap:p})},this.custom=(l,i)=>{const u=i?.id||tf++;return this.create({jsx:l(u),id:u,...i}),u},this.getActiveToasts=()=>this.toasts.filter(l=>!this.dismissedToasts.has(l.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}}const Xe=new Yx,qx=(n,l)=>{const i=l?.id||tf++;return Xe.addToast({title:n,...l,id:i}),i},Gx=n=>n&&typeof n=="object"&&"ok"in n&&typeof n.ok=="boolean"&&"status"in n&&typeof n.status=="number",Xx=qx,Qx=()=>Xe.toasts,$x=()=>Xe.getActiveToasts(),L2=Object.assign(Xx,{success:Xe.success,info:Xe.info,warning:Xe.warning,error:Xe.error,custom:Xe.custom,message:Xe.message,promise:Xe.promise,dismiss:Xe.dismiss,loading:Xe.loading},{getHistory:Qx,getToasts:$x});Cx("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function Gu(n){return n.label!==void 0}const Kx=3,Jx="24px",Fx="16px",mv=4e3,Wx=356,Px=14,Ix=45,tE=200;function Nn(...n){return n.filter(Boolean).join(" ")}function eE(n){const[l,i]=n.split("-"),u=[];return l&&u.push(l),i&&u.push(i),u}const nE=n=>{var l,i,u,c,f,d,m,p,v;const{invert:b,toast:y,unstyled:x,interacting:T,setHeights:k,visibleToasts:C,heights:B,index:X,toasts:H,expanded:K,removeToast:F,defaultRichColors:Z,closeButton:tt,style:ut,cancelButtonStyle:W,actionButtonStyle:vt,className:Rt="",descriptionClassName:Et="",duration:lt,position:ot,gap:yt,expandByDefault:bt,classNames:A,icons:L,closeButtonAriaLabel:U="Close toast"}=n,[gt,_]=q.useState(null),[Q,at]=q.useState(null),[j,P]=q.useState(!1),[ht,mt]=q.useState(!1),[Ot,St]=q.useState(!1),[Wt,Re]=q.useState(!1),[Ze,we]=q.useState(!1),[Ha,En]=q.useState(0),[sl,cl]=q.useState(0),xe=q.useRef(y.duration||lt||mv),dr=q.useRef(null),Ve=q.useRef(null),w=X===0,D=X+1<=C,V=y.type,nt=y.dismissible!==!1,et=y.className||"",I=y.descriptionClassName||"",st=q.useMemo(()=>B.findIndex(Tt=>Tt.toastId===y.id)||0,[B,y.id]),zt=q.useMemo(()=>{var Tt;return(Tt=y.closeButton)!=null?Tt:tt},[y.closeButton,tt]),kt=q.useMemo(()=>y.duration||lt||mv,[y.duration,lt]),jt=q.useRef(0),Qe=q.useRef(0),$e=q.useRef(0),An=q.useRef(null),[zn,Tn]=ot.split("-"),ln=q.useMemo(()=>B.reduce((Tt,le,fe)=>fe>=st?Tt:Tt+le.height,0),[B,st]),On=Lx(),Yn=y.invert||b,ca=V==="loading";Qe.current=q.useMemo(()=>st*yt+ln,[st,ln]),q.useEffect(()=>{xe.current=kt},[kt]),q.useEffect(()=>{P(!0)},[]),q.useEffect(()=>{const Tt=Ve.current;if(Tt){const le=Tt.getBoundingClientRect().height;return cl(le),k(fe=>[{toastId:y.id,height:le,position:y.position},...fe]),()=>k(fe=>fe.filter(De=>De.toastId!==y.id))}},[k,y.id]),q.useLayoutEffect(()=>{if(!j)return;const Tt=Ve.current,le=Tt.style.height;Tt.style.height="auto";const fe=Tt.getBoundingClientRect().height;Tt.style.height=le,cl(fe),k(De=>De.find(ve=>ve.toastId===y.id)?De.map(ve=>ve.toastId===y.id?{...ve,height:fe}:ve):[{toastId:y.id,height:fe,position:y.position},...De])},[j,y.title,y.description,k,y.id,y.jsx,y.action,y.cancel]);const vn=q.useCallback(()=>{mt(!0),En(Qe.current),k(Tt=>Tt.filter(le=>le.toastId!==y.id)),setTimeout(()=>{F(y)},tE)},[y,F,k,Qe]);q.useEffect(()=>{if(y.promise&&V==="loading"||y.duration===1/0||y.type==="loading")return;let Tt;return K||T||On?(()=>{if($e.current{xe.current!==1/0&&(jt.current=new Date().getTime(),Tt=setTimeout(()=>{y.onAutoClose==null||y.onAutoClose.call(y,y),vn()},xe.current))})(),()=>clearTimeout(Tt)},[K,T,y,V,On,vn]),q.useEffect(()=>{y.delete&&(vn(),y.onDismiss==null||y.onDismiss.call(y,y))},[vn,y.delete]);function wi(){var Tt;if(L?.loading){var le;return q.createElement("div",{className:Nn(A?.loader,y==null||(le=y.classNames)==null?void 0:le.loader,"sonner-loader"),"data-visible":V==="loading"},L.loading)}return q.createElement(Ux,{className:Nn(A?.loader,y==null||(Tt=y.classNames)==null?void 0:Tt.loader),visible:V==="loading"})}const hr=y.icon||L?.[V]||kx(V);var fa,xi;return q.createElement("li",{tabIndex:0,ref:Ve,className:Nn(Rt,et,A?.toast,y==null||(l=y.classNames)==null?void 0:l.toast,A?.default,A?.[V],y==null||(i=y.classNames)==null?void 0:i[V]),"data-sonner-toast":"","data-rich-colors":(fa=y.richColors)!=null?fa:Z,"data-styled":!(y.jsx||y.unstyled||x),"data-mounted":j,"data-promise":!!y.promise,"data-swiped":Ze,"data-removed":ht,"data-visible":D,"data-y-position":zn,"data-x-position":Tn,"data-index":X,"data-front":w,"data-swiping":Ot,"data-dismissible":nt,"data-type":V,"data-invert":Yn,"data-swipe-out":Wt,"data-swipe-direction":Q,"data-expanded":!!(K||bt&&j),"data-testid":y.testId,style:{"--index":X,"--toasts-before":X,"--z-index":H.length-X,"--offset":`${ht?Ha:Qe.current}px`,"--initial-height":bt?"auto":`${sl}px`,...ut,...y.style},onDragEnd:()=>{St(!1),_(null),An.current=null},onPointerDown:Tt=>{Tt.button!==2&&(ca||!nt||(dr.current=new Date,En(Qe.current),Tt.target.setPointerCapture(Tt.pointerId),Tt.target.tagName!=="BUTTON"&&(St(!0),An.current={x:Tt.clientX,y:Tt.clientY})))},onPointerUp:()=>{var Tt,le,fe;if(Wt||!nt)return;An.current=null;const De=Number(((Tt=Ve.current)==null?void 0:Tt.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),ja=Number(((le=Ve.current)==null?void 0:le.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),ve=new Date().getTime()-((fe=dr.current)==null?void 0:fe.getTime()),re=gt==="x"?De:ja,ie=Math.abs(re)/ve;if(Math.abs(re)>=Ix||ie>.11){En(Qe.current),y.onDismiss==null||y.onDismiss.call(y,y),at(gt==="x"?De>0?"right":"left":ja>0?"down":"up"),vn(),Re(!0);return}else{var Kt,Ee;(Kt=Ve.current)==null||Kt.style.setProperty("--swipe-amount-x","0px"),(Ee=Ve.current)==null||Ee.style.setProperty("--swipe-amount-y","0px")}we(!1),St(!1),_(null)},onPointerMove:Tt=>{var le,fe,De;if(!An.current||!nt||((le=window.getSelection())==null?void 0:le.toString().length)>0)return;const ve=Tt.clientY-An.current.y,re=Tt.clientX-An.current.x;var ie;const Kt=(ie=n.swipeDirections)!=null?ie:eE(ot);!gt&&(Math.abs(re)>1||Math.abs(ve)>1)&&_(Math.abs(re)>Math.abs(ve)?"x":"y");let Ee={x:0,y:0};const fl=qn=>1/(1.5+Math.abs(qn)/20);if(gt==="y"){if(Kt.includes("top")||Kt.includes("bottom"))if(Kt.includes("top")&&ve<0||Kt.includes("bottom")&&ve>0)Ee.y=ve;else{const qn=ve*fl(ve);Ee.y=Math.abs(qn)0)Ee.x=re;else{const qn=re*fl(re);Ee.x=Math.abs(qn)0||Math.abs(Ee.y)>0)&&we(!0),(fe=Ve.current)==null||fe.style.setProperty("--swipe-amount-x",`${Ee.x}px`),(De=Ve.current)==null||De.style.setProperty("--swipe-amount-y",`${Ee.y}px`)}},zt&&!y.jsx&&V!=="loading"?q.createElement("button",{"aria-label":U,"data-disabled":ca,"data-close-button":!0,onClick:ca||!nt?()=>{}:()=>{vn(),y.onDismiss==null||y.onDismiss.call(y,y)},className:Nn(A?.closeButton,y==null||(u=y.classNames)==null?void 0:u.closeButton)},(xi=L?.close)!=null?xi:jx):null,(V||y.icon||y.promise)&&y.icon!==null&&(L?.[V]!==null||y.icon)?q.createElement("div",{"data-icon":"",className:Nn(A?.icon,y==null||(c=y.classNames)==null?void 0:c.icon)},y.promise||y.type==="loading"&&!y.icon?y.icon||wi():null,y.type!=="loading"?hr:null):null,q.createElement("div",{"data-content":"",className:Nn(A?.content,y==null||(f=y.classNames)==null?void 0:f.content)},q.createElement("div",{"data-title":"",className:Nn(A?.title,y==null||(d=y.classNames)==null?void 0:d.title)},y.jsx?y.jsx:typeof y.title=="function"?y.title():y.title),y.description?q.createElement("div",{"data-description":"",className:Nn(Et,I,A?.description,y==null||(m=y.classNames)==null?void 0:m.description)},typeof y.description=="function"?y.description():y.description):null),q.isValidElement(y.cancel)?y.cancel:y.cancel&&Gu(y.cancel)?q.createElement("button",{"data-button":!0,"data-cancel":!0,style:y.cancelButtonStyle||W,onClick:Tt=>{Gu(y.cancel)&&nt&&(y.cancel.onClick==null||y.cancel.onClick.call(y.cancel,Tt),vn())},className:Nn(A?.cancelButton,y==null||(p=y.classNames)==null?void 0:p.cancelButton)},y.cancel.label):null,q.isValidElement(y.action)?y.action:y.action&&Gu(y.action)?q.createElement("button",{"data-button":!0,"data-action":!0,style:y.actionButtonStyle||vt,onClick:Tt=>{Gu(y.action)&&(y.action.onClick==null||y.action.onClick.call(y.action,Tt),!Tt.defaultPrevented&&vn())},className:Nn(A?.actionButton,y==null||(v=y.classNames)==null?void 0:v.actionButton)},y.action.label):null)};function gv(){if(typeof window>"u"||typeof document>"u")return"ltr";const n=document.documentElement.getAttribute("dir");return n==="auto"||!n?window.getComputedStyle(document.documentElement).direction:n}function aE(n,l){const i={};return[n,l].forEach((u,c)=>{const f=c===1,d=f?"--mobile-offset":"--offset",m=f?Fx:Jx;function p(v){["top","right","bottom","left"].forEach(b=>{i[`${d}-${b}`]=typeof v=="number"?`${v}px`:v})}typeof u=="number"||typeof u=="string"?p(u):typeof u=="object"?["top","right","bottom","left"].forEach(v=>{u[v]===void 0?i[`${d}-${v}`]=m:i[`${d}-${v}`]=typeof u[v]=="number"?`${u[v]}px`:u[v]}):p(m)}),i}const Y2=q.forwardRef(function(l,i){const{id:u,invert:c,position:f="bottom-right",hotkey:d=["altKey","KeyT"],expand:m,closeButton:p,className:v,offset:b,mobileOffset:y,theme:x="light",richColors:T,duration:k,style:C,visibleToasts:B=Kx,toastOptions:X,dir:H=gv(),gap:K=Px,icons:F,containerAriaLabel:Z="Notifications"}=l,[tt,ut]=q.useState([]),W=q.useMemo(()=>u?tt.filter(j=>j.toasterId===u):tt.filter(j=>!j.toasterId),[tt,u]),vt=q.useMemo(()=>Array.from(new Set([f].concat(W.filter(j=>j.position).map(j=>j.position)))),[W,f]),[Rt,Et]=q.useState([]),[lt,ot]=q.useState(!1),[yt,bt]=q.useState(!1),[A,L]=q.useState(x!=="system"?x:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),U=q.useRef(null),gt=d.join("+").replace(/Key/g,"").replace(/Digit/g,""),_=q.useRef(null),Q=q.useRef(!1),at=q.useCallback(j=>{ut(P=>{var ht;return(ht=P.find(mt=>mt.id===j.id))!=null&&ht.delete||Xe.dismiss(j.id),P.filter(({id:mt})=>mt!==j.id)})},[]);return q.useEffect(()=>Xe.subscribe(j=>{if(j.dismiss){requestAnimationFrame(()=>{ut(P=>P.map(ht=>ht.id===j.id?{...ht,delete:!0}:ht))});return}setTimeout(()=>{K0.flushSync(()=>{ut(P=>{const ht=P.findIndex(mt=>mt.id===j.id);return ht!==-1?[...P.slice(0,ht),{...P[ht],...j},...P.slice(ht+1)]:[j,...P]})})})}),[tt]),q.useEffect(()=>{if(x!=="system"){L(x);return}if(x==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?L("dark"):L("light")),typeof window>"u")return;const j=window.matchMedia("(prefers-color-scheme: dark)");try{j.addEventListener("change",({matches:P})=>{L(P?"dark":"light")})}catch{j.addListener(({matches:ht})=>{try{L(ht?"dark":"light")}catch(mt){console.error(mt)}})}},[x]),q.useEffect(()=>{tt.length<=1&&ot(!1)},[tt]),q.useEffect(()=>{const j=P=>{var ht;if(d.every(St=>P[St]||P.code===St)){var Ot;ot(!0),(Ot=U.current)==null||Ot.focus()}P.code==="Escape"&&(document.activeElement===U.current||(ht=U.current)!=null&&ht.contains(document.activeElement))&&ot(!1)};return document.addEventListener("keydown",j),()=>document.removeEventListener("keydown",j)},[d]),q.useEffect(()=>{if(U.current)return()=>{_.current&&(_.current.focus({preventScroll:!0}),_.current=null,Q.current=!1)}},[U.current]),q.createElement("section",{ref:i,"aria-label":`${Z} ${gt}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},vt.map((j,P)=>{var ht;const[mt,Ot]=j.split("-");return W.length?q.createElement("ol",{key:j,dir:H==="auto"?gv():H,tabIndex:-1,ref:U,className:v,"data-sonner-toaster":!0,"data-sonner-theme":A,"data-y-position":mt,"data-x-position":Ot,style:{"--front-toast-height":`${((ht=Rt[0])==null?void 0:ht.height)||0}px`,"--width":`${Wx}px`,"--gap":`${K}px`,...C,...aE(b,y)},onBlur:St=>{Q.current&&!St.currentTarget.contains(St.relatedTarget)&&(Q.current=!1,_.current&&(_.current.focus({preventScroll:!0}),_.current=null))},onFocus:St=>{St.target instanceof HTMLElement&&St.target.dataset.dismissible==="false"||Q.current||(Q.current=!0,_.current=St.relatedTarget)},onMouseEnter:()=>ot(!0),onMouseMove:()=>ot(!0),onMouseLeave:()=>{yt||ot(!1)},onDragEnd:()=>ot(!1),onPointerDown:St=>{St.target instanceof HTMLElement&&St.target.dataset.dismissible==="false"||bt(!0)},onPointerUp:()=>bt(!1)},W.filter(St=>!St.position&&P===0||St.position===j).map((St,Wt)=>{var Re,Ze;return q.createElement(nE,{key:St.id,icons:F,index:Wt,toast:St,defaultRichColors:T,duration:(Re=X?.duration)!=null?Re:k,className:X?.className,descriptionClassName:X?.descriptionClassName,invert:c,visibleToasts:B,closeButton:(Ze=X?.closeButton)!=null?Ze:p,interacting:yt,position:j,style:X?.style,unstyled:X?.unstyled,classNames:X?.classNames,cancelButtonStyle:X?.cancelButtonStyle,actionButtonStyle:X?.actionButtonStyle,closeButtonAriaLabel:X?.closeButtonAriaLabel,removeToast:at,toasts:W.filter(we=>we.position==St.position),heights:Rt.filter(we=>we.position==St.position),setHeights:Et,expandByDefault:m,gap:K,expanded:lt,swipeDirections:l.swipeDirections})})):null}))}),lE=J("ZodISODateTime",(n,l)=>{ow.init(n,l),ee.init(n,l)});function rE(n){return cx(lE,n)}const iE=J("ZodISODate",(n,l)=>{sw.init(n,l),ee.init(n,l)});function uE(n){return fx(iE,n)}const oE=J("ZodISOTime",(n,l)=>{cw.init(n,l),ee.init(n,l)});function sE(n){return dx(oE,n)}const cE=J("ZodISODuration",(n,l)=>{fw.init(n,l),ee.init(n,l)});function fE(n){return hx(cE,n)}const dE=(n,l)=>{Af.init(n,l),n.name="ZodError",Object.defineProperties(n,{format:{value:i=>n_(n,i)},flatten:{value:i=>e_(n,i)},addIssue:{value:i=>{n.issues.push(i),n.message=JSON.stringify(n.issues,Pc,2)}},addIssues:{value:i=>{n.issues.push(...i),n.message=JSON.stringify(n.issues,Pc,2)}},isEmpty:{get(){return n.issues.length===0}}})},gn=J("ZodError",dE,{Parent:Error}),hE=go(gn),mE=vo(gn),gE=yo(gn),vE=po(gn),yE=u_(gn),pE=o_(gn),bE=s_(gn),SE=c_(gn),_E=f_(gn),wE=d_(gn),xE=h_(gn),EE=m_(gn),_e=J("ZodType",(n,l)=>(ge.init(n,l),n.def=l,n.type=l.type,Object.defineProperty(n,"_def",{value:l}),n.check=(...i)=>n.clone({...l,checks:[...l.checks??[],...i.map(u=>typeof u=="function"?{_zod:{check:u,def:{check:"custom"},onattach:[]}}:u)]}),n.clone=(i,u)=>Ba(n,i,u),n.brand=()=>n,n.register=((i,u)=>(i.add(n,u),n)),n.parse=(i,u)=>hE(n,i,u,{callee:n.parse}),n.safeParse=(i,u)=>gE(n,i,u),n.parseAsync=async(i,u)=>mE(n,i,u,{callee:n.parseAsync}),n.safeParseAsync=async(i,u)=>vE(n,i,u),n.spa=n.safeParseAsync,n.encode=(i,u)=>yE(n,i,u),n.decode=(i,u)=>pE(n,i,u),n.encodeAsync=async(i,u)=>bE(n,i,u),n.decodeAsync=async(i,u)=>SE(n,i,u),n.safeEncode=(i,u)=>_E(n,i,u),n.safeDecode=(i,u)=>wE(n,i,u),n.safeEncodeAsync=async(i,u)=>xE(n,i,u),n.safeDecodeAsync=async(i,u)=>EE(n,i,u),n.refine=(i,u)=>n.check(m2(i,u)),n.superRefine=i=>n.check(g2(i)),n.overwrite=i=>n.check(_i(i)),n.optional=()=>pv(n),n.nullable=()=>bv(n),n.nullish=()=>pv(bv(n)),n.nonoptional=i=>u2(n,i),n.array=()=>QE(n),n.or=i=>JE([n,i]),n.and=i=>WE(n,i),n.transform=i=>Sv(n,e2(i)),n.default=i=>l2(n,i),n.prefault=i=>i2(n,i),n.catch=i=>s2(n,i),n.pipe=i=>Sv(n,i),n.readonly=()=>d2(n),n.describe=i=>{const u=n.clone();return qu.add(u,{description:i}),u},Object.defineProperty(n,"description",{get(){return qu.get(n)?.description},configurable:!0}),n.meta=(...i)=>{if(i.length===0)return qu.get(n);const u=n.clone();return qu.add(u,i[0]),u},n.isOptional=()=>n.safeParse(void 0).success,n.isNullable=()=>n.safeParse(null).success,n)),My=J("_ZodString",(n,l)=>{zf.init(n,l),_e.init(n,l);const i=n._zod.bag;n.format=i.format??null,n.minLength=i.minimum??null,n.maxLength=i.maximum??null,n.regex=(...u)=>n.check(vx(...u)),n.includes=(...u)=>n.check(bx(...u)),n.startsWith=(...u)=>n.check(Sx(...u)),n.endsWith=(...u)=>n.check(_x(...u)),n.min=(...u)=>n.check(io(...u)),n.max=(...u)=>n.check(Ry(...u)),n.length=(...u)=>n.check(Dy(...u)),n.nonempty=(...u)=>n.check(io(1,...u)),n.lowercase=u=>n.check(yx(u)),n.uppercase=u=>n.check(px(u)),n.trim=()=>n.check(xx()),n.normalize=(...u)=>n.check(wx(...u)),n.toLowerCase=()=>n.check(Ex()),n.toUpperCase=()=>n.check(Ax())}),AE=J("ZodString",(n,l)=>{zf.init(n,l),My.init(n,l),n.email=i=>n.check(Oy(Cy,i)),n.url=i=>n.check(Kw(zE,i)),n.jwt=i=>n.check(sx(LE,i)),n.emoji=i=>n.check(Jw(TE,i)),n.guid=i=>n.check(dv(vv,i)),n.uuid=i=>n.check(Gw(Xu,i)),n.uuidv4=i=>n.check(Xw(Xu,i)),n.uuidv6=i=>n.check(Qw(Xu,i)),n.uuidv7=i=>n.check($w(Xu,i)),n.nanoid=i=>n.check(Fw(OE,i)),n.guid=i=>n.check(dv(vv,i)),n.cuid=i=>n.check(Ww(RE,i)),n.cuid2=i=>n.check(Pw(DE,i)),n.ulid=i=>n.check(Iw(ME,i)),n.base64=i=>n.check(ix(BE,i)),n.base64url=i=>n.check(ux(HE,i)),n.xid=i=>n.check(tx(CE,i)),n.ksuid=i=>n.check(ex(kE,i)),n.ipv4=i=>n.check(nx(NE,i)),n.ipv6=i=>n.check(ax(UE,i)),n.cidrv4=i=>n.check(lx(ZE,i)),n.cidrv6=i=>n.check(rx(VE,i)),n.e164=i=>n.check(ox(jE,i)),n.datetime=i=>n.check(rE(i)),n.date=i=>n.check(uE(i)),n.time=i=>n.check(sE(i)),n.duration=i=>n.check(fE(i))});function q2(n){return qw(AE,n)}const ee=J("ZodStringFormat",(n,l)=>{It.init(n,l),My.init(n,l)}),Cy=J("ZodEmail",(n,l)=>{I_.init(n,l),ee.init(n,l)});function G2(n){return Oy(Cy,n)}const vv=J("ZodGUID",(n,l)=>{W_.init(n,l),ee.init(n,l)}),Xu=J("ZodUUID",(n,l)=>{P_.init(n,l),ee.init(n,l)}),zE=J("ZodURL",(n,l)=>{tw.init(n,l),ee.init(n,l)}),TE=J("ZodEmoji",(n,l)=>{ew.init(n,l),ee.init(n,l)}),OE=J("ZodNanoID",(n,l)=>{nw.init(n,l),ee.init(n,l)}),RE=J("ZodCUID",(n,l)=>{aw.init(n,l),ee.init(n,l)}),DE=J("ZodCUID2",(n,l)=>{lw.init(n,l),ee.init(n,l)}),ME=J("ZodULID",(n,l)=>{rw.init(n,l),ee.init(n,l)}),CE=J("ZodXID",(n,l)=>{iw.init(n,l),ee.init(n,l)}),kE=J("ZodKSUID",(n,l)=>{uw.init(n,l),ee.init(n,l)}),NE=J("ZodIPv4",(n,l)=>{dw.init(n,l),ee.init(n,l)}),UE=J("ZodIPv6",(n,l)=>{hw.init(n,l),ee.init(n,l)}),ZE=J("ZodCIDRv4",(n,l)=>{mw.init(n,l),ee.init(n,l)}),VE=J("ZodCIDRv6",(n,l)=>{gw.init(n,l),ee.init(n,l)}),BE=J("ZodBase64",(n,l)=>{vw.init(n,l),ee.init(n,l)}),HE=J("ZodBase64URL",(n,l)=>{pw.init(n,l),ee.init(n,l)}),jE=J("ZodE164",(n,l)=>{bw.init(n,l),ee.init(n,l)}),LE=J("ZodJWT",(n,l)=>{_w.init(n,l),ee.init(n,l)}),YE=J("ZodUnknown",(n,l)=>{ww.init(n,l),_e.init(n,l)});function yv(){return mx(YE)}const qE=J("ZodNever",(n,l)=>{xw.init(n,l),_e.init(n,l)});function GE(n){return gx(qE,n)}const XE=J("ZodArray",(n,l)=>{Ew.init(n,l),_e.init(n,l),n.element=l.element,n.min=(i,u)=>n.check(io(i,u)),n.nonempty=i=>n.check(io(1,i)),n.max=(i,u)=>n.check(Ry(i,u)),n.length=(i,u)=>n.check(Dy(i,u)),n.unwrap=()=>n.element});function QE(n,l){return zx(XE,n,l)}const $E=J("ZodObject",(n,l)=>{zw.init(n,l),_e.init(n,l),Ft(n,"shape",()=>l.shape),n.keyof=()=>PE(Object.keys(n._zod.def.shape)),n.catchall=i=>n.clone({...n._zod.def,catchall:i}),n.passthrough=()=>n.clone({...n._zod.def,catchall:yv()}),n.loose=()=>n.clone({...n._zod.def,catchall:yv()}),n.strict=()=>n.clone({...n._zod.def,catchall:GE()}),n.strip=()=>n.clone({...n._zod.def,catchall:void 0}),n.extend=i=>FS(n,i),n.safeExtend=i=>WS(n,i),n.merge=i=>PS(n,i),n.pick=i=>KS(n,i),n.omit=i=>JS(n,i),n.partial=(...i)=>IS(ky,n,i[0]),n.required=(...i)=>t_(Ny,n,i[0])});function X2(n,l){const i={type:"object",get shape(){return Va(this,"shape",n?GS(n):{}),this.shape},...At(l)};return new $E(i)}const KE=J("ZodUnion",(n,l)=>{Tw.init(n,l),_e.init(n,l),n.options=l.options});function JE(n,l){return new KE({type:"union",options:n,...At(l)})}const FE=J("ZodIntersection",(n,l)=>{Ow.init(n,l),_e.init(n,l)});function WE(n,l){return new FE({type:"intersection",left:n,right:l})}const ef=J("ZodEnum",(n,l)=>{Rw.init(n,l),_e.init(n,l),n.enum=l.entries,n.options=Object.values(l.entries);const i=new Set(Object.keys(l.entries));n.extract=(u,c)=>{const f={};for(const d of u)if(i.has(d))f[d]=l.entries[d];else throw new Error(`Key ${d} not found in enum`);return new ef({...l,checks:[],...At(c),entries:f})},n.exclude=(u,c)=>{const f={...l.entries};for(const d of u)if(i.has(d))delete f[d];else throw new Error(`Key ${d} not found in enum`);return new ef({...l,checks:[],...At(c),entries:f})}});function PE(n,l){const i=Array.isArray(n)?Object.fromEntries(n.map(u=>[u,u])):n;return new ef({type:"enum",entries:i,...At(l)})}const IE=J("ZodLiteral",(n,l)=>{Dw.init(n,l),_e.init(n,l),n.values=new Set(l.values),Object.defineProperty(n,"value",{get(){if(l.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return l.values[0]}})});function Q2(n,l){return new IE({type:"literal",values:Array.isArray(n)?n:[n],...At(l)})}const t2=J("ZodTransform",(n,l)=>{Mw.init(n,l),_e.init(n,l),n._zod.parse=(i,u)=>{if(u.direction==="backward")throw new vy(n.constructor.name);i.addIssue=f=>{if(typeof f=="string")i.issues.push(pi(f,i.value,l));else{const d=f;d.fatal&&(d.continue=!1),d.code??(d.code="custom"),d.input??(d.input=i.value),d.inst??(d.inst=n),i.issues.push(pi(d))}};const c=l.transform(i.value,i);return c instanceof Promise?c.then(f=>(i.value=f,i)):(i.value=c,i)}});function e2(n){return new t2({type:"transform",transform:n})}const ky=J("ZodOptional",(n,l)=>{Cw.init(n,l),_e.init(n,l),n.unwrap=()=>n._zod.def.innerType});function pv(n){return new ky({type:"optional",innerType:n})}const n2=J("ZodNullable",(n,l)=>{kw.init(n,l),_e.init(n,l),n.unwrap=()=>n._zod.def.innerType});function bv(n){return new n2({type:"nullable",innerType:n})}const a2=J("ZodDefault",(n,l)=>{Nw.init(n,l),_e.init(n,l),n.unwrap=()=>n._zod.def.innerType,n.removeDefault=n.unwrap});function l2(n,l){return new a2({type:"default",innerType:n,get defaultValue(){return typeof l=="function"?l():by(l)}})}const r2=J("ZodPrefault",(n,l)=>{Uw.init(n,l),_e.init(n,l),n.unwrap=()=>n._zod.def.innerType});function i2(n,l){return new r2({type:"prefault",innerType:n,get defaultValue(){return typeof l=="function"?l():by(l)}})}const Ny=J("ZodNonOptional",(n,l)=>{Zw.init(n,l),_e.init(n,l),n.unwrap=()=>n._zod.def.innerType});function u2(n,l){return new Ny({type:"nonoptional",innerType:n,...At(l)})}const o2=J("ZodCatch",(n,l)=>{Vw.init(n,l),_e.init(n,l),n.unwrap=()=>n._zod.def.innerType,n.removeCatch=n.unwrap});function s2(n,l){return new o2({type:"catch",innerType:n,catchValue:typeof l=="function"?l:()=>l})}const c2=J("ZodPipe",(n,l)=>{Bw.init(n,l),_e.init(n,l),n.in=l.in,n.out=l.out});function Sv(n,l){return new c2({type:"pipe",in:n,out:l})}const f2=J("ZodReadonly",(n,l)=>{Hw.init(n,l),_e.init(n,l),n.unwrap=()=>n._zod.def.innerType});function d2(n){return new f2({type:"readonly",innerType:n})}const h2=J("ZodCustom",(n,l)=>{jw.init(n,l),_e.init(n,l)});function m2(n,l={}){return Tx(h2,n,l)}function g2(n){return Ox(n)}var jc={exports:{}},di={},Lc={exports:{}},Yc={};/** + `)}T.write("payload.value = newResult;"),T.write("return payload;");const H=T.compile();return(K,F)=>H(x,K,F)};let f;const d=lo,m=!yy.jitless,v=m&&QS.value,b=l.catchall;let y;n._zod.parse=(x,T)=>{y??(y=u.value);const k=x.value;return d(k)?m&&v&&T?.async===!1&&T.jitless!==!0?(f||(f=c(l.shape)),x=f(x,T),b?Ty([],k,x,T,y,n):x):i(x,T):(x.issues.push({expected:"object",code:"invalid_type",input:k,inst:n}),x)}});function rv(n,l,i,u){for(const f of n)if(f.issues.length===0)return l.value=f.value,l;const c=n.filter(f=>!er(f));return c.length===1?(l.value=c[0].value,c[0]):(l.issues.push({code:"invalid_union",input:l.value,inst:i,errors:n.map(f=>f.issues.map(d=>ol(d,u,ul())))}),l)}const Ow=J("$ZodUnion",(n,l)=>{ge.init(n,l),Ft(n._zod,"optin",()=>l.options.some(c=>c._zod.optin==="optional")?"optional":void 0),Ft(n._zod,"optout",()=>l.options.some(c=>c._zod.optout==="optional")?"optional":void 0),Ft(n._zod,"values",()=>{if(l.options.every(c=>c._zod.values))return new Set(l.options.flatMap(c=>Array.from(c._zod.values)))}),Ft(n._zod,"pattern",()=>{if(l.options.every(c=>c._zod.pattern)){const c=l.options.map(f=>f._zod.pattern);return new RegExp(`^(${c.map(f=>xf(f.source)).join("|")})$`)}});const i=l.options.length===1,u=l.options[0]._zod.run;n._zod.parse=(c,f)=>{if(i)return u(c,f);let d=!1;const m=[];for(const p of l.options){const v=p._zod.run({value:c.value,issues:[]},f);if(v instanceof Promise)m.push(v),d=!0;else{if(v.issues.length===0)return v;m.push(v)}}return d?Promise.all(m).then(p=>rv(p,c,n,f)):rv(m,c,n,f)}}),Rw=J("$ZodIntersection",(n,l)=>{ge.init(n,l),n._zod.parse=(i,u)=>{const c=i.value,f=l.left._zod.run({value:c,issues:[]},u),d=l.right._zod.run({value:c,issues:[]},u);return f instanceof Promise||d instanceof Promise?Promise.all([f,d]).then(([p,v])=>iv(i,p,v)):iv(i,f,d)}});function Ic(n,l){if(n===l)return{valid:!0,data:n};if(n instanceof Date&&l instanceof Date&&+n==+l)return{valid:!0,data:n};if(pi(n)&&pi(l)){const i=Object.keys(l),u=Object.keys(n).filter(f=>i.indexOf(f)!==-1),c={...n,...l};for(const f of u){const d=Ic(n[f],l[f]);if(!d.valid)return{valid:!1,mergeErrorPath:[f,...d.mergeErrorPath]};c[f]=d.data}return{valid:!0,data:c}}if(Array.isArray(n)&&Array.isArray(l)){if(n.length!==l.length)return{valid:!1,mergeErrorPath:[]};const i=[];for(let u=0;u{ge.init(n,l);const i=GS(l.entries),u=new Set(i);n._zod.values=u,n._zod.pattern=new RegExp(`^(${i.filter(c=>$S.has(typeof c)).map(c=>typeof c=="string"?ir(c):c.toString()).join("|")})$`),n._zod.parse=(c,f)=>{const d=c.value;return u.has(d)||c.issues.push({code:"invalid_value",values:i,input:d,inst:n}),c}}),Mw=J("$ZodLiteral",(n,l)=>{if(ge.init(n,l),l.values.length===0)throw new Error("Cannot create literal schema with no valid values");n._zod.values=new Set(l.values),n._zod.pattern=new RegExp(`^(${l.values.map(i=>typeof i=="string"?ir(i):i?ir(i.toString()):String(i)).join("|")})$`),n._zod.parse=(i,u)=>{const c=i.value;return n._zod.values.has(c)||i.issues.push({code:"invalid_value",values:l.values,input:c,inst:n}),i}}),Cw=J("$ZodTransform",(n,l)=>{ge.init(n,l),n._zod.parse=(i,u)=>{if(u.direction==="backward")throw new vy(n.constructor.name);const c=l.transform(i.value,i);if(u.async)return(c instanceof Promise?c:Promise.resolve(c)).then(d=>(i.value=d,i));if(c instanceof Promise)throw new lr;return i.value=c,i}});function uv(n,l){return n.issues.length&&l===void 0?{issues:[],value:void 0}:n}const kw=J("$ZodOptional",(n,l)=>{ge.init(n,l),n._zod.optin="optional",n._zod.optout="optional",Ft(n._zod,"values",()=>l.innerType._zod.values?new Set([...l.innerType._zod.values,void 0]):void 0),Ft(n._zod,"pattern",()=>{const i=l.innerType._zod.pattern;return i?new RegExp(`^(${xf(i.source)})?$`):void 0}),n._zod.parse=(i,u)=>{if(l.innerType._zod.optin==="optional"){const c=l.innerType._zod.run(i,u);return c instanceof Promise?c.then(f=>uv(f,i.value)):uv(c,i.value)}return i.value===void 0?i:l.innerType._zod.run(i,u)}}),Nw=J("$ZodNullable",(n,l)=>{ge.init(n,l),Ft(n._zod,"optin",()=>l.innerType._zod.optin),Ft(n._zod,"optout",()=>l.innerType._zod.optout),Ft(n._zod,"pattern",()=>{const i=l.innerType._zod.pattern;return i?new RegExp(`^(${xf(i.source)}|null)$`):void 0}),Ft(n._zod,"values",()=>l.innerType._zod.values?new Set([...l.innerType._zod.values,null]):void 0),n._zod.parse=(i,u)=>i.value===null?i:l.innerType._zod.run(i,u)}),Uw=J("$ZodDefault",(n,l)=>{ge.init(n,l),n._zod.optin="optional",Ft(n._zod,"values",()=>l.innerType._zod.values),n._zod.parse=(i,u)=>{if(u.direction==="backward")return l.innerType._zod.run(i,u);if(i.value===void 0)return i.value=l.defaultValue,i;const c=l.innerType._zod.run(i,u);return c instanceof Promise?c.then(f=>ov(f,l)):ov(c,l)}});function ov(n,l){return n.value===void 0&&(n.value=l.defaultValue),n}const Zw=J("$ZodPrefault",(n,l)=>{ge.init(n,l),n._zod.optin="optional",Ft(n._zod,"values",()=>l.innerType._zod.values),n._zod.parse=(i,u)=>(u.direction==="backward"||i.value===void 0&&(i.value=l.defaultValue),l.innerType._zod.run(i,u))}),Vw=J("$ZodNonOptional",(n,l)=>{ge.init(n,l),Ft(n._zod,"values",()=>{const i=l.innerType._zod.values;return i?new Set([...i].filter(u=>u!==void 0)):void 0}),n._zod.parse=(i,u)=>{const c=l.innerType._zod.run(i,u);return c instanceof Promise?c.then(f=>sv(f,n)):sv(c,n)}});function sv(n,l){return!n.issues.length&&n.value===void 0&&n.issues.push({code:"invalid_type",expected:"nonoptional",input:n.value,inst:l}),n}const Bw=J("$ZodCatch",(n,l)=>{ge.init(n,l),Ft(n._zod,"optin",()=>l.innerType._zod.optin),Ft(n._zod,"optout",()=>l.innerType._zod.optout),Ft(n._zod,"values",()=>l.innerType._zod.values),n._zod.parse=(i,u)=>{if(u.direction==="backward")return l.innerType._zod.run(i,u);const c=l.innerType._zod.run(i,u);return c instanceof Promise?c.then(f=>(i.value=f.value,f.issues.length&&(i.value=l.catchValue({...i,error:{issues:f.issues.map(d=>ol(d,u,ul()))},input:i.value}),i.issues=[]),i)):(i.value=c.value,c.issues.length&&(i.value=l.catchValue({...i,error:{issues:c.issues.map(f=>ol(f,u,ul()))},input:i.value}),i.issues=[]),i)}}),Hw=J("$ZodPipe",(n,l)=>{ge.init(n,l),Ft(n._zod,"values",()=>l.in._zod.values),Ft(n._zod,"optin",()=>l.in._zod.optin),Ft(n._zod,"optout",()=>l.out._zod.optout),Ft(n._zod,"propValues",()=>l.in._zod.propValues),n._zod.parse=(i,u)=>{if(u.direction==="backward"){const f=l.out._zod.run(i,u);return f instanceof Promise?f.then(d=>qu(d,l.in,u)):qu(f,l.in,u)}const c=l.in._zod.run(i,u);return c instanceof Promise?c.then(f=>qu(f,l.out,u)):qu(c,l.out,u)}});function qu(n,l,i){return n.issues.length?(n.aborted=!0,n):l._zod.run({value:n.value,issues:n.issues},i)}const jw=J("$ZodReadonly",(n,l)=>{ge.init(n,l),Ft(n._zod,"propValues",()=>l.innerType._zod.propValues),Ft(n._zod,"values",()=>l.innerType._zod.values),Ft(n._zod,"optin",()=>l.innerType._zod.optin),Ft(n._zod,"optout",()=>l.innerType._zod.optout),n._zod.parse=(i,u)=>{if(u.direction==="backward")return l.innerType._zod.run(i,u);const c=l.innerType._zod.run(i,u);return c instanceof Promise?c.then(cv):cv(c)}});function cv(n){return n.value=Object.freeze(n.value),n}const Lw=J("$ZodCustom",(n,l)=>{Ln.init(n,l),ge.init(n,l),n._zod.parse=(i,u)=>i,n._zod.check=i=>{const u=i.value,c=l.fn(u);if(c instanceof Promise)return c.then(f=>fv(f,i,u,n));fv(c,i,u,n)}});function fv(n,l,i,u){if(!n){const c={code:"custom",input:i,inst:u,path:[...u._zod.def.path??[]],continue:!u._zod.def.abort};u._zod.def.params&&(c.params=u._zod.def.params),l.issues.push(bi(c))}}class Yw{constructor(){this._map=new Map,this._idmap=new Map}add(l,...i){const u=i[0];if(this._map.set(l,u),u&&typeof u=="object"&&"id"in u){if(this._idmap.has(u.id))throw new Error(`ID ${u.id} already exists in the registry`);this._idmap.set(u.id,l)}return this}clear(){return this._map=new Map,this._idmap=new Map,this}remove(l){const i=this._map.get(l);return i&&typeof i=="object"&&"id"in i&&this._idmap.delete(i.id),this._map.delete(l),this}get(l){const i=l._zod.parent;if(i){const u={...this.get(i)??{}};delete u.id;const c={...u,...this._map.get(l)};return Object.keys(c).length?c:void 0}return this._map.get(l)}has(l){return this._map.has(l)}}function qw(){return new Yw}const Gu=qw();function Gw(n,l){return new n({type:"string",...At(l)})}function Oy(n,l){return new n({type:"string",format:"email",check:"string_format",abort:!1,...At(l)})}function dv(n,l){return new n({type:"string",format:"guid",check:"string_format",abort:!1,...At(l)})}function Ry(n,l){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,...At(l)})}function Xw(n,l){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...At(l)})}function Qw(n,l){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...At(l)})}function $w(n,l){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...At(l)})}function Kw(n,l){return new n({type:"string",format:"url",check:"string_format",abort:!1,...At(l)})}function Jw(n,l){return new n({type:"string",format:"emoji",check:"string_format",abort:!1,...At(l)})}function Fw(n,l){return new n({type:"string",format:"nanoid",check:"string_format",abort:!1,...At(l)})}function Ww(n,l){return new n({type:"string",format:"cuid",check:"string_format",abort:!1,...At(l)})}function Pw(n,l){return new n({type:"string",format:"cuid2",check:"string_format",abort:!1,...At(l)})}function Iw(n,l){return new n({type:"string",format:"ulid",check:"string_format",abort:!1,...At(l)})}function tx(n,l){return new n({type:"string",format:"xid",check:"string_format",abort:!1,...At(l)})}function ex(n,l){return new n({type:"string",format:"ksuid",check:"string_format",abort:!1,...At(l)})}function nx(n,l){return new n({type:"string",format:"ipv4",check:"string_format",abort:!1,...At(l)})}function ax(n,l){return new n({type:"string",format:"ipv6",check:"string_format",abort:!1,...At(l)})}function lx(n,l){return new n({type:"string",format:"cidrv4",check:"string_format",abort:!1,...At(l)})}function rx(n,l){return new n({type:"string",format:"cidrv6",check:"string_format",abort:!1,...At(l)})}function ix(n,l){return new n({type:"string",format:"base64",check:"string_format",abort:!1,...At(l)})}function ux(n,l){return new n({type:"string",format:"base64url",check:"string_format",abort:!1,...At(l)})}function ox(n,l){return new n({type:"string",format:"e164",check:"string_format",abort:!1,...At(l)})}function sx(n,l){return new n({type:"string",format:"jwt",check:"string_format",abort:!1,...At(l)})}function cx(n,l){return new n({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...At(l)})}function fx(n,l){return new n({type:"string",format:"date",check:"string_format",...At(l)})}function dx(n,l){return new n({type:"string",format:"time",check:"string_format",precision:null,...At(l)})}function hx(n,l){return new n({type:"string",format:"duration",check:"string_format",...At(l)})}function mx(n){return new n({type:"unknown"})}function gx(n,l){return new n({type:"never",...At(l)})}function Dy(n,l){return new j_({check:"max_length",...At(l),maximum:n})}function io(n,l){return new L_({check:"min_length",...At(l),minimum:n})}function My(n,l){return new Y_({check:"length_equals",...At(l),length:n})}function vx(n,l){return new q_({check:"string_format",format:"regex",...At(l),pattern:n})}function yx(n){return new G_({check:"string_format",format:"lowercase",...At(n)})}function px(n){return new X_({check:"string_format",format:"uppercase",...At(n)})}function bx(n,l){return new Q_({check:"string_format",format:"includes",...At(l),includes:n})}function Sx(n,l){return new $_({check:"string_format",format:"starts_with",...At(l),prefix:n})}function _x(n,l){return new K_({check:"string_format",format:"ends_with",...At(l),suffix:n})}function wi(n){return new J_({check:"overwrite",tx:n})}function wx(n){return wi(l=>l.normalize(n))}function xx(){return wi(n=>n.trim())}function Ex(){return wi(n=>n.toLowerCase())}function Ax(){return wi(n=>n.toUpperCase())}function zx(n,l,i){return new n({type:"array",element:l,...At(i)})}function Tx(n,l,i){return new n({type:"custom",check:"custom",fn:l,...At(i)})}function Ox(n){const l=Rx(i=>(i.addIssue=u=>{if(typeof u=="string")i.issues.push(bi(u,i.value,l._zod.def));else{const c=u;c.fatal&&(c.continue=!1),c.code??(c.code="custom"),c.input??(c.input=i.value),c.inst??(c.inst=l),c.continue??(c.continue=!l._zod.def.abort),i.issues.push(bi(c))}},n(i.value,i)));return l}function Rx(n,l){const i=new Ln({check:"custom",...At(l)});return i._zod.check=n,i}function hv(n,l){try{var i=n()}catch(u){return l(u)}return i&&i.then?i.then(void 0,l):i}function Dx(n,l){for(var i={};n.length;){var u=n[0],c=u.code,f=u.message,d=u.path.join(".");if(!i[d])if("unionErrors"in u){var m=u.unionErrors[0].errors[0];i[d]={message:m.message,type:m.code}}else i[d]={message:f,type:c};if("unionErrors"in u&&u.unionErrors.forEach(function(b){return b.errors.forEach(function(y){return n.push(y)})}),l){var p=i[d].types,v=p&&p[u.code];i[d]=pf(d,l,i,c,v?[].concat(v,u.message):u.message)}n.shift()}return i}function Mx(n,l){for(var i={};n.length;){var u=n[0],c=u.code,f=u.message,d=u.path.join(".");if(!i[d])if(u.code==="invalid_union"&&u.errors.length>0){var m=u.errors[0][0];i[d]={message:m.message,type:m.code}}else i[d]={message:f,type:c};if(u.code==="invalid_union"&&u.errors.forEach(function(b){return b.forEach(function(y){return n.push(y)})}),l){var p=i[d].types,v=p&&p[u.code];i[d]=pf(d,l,i,c,v?[].concat(v,u.message):u.message)}n.shift()}return i}function j2(n,l,i){if(i===void 0&&(i={}),(function(u){return"_def"in u&&typeof u._def=="object"&&"typeName"in u._def})(n))return function(u,c,f){try{return Promise.resolve(hv(function(){return Promise.resolve(n[i.mode==="sync"?"parse":"parseAsync"](u,l)).then(function(d){return f.shouldUseNativeValidation&&Wc({},f),{errors:{},values:i.raw?Object.assign({},u):d}})},function(d){if((function(m){return Array.isArray(m?.issues)})(d))return{values:{},errors:Ig(Dx(d.errors,!f.shouldUseNativeValidation&&f.criteriaMode==="all"),f)};throw d}))}catch(d){return Promise.reject(d)}};if((function(u){return"_zod"in u&&typeof u._zod=="object"})(n))return function(u,c,f){try{return Promise.resolve(hv(function(){return Promise.resolve((i.mode==="sync"?l_:r_)(n,u,l)).then(function(d){return f.shouldUseNativeValidation&&Wc({},f),{errors:{},values:i.raw?Object.assign({},u):d}})},function(d){if((function(m){return m instanceof Af})(d))return{values:{},errors:Ig(Mx(d.issues,!f.shouldUseNativeValidation&&f.criteriaMode==="all"),f)};throw d}))}catch(d){return Promise.reject(d)}};throw new Error("Invalid input: not a Zod schema")}function Cx(n){if(typeof document>"u")return;let l=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css",l.appendChild(i),i.styleSheet?i.styleSheet.cssText=n:i.appendChild(document.createTextNode(n))}const kx=n=>{switch(n){case"success":return Zx;case"info":return Bx;case"warning":return Vx;case"error":return Hx;default:return null}},Nx=Array(12).fill(0),Ux=({visible:n,className:l})=>q.createElement("div",{className:["sonner-loading-wrapper",l].filter(Boolean).join(" "),"data-visible":n},q.createElement("div",{className:"sonner-spinner"},Nx.map((i,u)=>q.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${u}`})))),Zx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},q.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),Vx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},q.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),Bx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},q.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),Hx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},q.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),jx=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},q.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),q.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),Lx=()=>{const[n,l]=q.useState(document.hidden);return q.useEffect(()=>{const i=()=>{l(document.hidden)};return document.addEventListener("visibilitychange",i),()=>window.removeEventListener("visibilitychange",i)},[]),n};let tf=1;class Yx{constructor(){this.subscribe=l=>(this.subscribers.push(l),()=>{const i=this.subscribers.indexOf(l);this.subscribers.splice(i,1)}),this.publish=l=>{this.subscribers.forEach(i=>i(l))},this.addToast=l=>{this.publish(l),this.toasts=[...this.toasts,l]},this.create=l=>{var i;const{message:u,...c}=l,f=typeof l?.id=="number"||((i=l.id)==null?void 0:i.length)>0?l.id:tf++,d=this.toasts.find(p=>p.id===f),m=l.dismissible===void 0?!0:l.dismissible;return this.dismissedToasts.has(f)&&this.dismissedToasts.delete(f),d?this.toasts=this.toasts.map(p=>p.id===f?(this.publish({...p,...l,id:f,title:u}),{...p,...l,id:f,dismissible:m,title:u}):p):this.addToast({title:u,...c,dismissible:m,id:f}),f},this.dismiss=l=>(l?(this.dismissedToasts.add(l),requestAnimationFrame(()=>this.subscribers.forEach(i=>i({id:l,dismiss:!0})))):this.toasts.forEach(i=>{this.subscribers.forEach(u=>u({id:i.id,dismiss:!0}))}),l),this.message=(l,i)=>this.create({...i,message:l}),this.error=(l,i)=>this.create({...i,message:l,type:"error"}),this.success=(l,i)=>this.create({...i,type:"success",message:l}),this.info=(l,i)=>this.create({...i,type:"info",message:l}),this.warning=(l,i)=>this.create({...i,type:"warning",message:l}),this.loading=(l,i)=>this.create({...i,type:"loading",message:l}),this.promise=(l,i)=>{if(!i)return;let u;i.loading!==void 0&&(u=this.create({...i,promise:l,type:"loading",message:i.loading,description:typeof i.description!="function"?i.description:void 0}));const c=Promise.resolve(l instanceof Function?l():l);let f=u!==void 0,d;const m=c.then(async v=>{if(d=["resolve",v],q.isValidElement(v))f=!1,this.create({id:u,type:"default",message:v});else if(Gx(v)&&!v.ok){f=!1;const y=typeof i.error=="function"?await i.error(`HTTP error! status: ${v.status}`):i.error,x=typeof i.description=="function"?await i.description(`HTTP error! status: ${v.status}`):i.description,k=typeof y=="object"&&!q.isValidElement(y)?y:{message:y};this.create({id:u,type:"error",description:x,...k})}else if(v instanceof Error){f=!1;const y=typeof i.error=="function"?await i.error(v):i.error,x=typeof i.description=="function"?await i.description(v):i.description,k=typeof y=="object"&&!q.isValidElement(y)?y:{message:y};this.create({id:u,type:"error",description:x,...k})}else if(i.success!==void 0){f=!1;const y=typeof i.success=="function"?await i.success(v):i.success,x=typeof i.description=="function"?await i.description(v):i.description,k=typeof y=="object"&&!q.isValidElement(y)?y:{message:y};this.create({id:u,type:"success",description:x,...k})}}).catch(async v=>{if(d=["reject",v],i.error!==void 0){f=!1;const b=typeof i.error=="function"?await i.error(v):i.error,y=typeof i.description=="function"?await i.description(v):i.description,T=typeof b=="object"&&!q.isValidElement(b)?b:{message:b};this.create({id:u,type:"error",description:y,...T})}}).finally(()=>{f&&(this.dismiss(u),u=void 0),i.finally==null||i.finally.call(i)}),p=()=>new Promise((v,b)=>m.then(()=>d[0]==="reject"?b(d[1]):v(d[1])).catch(b));return typeof u!="string"&&typeof u!="number"?{unwrap:p}:Object.assign(u,{unwrap:p})},this.custom=(l,i)=>{const u=i?.id||tf++;return this.create({jsx:l(u),id:u,...i}),u},this.getActiveToasts=()=>this.toasts.filter(l=>!this.dismissedToasts.has(l.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}}const Xe=new Yx,qx=(n,l)=>{const i=l?.id||tf++;return Xe.addToast({title:n,...l,id:i}),i},Gx=n=>n&&typeof n=="object"&&"ok"in n&&typeof n.ok=="boolean"&&"status"in n&&typeof n.status=="number",Xx=qx,Qx=()=>Xe.toasts,$x=()=>Xe.getActiveToasts(),L2=Object.assign(Xx,{success:Xe.success,info:Xe.info,warning:Xe.warning,error:Xe.error,custom:Xe.custom,message:Xe.message,promise:Xe.promise,dismiss:Xe.dismiss,loading:Xe.loading},{getHistory:Qx,getToasts:$x});Cx("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function Xu(n){return n.label!==void 0}const Kx=3,Jx="24px",Fx="16px",mv=4e3,Wx=356,Px=14,Ix=45,tE=200;function Nn(...n){return n.filter(Boolean).join(" ")}function eE(n){const[l,i]=n.split("-"),u=[];return l&&u.push(l),i&&u.push(i),u}const nE=n=>{var l,i,u,c,f,d,m,p,v;const{invert:b,toast:y,unstyled:x,interacting:T,setHeights:k,visibleToasts:C,heights:B,index:X,toasts:H,expanded:K,removeToast:F,defaultRichColors:Z,closeButton:tt,style:ut,cancelButtonStyle:W,actionButtonStyle:vt,className:Rt="",descriptionClassName:Et="",duration:lt,position:ot,gap:yt,expandByDefault:bt,classNames:A,icons:L,closeButtonAriaLabel:U="Close toast"}=n,[gt,_]=q.useState(null),[Q,at]=q.useState(null),[j,P]=q.useState(!1),[ht,mt]=q.useState(!1),[Ot,St]=q.useState(!1),[Wt,Re]=q.useState(!1),[Ze,we]=q.useState(!1),[Ha,En]=q.useState(0),[sl,cl]=q.useState(0),xe=q.useRef(y.duration||lt||mv),dr=q.useRef(null),Ve=q.useRef(null),w=X===0,D=X+1<=C,V=y.type,nt=y.dismissible!==!1,et=y.className||"",I=y.descriptionClassName||"",st=q.useMemo(()=>B.findIndex(Tt=>Tt.toastId===y.id)||0,[B,y.id]),zt=q.useMemo(()=>{var Tt;return(Tt=y.closeButton)!=null?Tt:tt},[y.closeButton,tt]),kt=q.useMemo(()=>y.duration||lt||mv,[y.duration,lt]),jt=q.useRef(0),Qe=q.useRef(0),$e=q.useRef(0),An=q.useRef(null),[zn,Tn]=ot.split("-"),ln=q.useMemo(()=>B.reduce((Tt,le,fe)=>fe>=st?Tt:Tt+le.height,0),[B,st]),On=Lx(),Yn=y.invert||b,ca=V==="loading";Qe.current=q.useMemo(()=>st*yt+ln,[st,ln]),q.useEffect(()=>{xe.current=kt},[kt]),q.useEffect(()=>{P(!0)},[]),q.useEffect(()=>{const Tt=Ve.current;if(Tt){const le=Tt.getBoundingClientRect().height;return cl(le),k(fe=>[{toastId:y.id,height:le,position:y.position},...fe]),()=>k(fe=>fe.filter(De=>De.toastId!==y.id))}},[k,y.id]),q.useLayoutEffect(()=>{if(!j)return;const Tt=Ve.current,le=Tt.style.height;Tt.style.height="auto";const fe=Tt.getBoundingClientRect().height;Tt.style.height=le,cl(fe),k(De=>De.find(ve=>ve.toastId===y.id)?De.map(ve=>ve.toastId===y.id?{...ve,height:fe}:ve):[{toastId:y.id,height:fe,position:y.position},...De])},[j,y.title,y.description,k,y.id,y.jsx,y.action,y.cancel]);const vn=q.useCallback(()=>{mt(!0),En(Qe.current),k(Tt=>Tt.filter(le=>le.toastId!==y.id)),setTimeout(()=>{F(y)},tE)},[y,F,k,Qe]);q.useEffect(()=>{if(y.promise&&V==="loading"||y.duration===1/0||y.type==="loading")return;let Tt;return K||T||On?(()=>{if($e.current{xe.current!==1/0&&(jt.current=new Date().getTime(),Tt=setTimeout(()=>{y.onAutoClose==null||y.onAutoClose.call(y,y),vn()},xe.current))})(),()=>clearTimeout(Tt)},[K,T,y,V,On,vn]),q.useEffect(()=>{y.delete&&(vn(),y.onDismiss==null||y.onDismiss.call(y,y))},[vn,y.delete]);function xi(){var Tt;if(L?.loading){var le;return q.createElement("div",{className:Nn(A?.loader,y==null||(le=y.classNames)==null?void 0:le.loader,"sonner-loader"),"data-visible":V==="loading"},L.loading)}return q.createElement(Ux,{className:Nn(A?.loader,y==null||(Tt=y.classNames)==null?void 0:Tt.loader),visible:V==="loading"})}const hr=y.icon||L?.[V]||kx(V);var fa,Ei;return q.createElement("li",{tabIndex:0,ref:Ve,className:Nn(Rt,et,A?.toast,y==null||(l=y.classNames)==null?void 0:l.toast,A?.default,A?.[V],y==null||(i=y.classNames)==null?void 0:i[V]),"data-sonner-toast":"","data-rich-colors":(fa=y.richColors)!=null?fa:Z,"data-styled":!(y.jsx||y.unstyled||x),"data-mounted":j,"data-promise":!!y.promise,"data-swiped":Ze,"data-removed":ht,"data-visible":D,"data-y-position":zn,"data-x-position":Tn,"data-index":X,"data-front":w,"data-swiping":Ot,"data-dismissible":nt,"data-type":V,"data-invert":Yn,"data-swipe-out":Wt,"data-swipe-direction":Q,"data-expanded":!!(K||bt&&j),"data-testid":y.testId,style:{"--index":X,"--toasts-before":X,"--z-index":H.length-X,"--offset":`${ht?Ha:Qe.current}px`,"--initial-height":bt?"auto":`${sl}px`,...ut,...y.style},onDragEnd:()=>{St(!1),_(null),An.current=null},onPointerDown:Tt=>{Tt.button!==2&&(ca||!nt||(dr.current=new Date,En(Qe.current),Tt.target.setPointerCapture(Tt.pointerId),Tt.target.tagName!=="BUTTON"&&(St(!0),An.current={x:Tt.clientX,y:Tt.clientY})))},onPointerUp:()=>{var Tt,le,fe;if(Wt||!nt)return;An.current=null;const De=Number(((Tt=Ve.current)==null?void 0:Tt.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),ja=Number(((le=Ve.current)==null?void 0:le.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),ve=new Date().getTime()-((fe=dr.current)==null?void 0:fe.getTime()),re=gt==="x"?De:ja,ie=Math.abs(re)/ve;if(Math.abs(re)>=Ix||ie>.11){En(Qe.current),y.onDismiss==null||y.onDismiss.call(y,y),at(gt==="x"?De>0?"right":"left":ja>0?"down":"up"),vn(),Re(!0);return}else{var Kt,Ee;(Kt=Ve.current)==null||Kt.style.setProperty("--swipe-amount-x","0px"),(Ee=Ve.current)==null||Ee.style.setProperty("--swipe-amount-y","0px")}we(!1),St(!1),_(null)},onPointerMove:Tt=>{var le,fe,De;if(!An.current||!nt||((le=window.getSelection())==null?void 0:le.toString().length)>0)return;const ve=Tt.clientY-An.current.y,re=Tt.clientX-An.current.x;var ie;const Kt=(ie=n.swipeDirections)!=null?ie:eE(ot);!gt&&(Math.abs(re)>1||Math.abs(ve)>1)&&_(Math.abs(re)>Math.abs(ve)?"x":"y");let Ee={x:0,y:0};const fl=qn=>1/(1.5+Math.abs(qn)/20);if(gt==="y"){if(Kt.includes("top")||Kt.includes("bottom"))if(Kt.includes("top")&&ve<0||Kt.includes("bottom")&&ve>0)Ee.y=ve;else{const qn=ve*fl(ve);Ee.y=Math.abs(qn)0)Ee.x=re;else{const qn=re*fl(re);Ee.x=Math.abs(qn)0||Math.abs(Ee.y)>0)&&we(!0),(fe=Ve.current)==null||fe.style.setProperty("--swipe-amount-x",`${Ee.x}px`),(De=Ve.current)==null||De.style.setProperty("--swipe-amount-y",`${Ee.y}px`)}},zt&&!y.jsx&&V!=="loading"?q.createElement("button",{"aria-label":U,"data-disabled":ca,"data-close-button":!0,onClick:ca||!nt?()=>{}:()=>{vn(),y.onDismiss==null||y.onDismiss.call(y,y)},className:Nn(A?.closeButton,y==null||(u=y.classNames)==null?void 0:u.closeButton)},(Ei=L?.close)!=null?Ei:jx):null,(V||y.icon||y.promise)&&y.icon!==null&&(L?.[V]!==null||y.icon)?q.createElement("div",{"data-icon":"",className:Nn(A?.icon,y==null||(c=y.classNames)==null?void 0:c.icon)},y.promise||y.type==="loading"&&!y.icon?y.icon||xi():null,y.type!=="loading"?hr:null):null,q.createElement("div",{"data-content":"",className:Nn(A?.content,y==null||(f=y.classNames)==null?void 0:f.content)},q.createElement("div",{"data-title":"",className:Nn(A?.title,y==null||(d=y.classNames)==null?void 0:d.title)},y.jsx?y.jsx:typeof y.title=="function"?y.title():y.title),y.description?q.createElement("div",{"data-description":"",className:Nn(Et,I,A?.description,y==null||(m=y.classNames)==null?void 0:m.description)},typeof y.description=="function"?y.description():y.description):null),q.isValidElement(y.cancel)?y.cancel:y.cancel&&Xu(y.cancel)?q.createElement("button",{"data-button":!0,"data-cancel":!0,style:y.cancelButtonStyle||W,onClick:Tt=>{Xu(y.cancel)&&nt&&(y.cancel.onClick==null||y.cancel.onClick.call(y.cancel,Tt),vn())},className:Nn(A?.cancelButton,y==null||(p=y.classNames)==null?void 0:p.cancelButton)},y.cancel.label):null,q.isValidElement(y.action)?y.action:y.action&&Xu(y.action)?q.createElement("button",{"data-button":!0,"data-action":!0,style:y.actionButtonStyle||vt,onClick:Tt=>{Xu(y.action)&&(y.action.onClick==null||y.action.onClick.call(y.action,Tt),!Tt.defaultPrevented&&vn())},className:Nn(A?.actionButton,y==null||(v=y.classNames)==null?void 0:v.actionButton)},y.action.label):null)};function gv(){if(typeof window>"u"||typeof document>"u")return"ltr";const n=document.documentElement.getAttribute("dir");return n==="auto"||!n?window.getComputedStyle(document.documentElement).direction:n}function aE(n,l){const i={};return[n,l].forEach((u,c)=>{const f=c===1,d=f?"--mobile-offset":"--offset",m=f?Fx:Jx;function p(v){["top","right","bottom","left"].forEach(b=>{i[`${d}-${b}`]=typeof v=="number"?`${v}px`:v})}typeof u=="number"||typeof u=="string"?p(u):typeof u=="object"?["top","right","bottom","left"].forEach(v=>{u[v]===void 0?i[`${d}-${v}`]=m:i[`${d}-${v}`]=typeof u[v]=="number"?`${u[v]}px`:u[v]}):p(m)}),i}const Y2=q.forwardRef(function(l,i){const{id:u,invert:c,position:f="bottom-right",hotkey:d=["altKey","KeyT"],expand:m,closeButton:p,className:v,offset:b,mobileOffset:y,theme:x="light",richColors:T,duration:k,style:C,visibleToasts:B=Kx,toastOptions:X,dir:H=gv(),gap:K=Px,icons:F,containerAriaLabel:Z="Notifications"}=l,[tt,ut]=q.useState([]),W=q.useMemo(()=>u?tt.filter(j=>j.toasterId===u):tt.filter(j=>!j.toasterId),[tt,u]),vt=q.useMemo(()=>Array.from(new Set([f].concat(W.filter(j=>j.position).map(j=>j.position)))),[W,f]),[Rt,Et]=q.useState([]),[lt,ot]=q.useState(!1),[yt,bt]=q.useState(!1),[A,L]=q.useState(x!=="system"?x:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),U=q.useRef(null),gt=d.join("+").replace(/Key/g,"").replace(/Digit/g,""),_=q.useRef(null),Q=q.useRef(!1),at=q.useCallback(j=>{ut(P=>{var ht;return(ht=P.find(mt=>mt.id===j.id))!=null&&ht.delete||Xe.dismiss(j.id),P.filter(({id:mt})=>mt!==j.id)})},[]);return q.useEffect(()=>Xe.subscribe(j=>{if(j.dismiss){requestAnimationFrame(()=>{ut(P=>P.map(ht=>ht.id===j.id?{...ht,delete:!0}:ht))});return}setTimeout(()=>{J0.flushSync(()=>{ut(P=>{const ht=P.findIndex(mt=>mt.id===j.id);return ht!==-1?[...P.slice(0,ht),{...P[ht],...j},...P.slice(ht+1)]:[j,...P]})})})}),[tt]),q.useEffect(()=>{if(x!=="system"){L(x);return}if(x==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?L("dark"):L("light")),typeof window>"u")return;const j=window.matchMedia("(prefers-color-scheme: dark)");try{j.addEventListener("change",({matches:P})=>{L(P?"dark":"light")})}catch{j.addListener(({matches:ht})=>{try{L(ht?"dark":"light")}catch(mt){console.error(mt)}})}},[x]),q.useEffect(()=>{tt.length<=1&&ot(!1)},[tt]),q.useEffect(()=>{const j=P=>{var ht;if(d.every(St=>P[St]||P.code===St)){var Ot;ot(!0),(Ot=U.current)==null||Ot.focus()}P.code==="Escape"&&(document.activeElement===U.current||(ht=U.current)!=null&&ht.contains(document.activeElement))&&ot(!1)};return document.addEventListener("keydown",j),()=>document.removeEventListener("keydown",j)},[d]),q.useEffect(()=>{if(U.current)return()=>{_.current&&(_.current.focus({preventScroll:!0}),_.current=null,Q.current=!1)}},[U.current]),q.createElement("section",{ref:i,"aria-label":`${Z} ${gt}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},vt.map((j,P)=>{var ht;const[mt,Ot]=j.split("-");return W.length?q.createElement("ol",{key:j,dir:H==="auto"?gv():H,tabIndex:-1,ref:U,className:v,"data-sonner-toaster":!0,"data-sonner-theme":A,"data-y-position":mt,"data-x-position":Ot,style:{"--front-toast-height":`${((ht=Rt[0])==null?void 0:ht.height)||0}px`,"--width":`${Wx}px`,"--gap":`${K}px`,...C,...aE(b,y)},onBlur:St=>{Q.current&&!St.currentTarget.contains(St.relatedTarget)&&(Q.current=!1,_.current&&(_.current.focus({preventScroll:!0}),_.current=null))},onFocus:St=>{St.target instanceof HTMLElement&&St.target.dataset.dismissible==="false"||Q.current||(Q.current=!0,_.current=St.relatedTarget)},onMouseEnter:()=>ot(!0),onMouseMove:()=>ot(!0),onMouseLeave:()=>{yt||ot(!1)},onDragEnd:()=>ot(!1),onPointerDown:St=>{St.target instanceof HTMLElement&&St.target.dataset.dismissible==="false"||bt(!0)},onPointerUp:()=>bt(!1)},W.filter(St=>!St.position&&P===0||St.position===j).map((St,Wt)=>{var Re,Ze;return q.createElement(nE,{key:St.id,icons:F,index:Wt,toast:St,defaultRichColors:T,duration:(Re=X?.duration)!=null?Re:k,className:X?.className,descriptionClassName:X?.descriptionClassName,invert:c,visibleToasts:B,closeButton:(Ze=X?.closeButton)!=null?Ze:p,interacting:yt,position:j,style:X?.style,unstyled:X?.unstyled,classNames:X?.classNames,cancelButtonStyle:X?.cancelButtonStyle,actionButtonStyle:X?.actionButtonStyle,closeButtonAriaLabel:X?.closeButtonAriaLabel,removeToast:at,toasts:W.filter(we=>we.position==St.position),heights:Rt.filter(we=>we.position==St.position),setHeights:Et,expandByDefault:m,gap:K,expanded:lt,swipeDirections:l.swipeDirections})})):null}))}),lE=J("ZodISODateTime",(n,l)=>{sw.init(n,l),ee.init(n,l)});function rE(n){return cx(lE,n)}const iE=J("ZodISODate",(n,l)=>{cw.init(n,l),ee.init(n,l)});function uE(n){return fx(iE,n)}const oE=J("ZodISOTime",(n,l)=>{fw.init(n,l),ee.init(n,l)});function sE(n){return dx(oE,n)}const cE=J("ZodISODuration",(n,l)=>{dw.init(n,l),ee.init(n,l)});function fE(n){return hx(cE,n)}const dE=(n,l)=>{Af.init(n,l),n.name="ZodError",Object.defineProperties(n,{format:{value:i=>a_(n,i)},flatten:{value:i=>n_(n,i)},addIssue:{value:i=>{n.issues.push(i),n.message=JSON.stringify(n.issues,Pc,2)}},addIssues:{value:i=>{n.issues.push(...i),n.message=JSON.stringify(n.issues,Pc,2)}},isEmpty:{get(){return n.issues.length===0}}})},gn=J("ZodError",dE,{Parent:Error}),hE=go(gn),mE=vo(gn),gE=yo(gn),vE=po(gn),yE=o_(gn),pE=s_(gn),bE=c_(gn),SE=f_(gn),_E=d_(gn),wE=h_(gn),xE=m_(gn),EE=g_(gn),_e=J("ZodType",(n,l)=>(ge.init(n,l),n.def=l,n.type=l.type,Object.defineProperty(n,"_def",{value:l}),n.check=(...i)=>n.clone({...l,checks:[...l.checks??[],...i.map(u=>typeof u=="function"?{_zod:{check:u,def:{check:"custom"},onattach:[]}}:u)]}),n.clone=(i,u)=>Ba(n,i,u),n.brand=()=>n,n.register=((i,u)=>(i.add(n,u),n)),n.parse=(i,u)=>hE(n,i,u,{callee:n.parse}),n.safeParse=(i,u)=>gE(n,i,u),n.parseAsync=async(i,u)=>mE(n,i,u,{callee:n.parseAsync}),n.safeParseAsync=async(i,u)=>vE(n,i,u),n.spa=n.safeParseAsync,n.encode=(i,u)=>yE(n,i,u),n.decode=(i,u)=>pE(n,i,u),n.encodeAsync=async(i,u)=>bE(n,i,u),n.decodeAsync=async(i,u)=>SE(n,i,u),n.safeEncode=(i,u)=>_E(n,i,u),n.safeDecode=(i,u)=>wE(n,i,u),n.safeEncodeAsync=async(i,u)=>xE(n,i,u),n.safeDecodeAsync=async(i,u)=>EE(n,i,u),n.refine=(i,u)=>n.check(m2(i,u)),n.superRefine=i=>n.check(g2(i)),n.overwrite=i=>n.check(wi(i)),n.optional=()=>pv(n),n.nullable=()=>bv(n),n.nullish=()=>pv(bv(n)),n.nonoptional=i=>u2(n,i),n.array=()=>QE(n),n.or=i=>JE([n,i]),n.and=i=>WE(n,i),n.transform=i=>Sv(n,e2(i)),n.default=i=>l2(n,i),n.prefault=i=>i2(n,i),n.catch=i=>s2(n,i),n.pipe=i=>Sv(n,i),n.readonly=()=>d2(n),n.describe=i=>{const u=n.clone();return Gu.add(u,{description:i}),u},Object.defineProperty(n,"description",{get(){return Gu.get(n)?.description},configurable:!0}),n.meta=(...i)=>{if(i.length===0)return Gu.get(n);const u=n.clone();return Gu.add(u,i[0]),u},n.isOptional=()=>n.safeParse(void 0).success,n.isNullable=()=>n.safeParse(null).success,n)),Cy=J("_ZodString",(n,l)=>{zf.init(n,l),_e.init(n,l);const i=n._zod.bag;n.format=i.format??null,n.minLength=i.minimum??null,n.maxLength=i.maximum??null,n.regex=(...u)=>n.check(vx(...u)),n.includes=(...u)=>n.check(bx(...u)),n.startsWith=(...u)=>n.check(Sx(...u)),n.endsWith=(...u)=>n.check(_x(...u)),n.min=(...u)=>n.check(io(...u)),n.max=(...u)=>n.check(Dy(...u)),n.length=(...u)=>n.check(My(...u)),n.nonempty=(...u)=>n.check(io(1,...u)),n.lowercase=u=>n.check(yx(u)),n.uppercase=u=>n.check(px(u)),n.trim=()=>n.check(xx()),n.normalize=(...u)=>n.check(wx(...u)),n.toLowerCase=()=>n.check(Ex()),n.toUpperCase=()=>n.check(Ax())}),AE=J("ZodString",(n,l)=>{zf.init(n,l),Cy.init(n,l),n.email=i=>n.check(Oy(ky,i)),n.url=i=>n.check(Kw(zE,i)),n.jwt=i=>n.check(sx(LE,i)),n.emoji=i=>n.check(Jw(TE,i)),n.guid=i=>n.check(dv(vv,i)),n.uuid=i=>n.check(Ry(hi,i)),n.uuidv4=i=>n.check(Xw(hi,i)),n.uuidv6=i=>n.check(Qw(hi,i)),n.uuidv7=i=>n.check($w(hi,i)),n.nanoid=i=>n.check(Fw(OE,i)),n.guid=i=>n.check(dv(vv,i)),n.cuid=i=>n.check(Ww(RE,i)),n.cuid2=i=>n.check(Pw(DE,i)),n.ulid=i=>n.check(Iw(ME,i)),n.base64=i=>n.check(ix(BE,i)),n.base64url=i=>n.check(ux(HE,i)),n.xid=i=>n.check(tx(CE,i)),n.ksuid=i=>n.check(ex(kE,i)),n.ipv4=i=>n.check(nx(NE,i)),n.ipv6=i=>n.check(ax(UE,i)),n.cidrv4=i=>n.check(lx(ZE,i)),n.cidrv6=i=>n.check(rx(VE,i)),n.e164=i=>n.check(ox(jE,i)),n.datetime=i=>n.check(rE(i)),n.date=i=>n.check(uE(i)),n.time=i=>n.check(sE(i)),n.duration=i=>n.check(fE(i))});function q2(n){return Gw(AE,n)}const ee=J("ZodStringFormat",(n,l)=>{It.init(n,l),Cy.init(n,l)}),ky=J("ZodEmail",(n,l)=>{tw.init(n,l),ee.init(n,l)});function G2(n){return Oy(ky,n)}const vv=J("ZodGUID",(n,l)=>{P_.init(n,l),ee.init(n,l)}),hi=J("ZodUUID",(n,l)=>{I_.init(n,l),ee.init(n,l)});function X2(n){return Ry(hi,n)}const zE=J("ZodURL",(n,l)=>{ew.init(n,l),ee.init(n,l)}),TE=J("ZodEmoji",(n,l)=>{nw.init(n,l),ee.init(n,l)}),OE=J("ZodNanoID",(n,l)=>{aw.init(n,l),ee.init(n,l)}),RE=J("ZodCUID",(n,l)=>{lw.init(n,l),ee.init(n,l)}),DE=J("ZodCUID2",(n,l)=>{rw.init(n,l),ee.init(n,l)}),ME=J("ZodULID",(n,l)=>{iw.init(n,l),ee.init(n,l)}),CE=J("ZodXID",(n,l)=>{uw.init(n,l),ee.init(n,l)}),kE=J("ZodKSUID",(n,l)=>{ow.init(n,l),ee.init(n,l)}),NE=J("ZodIPv4",(n,l)=>{hw.init(n,l),ee.init(n,l)}),UE=J("ZodIPv6",(n,l)=>{mw.init(n,l),ee.init(n,l)}),ZE=J("ZodCIDRv4",(n,l)=>{gw.init(n,l),ee.init(n,l)}),VE=J("ZodCIDRv6",(n,l)=>{vw.init(n,l),ee.init(n,l)}),BE=J("ZodBase64",(n,l)=>{yw.init(n,l),ee.init(n,l)}),HE=J("ZodBase64URL",(n,l)=>{bw.init(n,l),ee.init(n,l)}),jE=J("ZodE164",(n,l)=>{Sw.init(n,l),ee.init(n,l)}),LE=J("ZodJWT",(n,l)=>{ww.init(n,l),ee.init(n,l)}),YE=J("ZodUnknown",(n,l)=>{xw.init(n,l),_e.init(n,l)});function yv(){return mx(YE)}const qE=J("ZodNever",(n,l)=>{Ew.init(n,l),_e.init(n,l)});function GE(n){return gx(qE,n)}const XE=J("ZodArray",(n,l)=>{Aw.init(n,l),_e.init(n,l),n.element=l.element,n.min=(i,u)=>n.check(io(i,u)),n.nonempty=i=>n.check(io(1,i)),n.max=(i,u)=>n.check(Dy(i,u)),n.length=(i,u)=>n.check(My(i,u)),n.unwrap=()=>n.element});function QE(n,l){return zx(XE,n,l)}const $E=J("ZodObject",(n,l)=>{Tw.init(n,l),_e.init(n,l),Ft(n,"shape",()=>l.shape),n.keyof=()=>PE(Object.keys(n._zod.def.shape)),n.catchall=i=>n.clone({...n._zod.def,catchall:i}),n.passthrough=()=>n.clone({...n._zod.def,catchall:yv()}),n.loose=()=>n.clone({...n._zod.def,catchall:yv()}),n.strict=()=>n.clone({...n._zod.def,catchall:GE()}),n.strip=()=>n.clone({...n._zod.def,catchall:void 0}),n.extend=i=>WS(n,i),n.safeExtend=i=>PS(n,i),n.merge=i=>IS(n,i),n.pick=i=>JS(n,i),n.omit=i=>FS(n,i),n.partial=(...i)=>t_(Ny,n,i[0]),n.required=(...i)=>e_(Uy,n,i[0])});function Q2(n,l){const i={type:"object",get shape(){return Va(this,"shape",n?XS(n):{}),this.shape},...At(l)};return new $E(i)}const KE=J("ZodUnion",(n,l)=>{Ow.init(n,l),_e.init(n,l),n.options=l.options});function JE(n,l){return new KE({type:"union",options:n,...At(l)})}const FE=J("ZodIntersection",(n,l)=>{Rw.init(n,l),_e.init(n,l)});function WE(n,l){return new FE({type:"intersection",left:n,right:l})}const ef=J("ZodEnum",(n,l)=>{Dw.init(n,l),_e.init(n,l),n.enum=l.entries,n.options=Object.values(l.entries);const i=new Set(Object.keys(l.entries));n.extract=(u,c)=>{const f={};for(const d of u)if(i.has(d))f[d]=l.entries[d];else throw new Error(`Key ${d} not found in enum`);return new ef({...l,checks:[],...At(c),entries:f})},n.exclude=(u,c)=>{const f={...l.entries};for(const d of u)if(i.has(d))delete f[d];else throw new Error(`Key ${d} not found in enum`);return new ef({...l,checks:[],...At(c),entries:f})}});function PE(n,l){const i=Array.isArray(n)?Object.fromEntries(n.map(u=>[u,u])):n;return new ef({type:"enum",entries:i,...At(l)})}const IE=J("ZodLiteral",(n,l)=>{Mw.init(n,l),_e.init(n,l),n.values=new Set(l.values),Object.defineProperty(n,"value",{get(){if(l.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return l.values[0]}})});function $2(n,l){return new IE({type:"literal",values:Array.isArray(n)?n:[n],...At(l)})}const t2=J("ZodTransform",(n,l)=>{Cw.init(n,l),_e.init(n,l),n._zod.parse=(i,u)=>{if(u.direction==="backward")throw new vy(n.constructor.name);i.addIssue=f=>{if(typeof f=="string")i.issues.push(bi(f,i.value,l));else{const d=f;d.fatal&&(d.continue=!1),d.code??(d.code="custom"),d.input??(d.input=i.value),d.inst??(d.inst=n),i.issues.push(bi(d))}};const c=l.transform(i.value,i);return c instanceof Promise?c.then(f=>(i.value=f,i)):(i.value=c,i)}});function e2(n){return new t2({type:"transform",transform:n})}const Ny=J("ZodOptional",(n,l)=>{kw.init(n,l),_e.init(n,l),n.unwrap=()=>n._zod.def.innerType});function pv(n){return new Ny({type:"optional",innerType:n})}const n2=J("ZodNullable",(n,l)=>{Nw.init(n,l),_e.init(n,l),n.unwrap=()=>n._zod.def.innerType});function bv(n){return new n2({type:"nullable",innerType:n})}const a2=J("ZodDefault",(n,l)=>{Uw.init(n,l),_e.init(n,l),n.unwrap=()=>n._zod.def.innerType,n.removeDefault=n.unwrap});function l2(n,l){return new a2({type:"default",innerType:n,get defaultValue(){return typeof l=="function"?l():by(l)}})}const r2=J("ZodPrefault",(n,l)=>{Zw.init(n,l),_e.init(n,l),n.unwrap=()=>n._zod.def.innerType});function i2(n,l){return new r2({type:"prefault",innerType:n,get defaultValue(){return typeof l=="function"?l():by(l)}})}const Uy=J("ZodNonOptional",(n,l)=>{Vw.init(n,l),_e.init(n,l),n.unwrap=()=>n._zod.def.innerType});function u2(n,l){return new Uy({type:"nonoptional",innerType:n,...At(l)})}const o2=J("ZodCatch",(n,l)=>{Bw.init(n,l),_e.init(n,l),n.unwrap=()=>n._zod.def.innerType,n.removeCatch=n.unwrap});function s2(n,l){return new o2({type:"catch",innerType:n,catchValue:typeof l=="function"?l:()=>l})}const c2=J("ZodPipe",(n,l)=>{Hw.init(n,l),_e.init(n,l),n.in=l.in,n.out=l.out});function Sv(n,l){return new c2({type:"pipe",in:n,out:l})}const f2=J("ZodReadonly",(n,l)=>{jw.init(n,l),_e.init(n,l),n.unwrap=()=>n._zod.def.innerType});function d2(n){return new f2({type:"readonly",innerType:n})}const h2=J("ZodCustom",(n,l)=>{Lw.init(n,l),_e.init(n,l)});function m2(n,l={}){return Tx(h2,n,l)}function g2(n){return Ox(n)}var jc={exports:{}},di={},Lc={exports:{}},Yc={};/** * @license React * scheduler.production.js * @@ -95,12 +95,12 @@ import{g as Av}from"./router-CcA--AgE.js";function q0(n,l){for(var i=0;i_||(t.current=gt[_],gt[_]=null,_--)}function j(t,e){_++,gt[_]=t.current,t.current=e}var P=Q(null),ht=Q(null),mt=Q(null),Ot=Q(null);function St(t,e){switch(j(mt,e),j(ht,t),j(P,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?jm(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=jm(e),t=Lm(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}at(P),j(P,t)}function Wt(){at(P),at(ht),at(mt)}function Re(t){t.memoizedState!==null&&j(Ot,t);var e=P.current,a=Lm(e,t.type);e!==a&&(j(ht,t),j(P,a))}function Ze(t){ht.current===t&&(at(P),at(ht)),Ot.current===t&&(at(Ot),ai._currentValue=U)}var we=Object.prototype.hasOwnProperty,Ha=n.unstable_scheduleCallback,En=n.unstable_cancelCallback,sl=n.unstable_shouldYield,cl=n.unstable_requestPaint,xe=n.unstable_now,dr=n.unstable_getCurrentPriorityLevel,Ve=n.unstable_ImmediatePriority,w=n.unstable_UserBlockingPriority,D=n.unstable_NormalPriority,V=n.unstable_LowPriority,nt=n.unstable_IdlePriority,et=n.log,I=n.unstable_setDisableYieldValue,st=null,zt=null;function kt(t){if(typeof et=="function"&&I(t),zt&&typeof zt.setStrictMode=="function")try{zt.setStrictMode(st,t)}catch{}}var jt=Math.clz32?Math.clz32:An,Qe=Math.log,$e=Math.LN2;function An(t){return t>>>=0,t===0?32:31-(Qe(t)/$e|0)|0}var zn=256,Tn=4194304;function ln(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function On(t,e,a){var r=t.pendingLanes;if(r===0)return 0;var o=0,s=t.suspendedLanes,h=t.pingedLanes;t=t.warmLanes;var g=r&134217727;return g!==0?(r=g&~s,r!==0?o=ln(r):(h&=g,h!==0?o=ln(h):a||(a=g&~t,a!==0&&(o=ln(a))))):(g=r&~s,g!==0?o=ln(g):h!==0?o=ln(h):a||(a=r&~t,a!==0&&(o=ln(a)))),o===0?0:e!==0&&e!==o&&(e&s)===0&&(s=o&-o,a=e&-e,s>=a||s===32&&(a&4194048)!==0)?e:o}function Yn(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function ca(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function vn(){var t=zn;return zn<<=1,(zn&4194048)===0&&(zn=256),t}function wi(){var t=Tn;return Tn<<=1,(Tn&62914560)===0&&(Tn=4194304),t}function hr(t){for(var e=[],a=0;31>a;a++)e.push(t);return e}function fa(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function xi(t,e,a,r,o,s){var h=t.pendingLanes;t.pendingLanes=a,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=a,t.entangledLanes&=a,t.errorRecoveryDisabledLanes&=a,t.shellSuspendCounter=0;var g=t.entanglements,S=t.expirationTimes,R=t.hiddenUpdates;for(a=h&~a;0_||(t.current=gt[_],gt[_]=null,_--)}function j(t,e){_++,gt[_]=t.current,t.current=e}var P=Q(null),ht=Q(null),mt=Q(null),Ot=Q(null);function St(t,e){switch(j(mt,e),j(ht,t),j(P,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?jm(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=jm(e),t=Lm(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}at(P),j(P,t)}function Wt(){at(P),at(ht),at(mt)}function Re(t){t.memoizedState!==null&&j(Ot,t);var e=P.current,a=Lm(e,t.type);e!==a&&(j(ht,t),j(P,a))}function Ze(t){ht.current===t&&(at(P),at(ht)),Ot.current===t&&(at(Ot),ai._currentValue=U)}var we=Object.prototype.hasOwnProperty,Ha=n.unstable_scheduleCallback,En=n.unstable_cancelCallback,sl=n.unstable_shouldYield,cl=n.unstable_requestPaint,xe=n.unstable_now,dr=n.unstable_getCurrentPriorityLevel,Ve=n.unstable_ImmediatePriority,w=n.unstable_UserBlockingPriority,D=n.unstable_NormalPriority,V=n.unstable_LowPriority,nt=n.unstable_IdlePriority,et=n.log,I=n.unstable_setDisableYieldValue,st=null,zt=null;function kt(t){if(typeof et=="function"&&I(t),zt&&typeof zt.setStrictMode=="function")try{zt.setStrictMode(st,t)}catch{}}var jt=Math.clz32?Math.clz32:An,Qe=Math.log,$e=Math.LN2;function An(t){return t>>>=0,t===0?32:31-(Qe(t)/$e|0)|0}var zn=256,Tn=4194304;function ln(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function On(t,e,a){var r=t.pendingLanes;if(r===0)return 0;var o=0,s=t.suspendedLanes,h=t.pingedLanes;t=t.warmLanes;var g=r&134217727;return g!==0?(r=g&~s,r!==0?o=ln(r):(h&=g,h!==0?o=ln(h):a||(a=g&~t,a!==0&&(o=ln(a))))):(g=r&~s,g!==0?o=ln(g):h!==0?o=ln(h):a||(a=r&~t,a!==0&&(o=ln(a)))),o===0?0:e!==0&&e!==o&&(e&s)===0&&(s=o&-o,a=e&-e,s>=a||s===32&&(a&4194048)!==0)?e:o}function Yn(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function ca(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function vn(){var t=zn;return zn<<=1,(zn&4194048)===0&&(zn=256),t}function xi(){var t=Tn;return Tn<<=1,(Tn&62914560)===0&&(Tn=4194304),t}function hr(t){for(var e=[],a=0;31>a;a++)e.push(t);return e}function fa(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Ei(t,e,a,r,o,s){var h=t.pendingLanes;t.pendingLanes=a,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=a,t.entangledLanes&=a,t.errorRecoveryDisabledLanes&=a,t.shellSuspendCounter=0;var g=t.entanglements,S=t.expirationTimes,R=t.hiddenUpdates;for(a=h&~a;0)":-1o||S[r]!==R[o]){var Y=` -`+S[r].replace(" at new "," at ");return t.displayName&&Y.includes("")&&(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 Vy(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+=Vy(t),t=t.return;while(t);return e}catch(a){return` +`+S[r].replace(" at new "," at ");return t.displayName&&Y.includes("")&&(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 By(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 zi(t){t._valueTracker||(t._valueTracker=By(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 Ti(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 Hy=/[\n"\\]/g;function un(t){return t.replace(Hy,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"&&Ti(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,Ri=null;function Gf(){if(Ri)return Ri;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 hp.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 gp(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 vp(t,e){if(_l)return t==="compositionend"||!Zo&&Pf(t,e)?(t=Gf(),Ri=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=Ti(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=Ti(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 Ep=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!==Ti(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=bu(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=kp(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 Bp(){}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?Bp: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 Hp(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 jp(t,e,a){var r=Ie();a={lane:r,revertLane:0,action:a,hasEagerState:!1,eagerState:null,next:null},Ii(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(Ii(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 Zi(t,e,o,0),Jt===null&&Ui(),!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},Ii(t)){if(e)throw Error(u(479))}else e=Xo(t,a,r,2),e!==null&&tn(e,t,2)}function Ii(t){var e=t.alternate;return t===Mt||e!==null&&e===Mt}function yh(t,e){Cl=$i=!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 tu={readContext:Ne,use:Ji,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:Ji,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,Pi(4194308,4,ih.bind(null,e,t),a)},useLayoutEffect:function(t,e){return Pi(4194308,4,t,e)},useInsertionEffect:function(t,e){Pi(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=jp.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,Wi(),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=Ki++,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(Y0){return e(z,Y0)}),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=Bi(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,eu(O),G);if(O.$$typeof===K)return Qt(z,E,Yi(z,O),G);nu(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===Gi)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 au(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 lu=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){lu(t)}function Oh(t){console.error(t)}function Rh(t){lu(t)}function ru(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(){ru(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 Yp(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=Bi(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&&qi(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?(qi(e,s.cachePool),Zd(e,s),ba(),e.memoizedState=null):(t!==null&&qi(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&&qi(e,null),ss(),Eh(e),t!==null&&Or(t,e,r,!0),null}function iu(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&&Li(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&&Li(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,iu(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=uu({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=uu({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=uu({mode:"visible",children:e},t.mode),e.return=t,t.child=e}function uu(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&&au(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&&au(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&&Li(t)))}function qp(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,qp(t,e,a);ze=(t.flags&131072)!==0}else ze=!1,Ht&&(e.flags&1048576)!==0&&_d(e,ji,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 iu(t,e),t===null?(a=Jm(e.type,null,e.pendingProps,null))?e.memoizedState=a:Ht||(a=e.type,t=e.pendingProps,r=_u(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),iu(t,e),t===null&&(e.flags|=4194304),e.child;case 5:return t===null&&Ht&&((o=r=ne)&&(r=y0(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,Up,null,null,a),ai._currentValue=o),iu(t,e),Me(t,e,r,a),e.child;case 6:return t===null&&Ht&&((t=a=ne)&&(a=p0(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=uu(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 ou(t,e){e!==null&&(t.flags|=4),t.flags&16384&&(e=t.tag!==22?wi():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 Gp(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=_u(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/ui/package.json b/ui/package.json index 842d9b6..d38f2df 100644 --- a/ui/package.json +++ b/ui/package.json @@ -12,6 +12,7 @@ "dependencies": { "@hookform/resolvers": "^5.2.1", "@radix-ui/react-alert-dialog": "^1.1.15", + "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", diff --git a/ui/src/App.tsx b/ui/src/App.tsx index e7e8712..014df11 100644 --- a/ui/src/App.tsx +++ b/ui/src/App.tsx @@ -10,7 +10,12 @@ import { Me } from "@/pages/auth/me.tsx" import { Register } from "@/pages/auth/register.tsx" import { ResetPassword } from "@/pages/auth/reset-password.tsx" import { VerifyEmail } from "@/pages/auth/verify-email.tsx" +import { AnnotationsPage } from "@/pages/core/annotations-page.tsx" +import { ClustersPage } from "@/pages/core/clusters-page.tsx" +import { LabelsPage } from "@/pages/core/labels-page.tsx" +import { NodePoolPage } from "@/pages/core/nodepool-page.tsx" import { ServersPage } from "@/pages/core/servers-page.tsx" +import { TaintsPage } from "@/pages/core/taints-page.tsx" import { Forbidden } from "@/pages/error/forbidden.tsx" import { NotFoundPage } from "@/pages/error/not-found.tsx" import { SshKeysPage } from "@/pages/security/ssh.tsx" @@ -20,7 +25,6 @@ import { OrgManagement } from "@/pages/settings/orgs.tsx" function App() { return ( - } /> } /> {/* Public/auth branch */} @@ -40,13 +44,12 @@ function App() { + } /> + } /> + } /> + } /> } /> - {/* - } /> - } /> - } /> - */} @@ -58,10 +61,13 @@ function App() { } /> } /> + } /> } /> + } /> + } /> ) diff --git a/ui/src/components/dashboard-sidebar.tsx b/ui/src/components/dashboard-sidebar.tsx index 16040cd..2e04333 100644 --- a/ui/src/components/dashboard-sidebar.tsx +++ b/ui/src/components/dashboard-sidebar.tsx @@ -107,7 +107,7 @@ export const DashboardSidebar = () => { } catch { // ignore; unauthenticated users shouldn't be here anyway under ProtectedRoute } finally { - if (!alive) return + // if (!alive) return setLoading(false) } })() @@ -122,13 +122,15 @@ export const DashboardSidebar = () => { return filterItems(items, admin, orgAdmin) }, [me]) + if (loading) return
Loading…
+ return (

AutoGlue

- {(loading ? items : visibleItems).map((item, i) => ( + {visibleItems.map((item, i) => ( ))} diff --git a/ui/src/components/sidebar/items.ts b/ui/src/components/sidebar/items.ts index 4337889..57b4a79 100644 --- a/ui/src/components/sidebar/items.ts +++ b/ui/src/components/sidebar/items.ts @@ -40,13 +40,13 @@ export const items = [ items: [ { label: "Cluster", - to: "/core/cluster", + to: "/core/clusters", icon: AiOutlineCluster, }, { label: "Node Pools", icon: BoxesIcon, - to: "/core/node-pools", + to: "/core/nodepools", }, { label: "Annotations", diff --git a/ui/src/components/ui/checkbox.tsx b/ui/src/components/ui/checkbox.tsx new file mode 100644 index 0000000..884a8a0 --- /dev/null +++ b/ui/src/components/ui/checkbox.tsx @@ -0,0 +1,27 @@ +import * as React from "react" +import * as CheckboxPrimitive from "@radix-ui/react-checkbox" +import { CheckIcon } from "lucide-react" + +import { cn } from "@/lib/utils" + +function Checkbox({ className, ...props }: React.ComponentProps) { + return ( + + + + + + ) +} + +export { Checkbox } diff --git a/ui/src/pages/core/annotations-page.tsx b/ui/src/pages/core/annotations-page.tsx new file mode 100644 index 0000000..65c52bb --- /dev/null +++ b/ui/src/pages/core/annotations-page.tsx @@ -0,0 +1,9 @@ +export const AnnotationsPage = () => { + return ( +
+
+

Annotations

+
+
+ ) +} diff --git a/ui/src/pages/core/clusters-page.tsx b/ui/src/pages/core/clusters-page.tsx new file mode 100644 index 0000000..bc50b21 --- /dev/null +++ b/ui/src/pages/core/clusters-page.tsx @@ -0,0 +1,9 @@ +export const ClustersPage = () => { + return ( +
+
+

Clusters

+
+
+ ) +} diff --git a/ui/src/pages/core/labels-page.tsx b/ui/src/pages/core/labels-page.tsx new file mode 100644 index 0000000..9647854 --- /dev/null +++ b/ui/src/pages/core/labels-page.tsx @@ -0,0 +1,190 @@ +import { useEffect, useState } from "react" +import { zodResolver } from "@hookform/resolvers/zod" +import { PencilIcon, Plus, TrashIcon } from "lucide-react" +import { useForm } from "react-hook-form" +import { z } from "zod" + +import { api } from "@/lib/api.ts" +import { Button } from "@/components/ui/button.tsx" +import { + Dialog, + DialogContent, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog.tsx" +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form.tsx" +import { Input } from "@/components/ui/input.tsx" +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table.tsx" + +type Label = { + id: string + key: string + value: string +} + +const CreateLabelSchema = z.object({ + key: z.string().min(2), + value: z.string().min(2), +}) +type CreateLabelValues = z.infer + +export const LabelsPage = () => { + const [labels, setLabels] = useState([]) + const [loading, setLoading] = useState(false) + const [err, setErr] = useState(null) + + const [createOpen, setCreateOpen] = useState(false) + + async function loadAll() { + setLoading(true) + setErr(null) + try { + const labelData = await api.get("/api/v1/labels") + console.log(JSON.stringify(labelData)) + setLabels(labelData) + } catch (e) { + console.error(e) + } finally { + setLoading(false) + } + } + + useEffect(() => { + void loadAll() + }, []) + + const createForm = useForm({ + resolver: zodResolver(CreateLabelSchema), + defaultValues: { + key: "", + value: "", + }, + }) + + const submitCreate = async (values: CreateLabelValues) => { + const payload: Record = { + key: values.key, + value: values.value, + } + await api.post