diff --git a/.gitignore b/.gitignore index 9daaba2c..ce10460d 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,6 @@ otari-smoke.db .DS_Store .idea/ + +# Stray node_modules from running npx at the repo root (web has its own) +node_modules/ diff --git a/docs/public/openapi.json b/docs/public/openapi.json index fa42b1f3..de9e0805 100644 --- a/docs/public/openapi.json +++ b/docs/public/openapi.json @@ -4893,6 +4893,146 @@ "title": "UsageCount", "type": "object" }, + "UsageDeleteRequest": { + "description": "Selection of imported usage rows to delete.", + "properties": { + "api_key_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Api Key Id" + }, + "by_filter": { + "default": false, + "title": "By Filter", + "type": "boolean" + }, + "end_date": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "End Date" + }, + "endpoint": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Endpoint" + }, + "ids": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "maxItems": 1000, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Ids" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Model" + }, + "priced": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Priced" + }, + "source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source" + }, + "start_date": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Start Date" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Status" + }, + "user_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "User Id" + } + }, + "title": "UsageDeleteRequest", + "type": "object" + }, + "UsageDeleteResult": { + "description": "How many imported rows the delete removed.", + "properties": { + "deleted": { + "default": 0, + "title": "Deleted", + "type": "integer" + } + }, + "title": "UsageDeleteResult", + "type": "object" + }, "UsageEntry": { "description": "A single usage log entry.", "properties": { @@ -5346,6 +5486,194 @@ "title": "UsageSeriesPoint", "type": "object" }, + "UsageSetPriceRequest": { + "description": "Selection of imported usage rows plus the manual per-1M rates to price them at.\n\n``input`` and ``output`` are required (every row is charged for them); the cache\nrates are optional and, when omitted, those tokens fold into the fresh-input charge\nexactly as an unpriced cache rate does in normal metered pricing.", + "properties": { + "api_key_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Api Key Id" + }, + "by_filter": { + "default": false, + "title": "By Filter", + "type": "boolean" + }, + "cache_read_price_per_million": { + "anyOf": [ + { + "minimum": 0.0, + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Cache Read Price Per Million" + }, + "cache_write_price_per_million": { + "anyOf": [ + { + "minimum": 0.0, + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Cache Write Price Per Million" + }, + "end_date": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "End Date" + }, + "endpoint": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Endpoint" + }, + "ids": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "maxItems": 1000, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Ids" + }, + "input_price_per_million": { + "minimum": 0.0, + "title": "Input Price Per Million", + "type": "number" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Model" + }, + "output_price_per_million": { + "minimum": 0.0, + "title": "Output Price Per Million", + "type": "number" + }, + "priced": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Priced" + }, + "source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source" + }, + "start_date": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Start Date" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Status" + }, + "user_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "User Id" + } + }, + "required": [ + "input_price_per_million", + "output_price_per_million" + ], + "title": "UsageSetPriceRequest", + "type": "object" + }, + "UsageSetPriceResult": { + "description": "Outcome of a manual repricing pass.\n\n``matched`` imported rows were recomputed; ``updated`` had their stored cost\nchanged and ``unchanged`` already matched the recomputed value.", + "properties": { + "matched": { + "default": 0, + "title": "Matched", + "type": "integer" + }, + "unchanged": { + "default": 0, + "title": "Unchanged", + "type": "integer" + }, + "updated": { + "default": 0, + "title": "Updated", + "type": "integer" + } + }, + "title": "UsageSetPriceResult", + "type": "object" + }, "UsageSummary": { "description": "Aggregate spend/volume for the Usage & analytics page.", "properties": { @@ -9091,6 +9419,54 @@ } }, "/v1/usage": { + "delete": { + "description": "Delete imported usage rows by explicit ids or by filter (standalone).\n\nTarget either the current selection (``ids``) or everything matching a filter\n(``by_filter: true`` plus optional ``source`` / ``model`` / ``user_id`` /\n``status`` / date range / ``priced``). Only imported rows\n(``counts_toward_budget = false``) are ever removed: enforced gateway rows and\nthe spend ledger (``users.spend``) are untouched, so a delete can never desync a\nbudget. Master-key only.", + "operationId": "delete_usage_rows_v1_usage_delete", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UsageDeleteRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UsageDeleteResult" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + } + }, + "security": [ + { + "ApiKeyAuth": [] + }, + { + "XApiKeyAuth": [] + } + ], + "summary": "Delete Usage Rows", + "tags": [ + "usage" + ] + }, "get": { "description": "List usage logs ordered by timestamp (most recent first).\n\nSupports optional filters for time range, user, status, model, and endpoint.\nPaginated via skip/limit. The return shape is a bare JSON array; external\nbilling/analytics consumers depend on this, so the total row count for a\npaginated UI is served separately by ``GET /v1/usage/count`` rather than\nwrapped in an envelope here. Timestamps accept either ISO 8601 strings or\nUnix epoch seconds (numeric).", "operationId": "list_usage_v1_usage_get", @@ -9241,6 +9617,42 @@ "title": "Api Key Id" } }, + { + "description": "Filter by pricing state: true = only rows with a cost, false = only unpriced rows (cost is null)", + "in": "query", + "name": "priced", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Filter by pricing state: true = only rows with a cost, false = only unpriced rows (cost is null)", + "title": "Priced" + } + }, + { + "description": "Filter by budget participation: true = only enforced gateway rows, false = only imported rows that never touch a budget", + "in": "query", + "name": "counts_toward_budget", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Filter by budget participation: true = only enforced gateway rows, false = only imported rows that never touch a budget", + "title": "Counts Toward Budget" + } + }, { "in": "query", "name": "skip", @@ -9307,7 +9719,7 @@ }, "/v1/usage/count": { "get": { - "description": "Total number of usage logs matching the given filters.\n\nServes the dashboard paginator's \"N of M\" total without changing the bare\narray contract of ``GET /v1/usage``. Runs only when the client asks (a\nseparate request), so the ``COUNT(*)`` is not paid on every page load.", + "description": "Total number of usage logs matching the given filters.\n\nServes the dashboard paginator's \"N of M\" total without changing the bare\narray contract of ``GET /v1/usage``. Runs only when the client asks (a\nseparate request), so the ``COUNT(*)`` is not paid on every page load. With\n``counts_toward_budget=false`` it also backs the \"select all N matching this\nfilter\" affordance for bulk delete / set-price, which touch imported rows only.", "operationId": "count_usage_v1_usage_count_get", "parameters": [ { @@ -9455,6 +9867,42 @@ "description": "Filter to a single API key id", "title": "Api Key Id" } + }, + { + "description": "Filter by pricing state: true = only rows with a cost, false = only unpriced rows (cost is null)", + "in": "query", + "name": "priced", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Filter by pricing state: true = only rows with a cost, false = only unpriced rows (cost is null)", + "title": "Priced" + } + }, + { + "description": "Filter by budget participation: true = only enforced gateway rows, false = only imported rows that never touch a budget", + "in": "query", + "name": "counts_toward_budget", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Filter by budget participation: true = only enforced gateway rows, false = only imported rows that never touch a budget", + "title": "Counts Toward Budget" + } } ], "responses": { @@ -9543,6 +9991,56 @@ ] } }, + "/v1/usage/set-price": { + "post": { + "description": "Set the cost of imported usage rows from manual per-1M rates (standalone).\n\nTarget either the current selection (``ids``) or everything matching a filter\n(``by_filter: true``). Cost / billing meters / pricing breakdown are recomputed\nfrom each row's own token counts at the supplied ``input`` / ``output`` /\n``cache_read`` / ``cache_write`` per-1M rates (manual rates, not a recompute from\nconfigured pricing). Only imported rows (``counts_toward_budget = false``) are\ntouched, so ``users.spend`` is never affected. Master-key only.", + "operationId": "set_usage_price_rows_v1_usage_set_price_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UsageSetPriceRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UsageSetPriceResult" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + } + }, + "security": [ + { + "ApiKeyAuth": [] + }, + { + "XApiKeyAuth": [] + } + ], + "summary": "Set Usage Price Rows", + "tags": [ + "usage" + ] + } + }, "/v1/usage/summary": { "get": { "description": "Aggregate spend, tokens, and request volume for the dashboard Usage page.\n\nRange-bounded (default last 30 days, hard-capped): unlike the raw ``/v1/usage``\nlist, every aggregate is scoped to a bounded window so it stays served by the\ntimestamp index. Returns grand totals, breakdowns by model / user / API key\n(top rows plus a reconciling ``other`` fold), and a UTC-bucketed time series.", @@ -9694,6 +10192,42 @@ "title": "Api Key Id" } }, + { + "description": "Filter by pricing state: true = only rows with a cost, false = only unpriced rows (cost is null)", + "in": "query", + "name": "priced", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Filter by pricing state: true = only rows with a cost, false = only unpriced rows (cost is null)", + "title": "Priced" + } + }, + { + "description": "Filter by budget participation: true = only enforced gateway rows, false = only imported rows that never touch a budget", + "in": "query", + "name": "counts_toward_budget", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Filter by budget participation: true = only enforced gateway rows, false = only imported rows that never touch a budget", + "title": "Counts Toward Budget" + } + }, { "description": "Time-series granularity: 'hour' or 'day'", "in": "query", @@ -9897,6 +10431,42 @@ "description": "Filter to a single API key id", "title": "Api Key Id" } + }, + { + "description": "Filter by pricing state: true = only rows with a cost, false = only unpriced rows (cost is null)", + "in": "query", + "name": "priced", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Filter by pricing state: true = only rows with a cost, false = only unpriced rows (cost is null)", + "title": "Priced" + } + }, + { + "description": "Filter by budget participation: true = only enforced gateway rows, false = only imported rows that never touch a budget", + "in": "query", + "name": "counts_toward_budget", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Filter by budget participation: true = only enforced gateway rows, false = only imported rows that never touch a budget", + "title": "Counts Toward Budget" + } } ], "responses": { diff --git a/docs/public/otari.postman_collection.json b/docs/public/otari.postman_collection.json index 22d7e825..f59437f3 100644 --- a/docs/public/otari.postman_collection.json +++ b/docs/public/otari.postman_collection.json @@ -2183,6 +2183,18 @@ "key": "api_key_id", "value": "" }, + { + "description": "Filter by pricing state: true = only rows with a cost, false = only unpriced rows (cost is null)", + "disabled": true, + "key": "priced", + "value": "" + }, + { + "description": "Filter by budget participation: true = only enforced gateway rows, false = only imported rows that never touch a budget", + "disabled": true, + "key": "counts_toward_budget", + "value": "" + }, { "description": "", "disabled": true, @@ -2196,14 +2208,32 @@ "value": "" } ], - "raw": "{{baseUrl}}/v1/usage?start_date=&end_date=&user_id=&status=&model=&endpoint=&source=&api_key_id=&skip=&limit=" + "raw": "{{baseUrl}}/v1/usage?start_date=&end_date=&user_id=&status=&model=&endpoint=&source=&api_key_id=&priced=&counts_toward_budget=&skip=&limit=" + } + } + }, + { + "name": "Delete Usage Rows", + "request": { + "description": "Delete imported usage rows by explicit ids or by filter (standalone).\n\nTarget either the current selection (``ids``) or everything matching a filter\n(``by_filter: true`` plus optional ``source`` / ``model`` / ``user_id`` /\n``status`` / date range / ``priced``). Only imported rows\n(``counts_toward_budget = false``) are ever removed: enforced gateway rows and\nthe spend ledger (``users.spend``) are untouched, so a delete can never desync a\nbudget. Master-key only.", + "header": [], + "method": "DELETE", + "url": { + "host": [ + "{{baseUrl}}" + ], + "path": [ + "v1", + "usage" + ], + "raw": "{{baseUrl}}/v1/usage" } } }, { "name": "Count Usage", "request": { - "description": "Total number of usage logs matching the given filters.\n\nServes the dashboard paginator's \"N of M\" total without changing the bare\narray contract of ``GET /v1/usage``. Runs only when the client asks (a\nseparate request), so the ``COUNT(*)`` is not paid on every page load.", + "description": "Total number of usage logs matching the given filters.\n\nServes the dashboard paginator's \"N of M\" total without changing the bare\narray contract of ``GET /v1/usage``. Runs only when the client asks (a\nseparate request), so the ``COUNT(*)`` is not paid on every page load. With\n``counts_toward_budget=false`` it also backs the \"select all N matching this\nfilter\" affordance for bulk delete / set-price, which touch imported rows only.", "header": [], "method": "GET", "url": { @@ -2263,9 +2293,21 @@ "disabled": true, "key": "api_key_id", "value": "" + }, + { + "description": "Filter by pricing state: true = only rows with a cost, false = only unpriced rows (cost is null)", + "disabled": true, + "key": "priced", + "value": "" + }, + { + "description": "Filter by budget participation: true = only enforced gateway rows, false = only imported rows that never touch a budget", + "disabled": true, + "key": "counts_toward_budget", + "value": "" } ], - "raw": "{{baseUrl}}/v1/usage/count?start_date=&end_date=&user_id=&status=&model=&endpoint=&source=&api_key_id=" + "raw": "{{baseUrl}}/v1/usage/count?start_date=&end_date=&user_id=&status=&model=&endpoint=&source=&api_key_id=&priced=&counts_toward_budget=" } } }, @@ -2302,6 +2344,39 @@ } } }, + { + "name": "Set Usage Price Rows", + "request": { + "body": { + "mode": "raw", + "options": { + "raw": { + "language": "json" + } + }, + "raw": "{\n \"input_price_per_million\": 0,\n \"output_price_per_million\": 0\n}" + }, + "description": "Set the cost of imported usage rows from manual per-1M rates (standalone).\n\nTarget either the current selection (``ids``) or everything matching a filter\n(``by_filter: true``). Cost / billing meters / pricing breakdown are recomputed\nfrom each row's own token counts at the supplied ``input`` / ``output`` /\n``cache_read`` / ``cache_write`` per-1M rates (manual rates, not a recompute from\nconfigured pricing). Only imported rows (``counts_toward_budget = false``) are\ntouched, so ``users.spend`` is never affected. Master-key only.", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "method": "POST", + "url": { + "host": [ + "{{baseUrl}}" + ], + "path": [ + "v1", + "usage", + "set-price" + ], + "raw": "{{baseUrl}}/v1/usage/set-price" + } + } + }, { "name": "Usage Summary", "request": { @@ -2366,6 +2441,18 @@ "key": "api_key_id", "value": "" }, + { + "description": "Filter by pricing state: true = only rows with a cost, false = only unpriced rows (cost is null)", + "disabled": true, + "key": "priced", + "value": "" + }, + { + "description": "Filter by budget participation: true = only enforced gateway rows, false = only imported rows that never touch a budget", + "disabled": true, + "key": "counts_toward_budget", + "value": "" + }, { "description": "Time-series granularity: 'hour' or 'day'", "disabled": true, @@ -2373,7 +2460,7 @@ "value": "" } ], - "raw": "{{baseUrl}}/v1/usage/summary?start_date=&end_date=&user_id=&status=&model=&endpoint=&source=&api_key_id=&bucket=" + "raw": "{{baseUrl}}/v1/usage/summary?start_date=&end_date=&user_id=&status=&model=&endpoint=&source=&api_key_id=&priced=&counts_toward_budget=&bucket=" } } }, @@ -2440,9 +2527,21 @@ "disabled": true, "key": "api_key_id", "value": "" + }, + { + "description": "Filter by pricing state: true = only rows with a cost, false = only unpriced rows (cost is null)", + "disabled": true, + "key": "priced", + "value": "" + }, + { + "description": "Filter by budget participation: true = only enforced gateway rows, false = only imported rows that never touch a budget", + "disabled": true, + "key": "counts_toward_budget", + "value": "" } ], - "raw": "{{baseUrl}}/v1/usage/summary.csv?start_date=&end_date=&user_id=&status=&model=&endpoint=&source=&api_key_id=" + "raw": "{{baseUrl}}/v1/usage/summary.csv?start_date=&end_date=&user_id=&status=&model=&endpoint=&source=&api_key_id=&priced=&counts_toward_budget=" } } } diff --git a/src/gateway/api/routes/usage.py b/src/gateway/api/routes/usage.py index 13a57e2b..558f51bf 100644 --- a/src/gateway/api/routes/usage.py +++ b/src/gateway/api/routes/usage.py @@ -23,6 +23,14 @@ ExternalIngestResult, ingest_external_events, ) +from gateway.services.usage_admin_service import ( + UsageDeleteRequest, + UsageDeleteResult, + UsageSetPriceRequest, + UsageSetPriceResult, + delete_usage, + set_usage_price, +) router = APIRouter(prefix="/v1/usage", tags=["usage"]) @@ -121,6 +129,11 @@ class UsageCount(BaseModel): _ENDPOINT_DESC = "Filter to a single endpoint (e.g. '/v1/chat/completions')" _SOURCE_DESC = "Filter to a single provenance source (e.g. 'gateway' or 'claude_code')" _API_KEY_DESC = "Filter to a single API key id" +_PRICED_DESC = "Filter by pricing state: true = only rows with a cost, false = only unpriced rows (cost is null)" +_COUNTS_DESC = ( + "Filter by budget participation: true = only enforced gateway rows, " + "false = only imported rows that never touch a budget" +) def _usage_filters( @@ -133,6 +146,8 @@ def _usage_filters( endpoint: str | None, source: str | None = None, api_key_id: str | None = None, + priced: bool | None = None, + counts_toward_budget: bool | None = None, ) -> list[ColumnElement[bool]]: """Build the shared WHERE conditions for the list and count endpoints. @@ -156,6 +171,12 @@ def _usage_filters( conditions.append(UsageLog.source == source) if api_key_id is not None: conditions.append(UsageLog.api_key_id == api_key_id) + if priced is True: + conditions.append(UsageLog.cost.is_not(None)) + elif priced is False: + conditions.append(UsageLog.cost.is_(None)) + if counts_toward_budget is not None: + conditions.append(UsageLog.counts_toward_budget.is_(counts_toward_budget)) return conditions @@ -170,6 +191,8 @@ async def list_usage( endpoint: str | None = Query(default=None, description=_ENDPOINT_DESC), source: str | None = Query(default=None, description=_SOURCE_DESC), api_key_id: str | None = Query(default=None, description=_API_KEY_DESC), + priced: bool | None = Query(default=None, description=_PRICED_DESC), + counts_toward_budget: bool | None = Query(default=None, description=_COUNTS_DESC), skip: Annotated[int, Query(ge=0)] = 0, limit: Annotated[int, Query(ge=1, le=1000)] = 100, ) -> list[UsageEntry]: @@ -191,6 +214,8 @@ async def list_usage( endpoint=endpoint, source=source, api_key_id=api_key_id, + priced=priced, + counts_toward_budget=counts_toward_budget, ) stmt = ( select(UsageLog) @@ -244,12 +269,16 @@ async def count_usage( endpoint: str | None = Query(default=None, description=_ENDPOINT_DESC), source: str | None = Query(default=None, description=_SOURCE_DESC), api_key_id: str | None = Query(default=None, description=_API_KEY_DESC), + priced: bool | None = Query(default=None, description=_PRICED_DESC), + counts_toward_budget: bool | None = Query(default=None, description=_COUNTS_DESC), ) -> UsageCount: """Total number of usage logs matching the given filters. Serves the dashboard paginator's "N of M" total without changing the bare array contract of ``GET /v1/usage``. Runs only when the client asks (a - separate request), so the ``COUNT(*)`` is not paid on every page load. + separate request), so the ``COUNT(*)`` is not paid on every page load. With + ``counts_toward_budget=false`` it also backs the "select all N matching this + filter" affordance for bulk delete / set-price, which touch imported rows only. """ conditions = _usage_filters( start_date=start_date, @@ -260,12 +289,48 @@ async def count_usage( endpoint=endpoint, source=source, api_key_id=api_key_id, + priced=priced, + counts_toward_budget=counts_toward_budget, ) stmt: Any = select(func.count()).select_from(UsageLog).where(*conditions) total = (await db.execute(stmt)).scalar_one() return UsageCount(total=total) +@router.delete("", dependencies=[Depends(verify_master_key)]) +async def delete_usage_rows( + request: UsageDeleteRequest, + db: Annotated[AsyncSession, Depends(get_db)], +) -> UsageDeleteResult: + """Delete imported usage rows by explicit ids or by filter (standalone). + + Target either the current selection (``ids``) or everything matching a filter + (``by_filter: true`` plus optional ``source`` / ``model`` / ``user_id`` / + ``status`` / date range / ``priced``). Only imported rows + (``counts_toward_budget = false``) are ever removed: enforced gateway rows and + the spend ledger (``users.spend``) are untouched, so a delete can never desync a + budget. Master-key only. + """ + return await delete_usage(db, request) + + +@router.post("/set-price", dependencies=[Depends(verify_master_key)]) +async def set_usage_price_rows( + request: UsageSetPriceRequest, + db: Annotated[AsyncSession, Depends(get_db)], +) -> UsageSetPriceResult: + """Set the cost of imported usage rows from manual per-1M rates (standalone). + + Target either the current selection (``ids``) or everything matching a filter + (``by_filter: true``). Cost / billing meters / pricing breakdown are recomputed + from each row's own token counts at the supplied ``input`` / ``output`` / + ``cache_read`` / ``cache_write`` per-1M rates (manual rates, not a recompute from + configured pricing). Only imported rows (``counts_toward_budget = false``) are + touched, so ``users.spend`` is never affected. Master-key only. + """ + return await set_usage_price(db, request) + + # --------------------------------------------------------------------------- # Aggregated analytics (dashboard Usage page). Separate from the bare-array # list above, which stays a stable external-consumer contract. @@ -482,6 +547,8 @@ async def _summary_context( endpoint: str | None, source: str | None = None, api_key_id: str | None = None, + priced: bool | None = None, + counts_toward_budget: bool | None = None, ) -> tuple[datetime, datetime, list[ColumnElement[bool]], UsageTotals]: """Resolve the bounded window, the shared WHERE conditions, and the grand totals: the common preamble both summary endpoints run, kept in one place so a @@ -497,6 +564,8 @@ async def _summary_context( endpoint=endpoint, source=source, api_key_id=api_key_id, + priced=priced, + counts_toward_budget=counts_toward_budget, ) totals = await _totals(db, conditions) return start, end, conditions, totals @@ -555,6 +624,8 @@ async def usage_summary( endpoint: str | None = Query(default=None, description=_ENDPOINT_DESC), source: str | None = Query(default=None, description=_SOURCE_DESC), api_key_id: str | None = Query(default=None, description=_API_KEY_DESC), + priced: bool | None = Query(default=None, description=_PRICED_DESC), + counts_toward_budget: bool | None = Query(default=None, description=_COUNTS_DESC), bucket: Bucket = Query(default="day", description="Time-series granularity: 'hour' or 'day'"), ) -> UsageSummary: """Aggregate spend, tokens, and request volume for the dashboard Usage page. @@ -574,6 +645,8 @@ async def usage_summary( endpoint=endpoint, source=source, api_key_id=api_key_id, + priced=priced, + counts_toward_budget=counts_toward_budget, ) by_model = await _breakdown(db, UsageLog.model, conditions, totals, limit=_BREAKDOWN_TOP_N) by_user = await _breakdown(db, UsageLog.user_id, conditions, totals, limit=_BREAKDOWN_TOP_N) @@ -633,6 +706,8 @@ async def usage_summary_csv( endpoint: str | None = Query(default=None, description=_ENDPOINT_DESC), source: str | None = Query(default=None, description=_SOURCE_DESC), api_key_id: str | None = Query(default=None, description=_API_KEY_DESC), + priced: bool | None = Query(default=None, description=_PRICED_DESC), + counts_toward_budget: bool | None = Query(default=None, description=_COUNTS_DESC), ) -> Response: """Download the per-model / per-user / per-key / per-source breakdown as CSV. @@ -651,6 +726,8 @@ async def usage_summary_csv( endpoint=endpoint, source=source, api_key_id=api_key_id, + priced=priced, + counts_toward_budget=counts_toward_budget, ) dimensions = ( ("model", await _breakdown(db, UsageLog.model, conditions, totals, limit=None)), diff --git a/src/gateway/services/model_discovery_service.py b/src/gateway/services/model_discovery_service.py index 58b69077..6622f759 100644 --- a/src/gateway/services/model_discovery_service.py +++ b/src/gateway/services/model_discovery_service.py @@ -18,7 +18,6 @@ """ import asyncio -import os import time from collections.abc import Awaitable, Callable, Sequence from dataclasses import dataclass, field @@ -221,72 +220,18 @@ def _supports_list_models(provider_name: str) -> bool: return False -def _env_provider_instances(configured_impls: set[str]) -> list[str]: - """any-llm provider implementations made callable by their credential env var. - - Completion routing works for any any-llm provider once its native credential - env var is set: ``get_provider_kwargs`` returns ``{}`` for a provider absent - from ``config.providers``, so any-llm reads the env var directly. Discovery - would otherwise only see ``config.providers``, so such a provider is callable - yet missing from GET /v1/models. This closes that gap by treating a provider - whose credential env var is present as discoverable under its implementation - name, which is exactly the request selector ``:`` that routing - resolves. - - Only providers that support live model listing are included; one that cannot - list models would just error out and be dropped from the catalog. A provider - whose implementation already backs a configured instance is skipped - (``configured_impls`` holds those implementation names): otherwise a custom - instance such as ``my-anthropic`` (``provider_type: anthropic``) alongside - ``ANTHROPIC_API_KEY`` would dial the same credential twice and list the same - models under two keys. - - A keyless local provider (``ollama``/``llamacpp``/``llamafile``, whose - ``env_key`` is absent) has no credential signal to detect and so is not - surfaced here; discovering it would mean dialing a fixed localhost endpoint on - spec. That narrow callable-but-undiscoverable case is tracked in issue #389. - """ - detected: list[str] = [] - try: - all_metadata = AnyLLM.get_all_provider_metadata() - except Exception: - # Match the module's defensive posture (see _supports_list_models and the - # return_exceptions fanouts): a registry hiccup must not 500 GET /v1/models - # or /v1/models/discoverable. Fall back to configured-only discovery. - logger.warning("Could not enumerate provider metadata for env-based discovery", exc_info=True) - return detected - for metadata in all_metadata: - name = metadata.name - if name in configured_impls or not metadata.list_models: - continue - env_key = metadata.env_key - if not env_key: - continue - # ENV_API_KEY_NAME may name interchangeable alternatives separated by "/" - # (e.g. gemini's "GEMINI_API_KEY/GOOGLE_API_KEY"); any one set is enough. - # Compound descriptions ("AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY") - # and the literal "None" are not real single variable names and simply - # never match os.environ. A blank or whitespace-only value (common from - # container templating) is treated as unset, so it does not add a provider - # that would only fail to authenticate. - candidates = (part.strip() for part in env_key.split("/")) - if any(part and os.environ.get(part, "").strip() for part in candidates): - detected.append(name) - return detected - - def _discoverable_instances(config: GatewayConfig) -> list[str]: - """Instance names to run discovery for. - - Configured instances first, then any-llm providers made discoverable by an - env var alone (see ``_env_provider_instances``), so GET /v1/models matches - what completion routing can actually reach. Env detection is deduplicated - against the *implementations* the configured instances resolve to, so a - custom-named instance is never shadowed by a bare env-detected duplicate. + """Instance names to run discovery for: the configured provider instances only. + + "Configured" means the instances in ``config.providers``, which is the + ``providers:`` block from config.yml plus any provider added at runtime through + the Providers page (overlaid onto ``config.providers`` by the provider store). + Discovery is scoped to these deliberately: a provider is only a source of models + once an operator has configured it, so an empty gateway (no configured + providers) lists no discovered models even when a provider's credential env var + happens to be present in the environment. """ - configured = list(config.providers.keys()) - configured_impls = {config.provider_instance_type(instance) for instance in configured} - return configured + _env_provider_instances(configured_impls) + return list(config.providers.keys()) def _declared_models(config: GatewayConfig, instance: str) -> list[Model]: @@ -478,8 +423,8 @@ async def discover_models_with_status(config: GatewayConfig) -> list[ProviderDis Deliberately not gated on ``config.model_discovery``: that flag governs what GET /v1/models publishes to API callers, and an operator who curates that listing still has to be able to see what their own credentials can reach. - Includes providers made callable by an env var alone, so this operator view - agrees with completion routing and with GET /v1/models. + Scoped to the configured provider instances (``_discoverable_instances``), so + this operator view agrees with GET /v1/models. """ instances = _discoverable_instances(config) # return_exceptions so one provider that somehow escapes _discover_uncached @@ -505,11 +450,12 @@ async def discover_all_models( config: GatewayConfig, provider_filter: str | None = None, ) -> list[tuple[str, Model]]: - """Discover models from discoverable providers with caching. + """Discover models from the configured providers with caching. - Discoverable providers are the configured instances plus any-llm providers - made callable by an env var alone (see ``_discoverable_instances``), so the - catalog matches what completion routing can actually reach. + Discovery is scoped to the configured provider instances + (``_discoverable_instances``): a provider only sources models once an operator + has configured it (in config.yml or via the Providers page), so an empty + gateway lists nothing even if a provider's credential env var is present. Args: config: Gateway configuration with provider credentials. diff --git a/src/gateway/services/usage_admin_service.py b/src/gateway/services/usage_admin_service.py new file mode 100644 index 00000000..4ce3bd95 --- /dev/null +++ b/src/gateway/services/usage_admin_service.py @@ -0,0 +1,276 @@ +"""Operator mutations over imported usage rows: bulk delete and manual repricing. + +The dashboard's usage tables let an operator clean up or correct *imported* usage +(rows brought in through ``POST /v1/usage/external-events``), the routine work that +otherwise needs direct DB access. Two operations are exposed: + +- **delete**: drop a set of imported rows. +- **set-price**: recompute ``cost`` / ``billing_meters`` / ``pricing_breakdown`` from + manual per-1M rates and each row's own token counts. + +Both target the same set two ways: an explicit ``ids`` list (the current UI selection) +or a filter (for "everything matching this filter"). ``by_filter`` must be set +explicitly for the filter path so an empty request body can never match, and thus never +delete or reprice, every imported row by accident. + +**Safety invariant:** every query is scoped to ``counts_toward_budget = False`` (imported +rows). Enforced gateway rows and the spend ledger (``users.spend``) are never touched, so +neither operation can desync a budget, matching the boundary the ingest path establishes. +""" + +from datetime import datetime +from typing import Any, cast + +from pydantic import BaseModel, Field, model_validator +from sqlalchemy import ColumnElement, delete, func, select +from sqlalchemy.engine import CursorResult +from sqlalchemy.exc import SQLAlchemyError +from sqlalchemy.ext.asyncio import AsyncSession + +from gateway.core.usage import GatewayUsage +from gateway.log_config import logger +from gateway.models.entities import ModelPricing, UsageLog +from gateway.services.metered_pricing import calculate_metered_cost + +# Cap on an explicit id list. Page selections drive the id path and the largest +# rows-per-page the UI offers is 500; 1000 leaves headroom without letting a single +# request name an unbounded set of ids. +_MAX_IDS = 1000 +# Load matched rows for repricing in chunks under SQLite's default bound on bind +# variables in one IN() (999), mirroring the ingest path. +_REPRICE_CHUNK = 500 + + +class UsageSelection(BaseModel): + """Which imported usage rows an operation targets. + + Exactly one of two modes: a non-empty ``ids`` list (the current UI selection) or + ``by_filter=True`` with optional filter fields (everything matching). ``by_filter`` + is required for the filter path, so an empty body is a 422 rather than a match of + every imported row. + """ + + ids: list[str] | None = Field(default=None, max_length=_MAX_IDS) + by_filter: bool = False + source: str | None = None + model: str | None = None + user_id: str | None = None + api_key_id: str | None = None + status: str | None = None + endpoint: str | None = None + start_date: datetime | None = None + end_date: datetime | None = None + # None: any; True: only rows with a cost; False: only rows with no cost yet. + priced: bool | None = None + + @model_validator(mode="after") + def _require_exactly_one_mode(self) -> "UsageSelection": + has_ids = bool(self.ids) + if has_ids == self.by_filter: + raise ValueError("provide a non-empty `ids` list or set `by_filter` true (exactly one)") + return self + + +class UsageDeleteRequest(UsageSelection): + """Selection of imported usage rows to delete.""" + + +class UsageDeleteResult(BaseModel): + """How many imported rows the delete removed.""" + + deleted: int = 0 + + +class UsageSetPriceRequest(UsageSelection): + """Selection of imported usage rows plus the manual per-1M rates to price them at. + + ``input`` and ``output`` are required (every row is charged for them); the cache + rates are optional and, when omitted, those tokens fold into the fresh-input charge + exactly as an unpriced cache rate does in normal metered pricing. + """ + + input_price_per_million: float = Field(ge=0) + output_price_per_million: float = Field(ge=0) + cache_read_price_per_million: float | None = Field(default=None, ge=0) + cache_write_price_per_million: float | None = Field(default=None, ge=0) + + +class UsageSetPriceResult(BaseModel): + """Outcome of a manual repricing pass. + + ``matched`` imported rows were recomputed; ``updated`` had their stored cost + changed and ``unchanged`` already matched the recomputed value. + """ + + matched: int = 0 + updated: int = 0 + unchanged: int = 0 + + +def _selection_conditions(selection: UsageSelection) -> list[ColumnElement[bool]]: + """WHERE conditions for a selection, always scoped to imported rows. + + Two fixed conditions pin the target set to imported usage regardless of the + caller's input: + + - ``source != "gateway"`` is the provenance invariant: imported rows carry a + source slug (e.g. ``claude_code``), and "gateway" is reserved for usage Otari + served itself. This is the load-bearing guard, because ``counts_toward_budget`` + alone is *not* an imported-only flag: gateway traffic on a budget-exempt API + key (``exclude_from_budget``) is also ``counts_toward_budget = False``, and + those are real gateway rows a cleanup / reprice must never touch. + - ``counts_toward_budget = False`` is kept as a defense-in-depth budget guard, so + the spend ledger can never be affected even if the provenance guard ever slips. + + Together they mean even an ``ids`` list naming enforced or budget-exempt gateway + rows cannot reach them: they simply do not match. + """ + conditions: list[ColumnElement[bool]] = [ + UsageLog.source != "gateway", + UsageLog.counts_toward_budget.is_(False), + ] + if selection.ids: + conditions.append(UsageLog.id.in_(selection.ids)) + return conditions + if selection.source is not None: + conditions.append(UsageLog.source == selection.source) + if selection.model is not None: + conditions.append(UsageLog.model == selection.model) + if selection.user_id is not None: + conditions.append(UsageLog.user_id == selection.user_id) + if selection.api_key_id is not None: + conditions.append(UsageLog.api_key_id == selection.api_key_id) + if selection.status is not None: + conditions.append(UsageLog.status == selection.status) + if selection.endpoint is not None: + conditions.append(UsageLog.endpoint == selection.endpoint) + if selection.start_date is not None: + conditions.append(UsageLog.timestamp >= selection.start_date) + if selection.end_date is not None: + conditions.append(UsageLog.timestamp < selection.end_date) + if selection.priced is True: + conditions.append(UsageLog.cost.is_not(None)) + elif selection.priced is False: + conditions.append(UsageLog.cost.is_(None)) + return conditions + + +async def delete_usage(db: AsyncSession, request: UsageDeleteRequest) -> UsageDeleteResult: + """Delete the imported usage rows a selection matches. + + Only ``counts_toward_budget=False`` rows are ever removed, so the enforcement + ledger is untouched. Nothing references ``usage_logs``, so a plain bulk delete + leaves no orphans. + """ + conditions = _selection_conditions(request) + try: + result = cast("CursorResult[Any]", await db.execute(delete(UsageLog).where(*conditions))) + await db.commit() + except SQLAlchemyError: + await db.rollback() + logger.exception("usage delete failed") + raise + deleted = result.rowcount or 0 + logger.info("usage delete: removed=%d by_filter=%s", deleted, request.by_filter) + return UsageDeleteResult(deleted=deleted) + + +def _row_usage(row: UsageLog) -> GatewayUsage: + """Rebuild billing usage from a stored row's token counts. + + The per-event cache convention (``cache_tokens_in_prompt``) is not persisted, so + this assumes the additive shape (cache buckets sit outside ``prompt_tokens``), the + ingest default and the Anthropic / Claude Code convention imported usage carries. + Rows with no cache tokens price identically under either shape. + """ + return GatewayUsage( + prompt_tokens=row.prompt_tokens or 0, + completion_tokens=row.completion_tokens or 0, + total_tokens=row.total_tokens or 0, + cache_read_tokens=row.cache_read_tokens or 0, + cache_write_tokens=row.cache_write_tokens or 0, + cache_write_1h_tokens=row.cache_write_1h_tokens or 0, + cache_tokens_in_prompt=False, + ) + + +async def set_usage_price(db: AsyncSession, request: UsageSetPriceRequest) -> UsageSetPriceResult: + """Recompute cost for matched imported rows from manual per-1M rates. + + Builds a transient ``ModelPricing`` from the supplied rates and reprices each + matched row against its own token counts, writing ``cost`` / ``billing_meters`` / + ``pricing_breakdown`` back. Only imported rows are touched (see + ``_selection_conditions``), so recomputing cost can never desync ``users.spend``. + Rows whose recomputed cost equals the stored value are reported ``unchanged``. + + Rows are walked in bounded keyset pages ordered by id, so memory stays flat even + for a large ``by_filter`` set (each page is detached after it is flushed). The + whole pass commits once at the end: like ``delete_usage`` it is all-or-nothing, so + an error partway through leaves no half-repriced set behind. Keyset paging is safe + while mutating because it only moves forward past ``last_id``; already-repriced + rows sit behind the cursor and are never revisited, even when a ``priced=False`` + filter would no longer match them. + """ + pricing = ModelPricing( + model_key="__manual__", + input_price_per_million=request.input_price_per_million, + output_price_per_million=request.output_price_per_million, + cache_read_price_per_million=request.cache_read_price_per_million, + cache_write_price_per_million=request.cache_write_price_per_million, + cache_write_1h_price_per_million=None, + pricing_tiers=[], + ) + conditions = _selection_conditions(request) + result = UsageSetPriceResult() + + try: + last_id = "" + while True: + rows = ( + await db.execute( + select(UsageLog) + .where(*conditions, UsageLog.id > last_id) + .order_by(UsageLog.id) + .limit(_REPRICE_CHUNK) + ) + ).scalars().all() + if not rows: + break + for row in rows: + result.matched += 1 + cost, meters, breakdown = calculate_metered_cost(pricing, _row_usage(row)) + if cost == row.cost: + result.unchanged += 1 + continue + row.cost = cost + row.billing_meters = meters + row.pricing_breakdown = breakdown + result.updated += 1 + last_id = rows[-1].id + # Flush this page's UPDATEs into the (still open) transaction, then detach + # the objects so the session does not accumulate the whole matched set. + await db.flush() + db.expunge_all() + await db.commit() + except SQLAlchemyError: + await db.rollback() + logger.exception("usage set-price failed") + raise + + logger.info( + "usage set-price: matched=%d updated=%d unchanged=%d by_filter=%s", + result.matched, + result.updated, + result.unchanged, + request.by_filter, + ) + return result + + +# Count query used by the dashboard's "select all N matching this filter" affordance +# and the delete/set-price confirm dialogs, so an operator sees how many imported rows +# a filter touches before committing to the mutation. +async def count_imported_matches(db: AsyncSession, selection: UsageSelection) -> int: + conditions = _selection_conditions(selection) + stmt = select(func.count()).select_from(UsageLog).where(*conditions) + return int((await db.execute(stmt)).scalar_one()) diff --git a/src/gateway/static/dashboard/assets/ActivityPage-CuHC0RK1.js b/src/gateway/static/dashboard/assets/ActivityPage-CuHC0RK1.js deleted file mode 100644 index 0d9cbe14..00000000 --- a/src/gateway/static/dashboard/assets/ActivityPage-CuHC0RK1.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./tanstack-query-1t81HyiD.js";import{B as g,c as de,S as ue}from"./heroui-BX6JwHY-.js";import{r,u as me}from"./react-dgEcD0HR.js";import{u as xe,a as he,b as pe,c as ge,d as je,P as fe,E as be,F as ve,e as D}from"./index-d3Tp3DkF.js";import{T as _e,a as Se,b as c,L as Ne,c as ke,d as we,e as d}from"./Table-CLdjdyTx.js";const Fe=new Intl.NumberFormat(void 0,{style:"currency",currency:"USD",maximumFractionDigits:4});function w(t){return t===null?"—":Fe.format(t)}function u(t){return t===null?"—":t.toLocaleString()}function W(t){return t===null?"—":t<1e3?`${t} ms`:`${(t/1e3).toFixed(t<1e4?2:1)} s`}function Pe(t){const a=new Date(t);return Number.isNaN(a.getTime())?t:a.toLocaleString()}function Te(t){const a=new Date(t).getTime();if(Number.isNaN(a))return t;const i=Math.max(0,Math.round((Date.now()-a)/1e3));if(i<60)return`${i}s ago`;const j=Math.round(i/60);if(j<60)return`${j}m ago`;const n=Math.round(j/60);return n<24?`${n}h ago`:`${Math.round(n/24)}d ago`}const Ce=3600,F=86400,Ae=[{label:"Last hour",seconds:Ce},{label:"24h",seconds:F},{label:"7d",seconds:7*F},{label:"All",seconds:null}],Ee=[{label:"All",value:""},{label:"Success",value:"success"},{label:"Error",value:"error"}],S=50;function $(t){return new Date(Date.now()-t*1e3).toISOString()}function De({status:t}){const a=t==="error"?"border-red-200 bg-red-50 text-red-700":"border-[var(--otari-line)] bg-[var(--otari-brand-tint)] text-[var(--otari-brand-dark)]";return e.jsx("span",{className:`inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium ${a}`,children:t})}const $e={gateway:"Gateway",claude_code:"Claude Code",codex:"Codex"};function ye(t){return $e[t]??t}function l({label:t,children:a}){return e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsx("span",{className:"text-[11px] font-medium uppercase tracking-wide text-[var(--otari-muted)]",children:t}),e.jsx("span",{className:"text-sm text-[var(--otari-ink)] break-all",children:a})]})}function Le({entry:t}){var a;return e.jsxs("div",{className:"flex flex-col gap-4 px-4 py-4",children:[t.error_message?e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx("span",{className:"text-[11px] font-medium uppercase tracking-wide text-[var(--otari-muted)]",children:"Error"})}),e.jsx("pre",{className:"max-h-48 overflow-auto rounded-lg border border-red-200 bg-red-50 p-3 text-xs whitespace-pre-wrap break-all text-red-700",children:"The provider returned an error. Inspect gateway logs for details."})]}):null,e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-4",children:[e.jsx(l,{label:"Provider",children:t.provider??"—"}),e.jsx(l,{label:"Endpoint",children:t.endpoint}),e.jsx(l,{label:"Source",children:ye(t.source)}),t.source_label?e.jsx(l,{label:"Session",children:t.source_label}):null,e.jsx(l,{label:"User",children:t.user_id??"—"}),e.jsx(l,{label:"API key",children:t.api_key_id??"—"}),e.jsx(l,{label:"Prompt tokens",children:u(t.prompt_tokens)}),e.jsx(l,{label:"Completion tokens",children:u(t.completion_tokens)}),e.jsx(l,{label:"Total tokens",children:u(t.total_tokens)}),e.jsx(l,{label:"Cost",children:w(t.cost)}),e.jsx(l,{label:"Cache read tokens",children:u(t.cache_read_tokens)}),e.jsx(l,{label:"Cache write tokens",children:u(t.cache_write_tokens)}),e.jsx(l,{label:"1h cache writes",children:u(t.cache_write_1h_tokens??null)}),e.jsx(l,{label:"Total time",children:W(t.latency_ms)}),e.jsx(l,{label:"Request ID",children:t.id})]}),(a=t.pricing_breakdown)!=null&&a.length?e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-[11px] font-medium uppercase tracking-wide text-[var(--otari-muted)]",children:"Billed meters"}),e.jsx("div",{className:"grid gap-2 sm:grid-cols-2 lg:grid-cols-3",children:t.pricing_breakdown.map(i=>e.jsxs(l,{label:i.meter.replaceAll("_"," "),children:[u(i.units)," at ",w(i.rate_per_million)," / 1M, ",w(i.cost)]},i.meter))})]}):null]})}const y=8;function qe(){var Z,J,Q;const t=xe(),a=he(),i=r.useMemo(()=>{const s=new Map;for(const _ of a.data??[])s.set(_.id,_.key_name??`${_.id.slice(0,8)}…`);return s},[a.data]),j=s=>s===null?"—":i.get(s)??`${s.slice(0,8)}…`,[n]=me(),L=n.get("start_date")??void 0,[N,M]=r.useState(L?null:F),[k,P]=r.useState(()=>L??$(F)),[m,U]=r.useState(()=>n.get("status")??""),[o,I]=r.useState(()=>n.get("model")??""),[x,O]=r.useState(()=>n.get("user_id")??""),[h,R]=r.useState(()=>n.get("api_key_id")??""),[f,T]=r.useState(0),[X,ee]=r.useState(null),[B,se]=r.useState(!1),C=r.useMemo(()=>({start_date:k,status:m||void 0,model:o.trim()||void 0,user_id:x||void 0,api_key_id:h||void 0}),[k,m,o,x,h]);r.useEffect(()=>{T(0)},[C]);const p=pe(C,f,S),b=ge(C),te=r.useMemo(()=>({start_date:k,status:m||void 0,user_id:x||void 0,api_key_id:h||void 0}),[k,m,x,h]),A=((J=(Z=je(te,"day").data)==null?void 0:Z.by_model)==null?void 0:J.filter(s=>!s.is_other&&s.key!==null).map(s=>s.key))??[],ae=(a.data??[]).map(s=>({value:s.id,label:s.key_name??`${s.id.slice(0,8)}…`})),v=p.data??[],E=((Q=b.data)==null?void 0:Q.total)??0,q=!!(m||o.trim()||x||h||N!==null),z=[m,o.trim(),x,h].filter(Boolean).length,le=s=>{M(s),P(s===null?void 0:$(s))},re=()=>{M(null),P(void 0),U(""),I(""),O(""),R("")},ie=()=>{N!==null&&P($(N)),p.refetch(),b.refetch()},K=v.length>0,H=K?f*S+1:0,G=f*S+v.length,Y=b.isSuccess&&!b.isPlaceholderData,ne=Y?E===0?"0 of 0":`${H}–${G} of ${E.toLocaleString()}`:K?`${H}–${G}`:"0",oe=Y?(f+1)*Se.jsx(g,{size:"sm",variant:N===s.seconds?"primary":"outline",onPress:()=>le(s.seconds),children:s.label},s.label))}),e.jsxs(g,{size:"sm",variant:"outline",className:"md:hidden",onPress:()=>se(s=>!s),"aria-expanded":B,"aria-controls":"activity-filters",children:["Filters",z?` (${z})`:""]}),e.jsxs("div",{id:"activity-filters",className:de("flex-wrap items-end gap-3 md:flex",B?"flex w-full md:w-auto":"hidden"),children:[e.jsx(ve,{id:"filter-status",label:"Status",value:m,onChange:U,children:Ee.map(s=>e.jsx("option",{value:s.value,children:s.label},s.value))}),e.jsx(D,{label:"API key",value:h,onChange:R,placeholder:"All keys",options:ae}),e.jsx(D,{label:"User",value:x,onChange:O,placeholder:"All users",options:(t.data??[]).map(s=>({value:s.user_id,label:s.alias?`${s.alias} (${s.user_id})`:s.user_id}))}),e.jsx(D,{label:"Model",value:o,onChange:I,allowsCustom:!0,placeholder:"Any model",options:(o&&!A.includes(o)?[o,...A]:A).map(s=>({value:s,label:s}))}),q?e.jsx(g,{size:"sm",variant:"ghost",onPress:re,children:"Clear filters"}):null]})]}),e.jsxs(_e,{children:[e.jsx(Se,{children:e.jsxs("tr",{children:[e.jsx(c,{children:"Time"}),e.jsx(c,{children:"User"}),e.jsx(c,{children:"Model"}),e.jsx(c,{children:"API key"}),e.jsx(c,{className:"text-right",children:"Tokens"}),e.jsx(c,{className:"text-right",children:"Cost"}),e.jsx(c,{className:"text-right",children:"Total time"}),e.jsx(c,{children:"Status"})]})}),e.jsx("tbody",{children:p.isLoading?e.jsx(Ne,{colSpan:y}):v.length===0?e.jsx(ke,{colSpan:y,children:q?"No requests match these filters.":"No requests recorded yet."}):v.map(s=>{const _=s.status==="error",V=X===s.id;return e.jsxs(r.Fragment,{children:[e.jsxs(we,{selected:V,className:_?"bg-red-50":"",onClick:()=>ee(ce=>ce===s.id?null:s.id),children:[e.jsx(d,{className:"text-[var(--otari-muted)]",children:e.jsx("span",{title:Pe(s.timestamp),children:Te(s.timestamp)})}),e.jsx(d,{className:"text-[var(--otari-ink)]",children:s.user_id??"—"}),e.jsx(d,{className:"text-[var(--otari-ink)]",children:s.model}),e.jsx(d,{className:"text-[var(--otari-muted)]",children:j(s.api_key_id)}),e.jsx(d,{className:"text-right tabular-nums",children:u(s.total_tokens)}),e.jsx(d,{className:"text-right tabular-nums",children:w(s.cost)}),e.jsx(d,{className:"text-right tabular-nums",children:W(s.latency_ms)}),e.jsx(d,{children:e.jsx(De,{status:s.status})})]}),V?e.jsx("tr",{className:"border-b border-[var(--otari-line)] bg-[var(--otari-bg)]",children:e.jsx("td",{colSpan:y,children:e.jsx(Le,{entry:s})})}):null]},s.id)})})]}),e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("span",{className:"inline-flex items-center gap-2 text-sm text-[var(--otari-muted)]",children:[ne,p.isFetching?e.jsx(ue,{size:"sm"}):null]}),e.jsxs("span",{className:"inline-flex gap-1.5",children:[e.jsx(g,{size:"sm",variant:"outline",isDisabled:f===0,onPress:()=>T(s=>Math.max(0,s-1)),children:"Previous"}),e.jsx(g,{size:"sm",variant:"outline",isDisabled:!oe,onPress:()=>T(s=>s+1),children:"Next"})]})]})]})}export{qe as ActivityPage}; diff --git a/src/gateway/static/dashboard/assets/ActivityPage-DyhDMr6Q.js b/src/gateway/static/dashboard/assets/ActivityPage-DyhDMr6Q.js new file mode 100644 index 00000000..15ec3982 --- /dev/null +++ b/src/gateway/static/dashboard/assets/ActivityPage-DyhDMr6Q.js @@ -0,0 +1 @@ +import{j as t}from"./tanstack-query-1t81HyiD.js";import{B as _,c as Ce,d as ne}from"./heroui-DZj66Arc.js";import{u as Pe,r as n}from"./react-dgEcD0HR.js";import{u as Ae,a as De,b as Fe,c as oe,d as Ee,e as Me,f as Oe,P as Te,E as Ue,F as ie,g as R}from"./index-D1O_nkKy.js";import{u as Ie,r as Le,B as Re}from"./tableSelection-CLDlIlLU.js";import{C as $e}from"./ConfirmDialog-CSBsET-p.js";import{D as Be}from"./DataTable-mgItq60H.js";import{T as ze,S as Ke}from"./TablePagination-CsvD577_.js";function qe(a){const[l,r]=Pe(),p=n.useCallback(i=>l.get(i)??a[i],[l,a]),s=n.useCallback(i=>{const h=Number.parseInt(l.get(i)??"",10);if(!Number.isNaN(h))return h;const c=Number.parseInt(a[i],10);return Number.isNaN(c)?0:c},[l,a]),g=n.useCallback(i=>{r(h=>{const c=new URLSearchParams(h);for(const[u,f]of Object.entries(i)){const x=String(f);x===""||x===a[u]?c.delete(u):c.set(u,x)}return c},{replace:!0})},[r,a]);return{get:p,getNumber:s,patch:g}}const Ge=new Intl.NumberFormat(void 0,{style:"currency",currency:"USD",maximumFractionDigits:4});function D(a){return a===null?"—":Ge.format(a)}function j(a){return a===null?"—":a.toLocaleString()}function ce(a){return a===null?"—":a<1e3?`${a} ms`:`${(a/1e3).toFixed(a<1e4?2:1)} s`}function He(a){const l=new Date(a);return Number.isNaN(l.getTime())?a:l.toLocaleString()}function We(a){const l=new Date(a).getTime();if(Number.isNaN(l))return a;const r=Math.max(0,Math.round((Date.now()-l)/1e3));if(r<60)return`${r}s ago`;const p=Math.round(r/60);if(p<60)return`${p}m ago`;const s=Math.round(p/60);return s<24?`${s}h ago`:`${Math.round(s/24)}d ago`}const Je=3600,$=86400,z=[{key:"1h",label:"1h",seconds:Je},{key:"24h",label:"24h",seconds:$},{key:"7d",label:"7d",seconds:7*$},{key:"30d",label:"30d",seconds:30*$},{key:"all",label:"All",seconds:null}],de="24h",Ye=[{label:"All",value:""},{label:"Success",value:"success"},{label:"Error",value:"error"}],Ze=[{label:"All",value:""},{label:"Priced",value:"true"},{label:"Unpriced",value:"false"}],Qe=50,Ve={range:de,start_date:"",end_date:"",status:"",model:"",user_id:"",api_key_id:"",priced:"",page:"0",size:String(Qe)};function Xe(a){return new Date(Date.now()-a*1e3).toISOString()}function B(a,l,r){if(l||r)return{start:l||void 0,end:r||void 0};if(a==="custom")return{};const p=z.find(g=>g.key===a)??z.find(g=>g.key===de),s=(p==null?void 0:p.seconds)??null;return{start:s==null?void 0:Xe(s),end:void 0}}function et({status:a}){const l=a==="error"?"border-red-200 bg-red-50 text-red-700":"border-[var(--otari-line)] bg-[var(--otari-brand-tint)] text-[var(--otari-brand-dark)]";return t.jsx("span",{className:`inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium ${l}`,children:a})}const tt={gateway:"Gateway",claude_code:"Claude Code",codex:"Codex"};function at(a){return tt[a]??a}function o({label:a,children:l}){return t.jsxs("div",{className:"flex flex-col gap-0.5",children:[t.jsx("span",{className:"text-[11px] font-medium uppercase tracking-wide text-[var(--otari-muted)]",children:a}),t.jsx("span",{className:"text-sm text-[var(--otari-ink)] break-all",children:l})]})}function st({entry:a}){var l;return t.jsxs("div",{className:"flex flex-col gap-4 px-4 py-4",children:[a.error_message?t.jsxs("div",{className:"flex flex-col gap-1.5",children:[t.jsx("span",{className:"text-[11px] font-medium uppercase tracking-wide text-[var(--otari-muted)]",children:"Error"}),t.jsx("pre",{className:"max-h-48 overflow-auto rounded-lg border border-red-200 bg-red-50 p-3 text-xs whitespace-pre-wrap break-all text-red-700",children:"The provider returned an error. Inspect gateway logs for details."})]}):null,t.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-4",children:[t.jsx(o,{label:"Provider",children:a.provider??"—"}),t.jsx(o,{label:"Endpoint",children:a.endpoint}),t.jsx(o,{label:"Source",children:at(a.source)}),a.source_label?t.jsx(o,{label:"Session",children:a.source_label}):null,t.jsx(o,{label:"User",children:a.user_id??"—"}),t.jsx(o,{label:"API key",children:a.api_key_id??"—"}),t.jsx(o,{label:"Prompt tokens",children:j(a.prompt_tokens)}),t.jsx(o,{label:"Completion tokens",children:j(a.completion_tokens)}),t.jsx(o,{label:"Total tokens",children:j(a.total_tokens)}),t.jsx(o,{label:"Cost",children:D(a.cost)}),t.jsx(o,{label:"Cache read tokens",children:j(a.cache_read_tokens)}),t.jsx(o,{label:"Cache write tokens",children:j(a.cache_write_tokens)}),t.jsx(o,{label:"1h cache writes",children:j(a.cache_write_1h_tokens??null)}),t.jsx(o,{label:"Total time",children:ce(a.latency_ms)}),t.jsx(o,{label:"Request ID",children:a.id})]}),(l=a.pricing_breakdown)!=null&&l.length?t.jsxs("div",{className:"flex flex-col gap-2",children:[t.jsx("span",{className:"text-[11px] font-medium uppercase tracking-wide text-[var(--otari-muted)]",children:"Billed meters"}),t.jsx("div",{className:"grid gap-2 sm:grid-cols-2 lg:grid-cols-3",children:a.pricing_breakdown.map(r=>t.jsxs(o,{label:r.meter.replaceAll("_"," "),children:[j(r.units)," at ",D(r.rate_per_million)," / 1M, ",D(r.cost)]},r.meter))})]}):null]})}function ht(){var ae,se,le,re;const a=Ae(),l=De(),r=n.useMemo(()=>{const e=new Map;for(const w of l.data??[])e.set(w.id,w.key_name??`${w.id.slice(0,8)}…`);return e},[l.data]),p=e=>e===null?"—":r.get(e)??`${e.slice(0,8)}…`,s=qe(Ve),g=s.get("range"),i=s.get("start_date"),h=s.get("end_date"),c=s.get("status"),u=s.get("model"),f=s.get("user_id"),x=s.get("api_key_id"),k=s.get("priced"),K=s.getNumber("page"),F=s.getNumber("size"),[b,q]=n.useState(()=>B(g,i,h));n.useEffect(()=>{q(B(g,i,h))},[g,i,h]);const E=i||h?"custom":g,ue=!!(b.start||b.end),G=k==="true"?!0:k==="false"?!1:void 0,m=n.useMemo(()=>({start_date:b.start,end_date:b.end,status:c||void 0,model:u.trim()||void 0,user_id:f||void 0,api_key_id:x||void 0,priced:G}),[b,c,u,f,x,G]),d=Ie(),C=JSON.stringify(m),H=n.useRef(C);n.useEffect(()=>{H.current!==C&&(H.current=C,s.patch({page:0}),d.clear())},[C,s,d]);const y=Fe(m,K,F),S=oe(m),me=n.useMemo(()=>({start_date:b.start,end_date:b.end,status:c||void 0,user_id:f||void 0,api_key_id:x||void 0}),[b,c,f,x]),M=((se=(ae=Ee(me,"day").data)==null?void 0:ae.by_model)==null?void 0:se.filter(e=>!e.is_other&&e.key!==null).map(e=>e.key))??[],pe=(l.data??[]).map(e=>({value:e.id,label:e.key_name??`${e.id.slice(0,8)}…`})),v=y.data??[],ge=S.isSuccess&&!S.isPlaceholderData?((le=S.data)==null?void 0:le.total)??0:null,W=!!(c||u.trim()||f||x||k||ue),[J,he]=n.useState(!1),Y=[c,k,x,f,u.trim()].filter(Boolean).length,O=n.useMemo(()=>v.filter(e=>!e.counts_toward_budget).map(e=>e.id),[v]),xe=n.useMemo(()=>v.filter(e=>e.counts_toward_budget).map(e=>e.id),[v]),Z=Le(d.selectedKeys,O),N=Z.length,Q=d.allMatching||N>0,fe=n.useMemo(()=>({...m,counts_toward_budget:!1}),[m]),V=oe(fe,Q),P=V.isSuccess?((re=V.data)==null?void 0:re.total)??null:null,be=O.length>0&&N===O.length&&P!=null&&P>N,A=d.allMatching?P??N:N,T=Me(),U=Oe(),[ve,I]=n.useState(!1),[_e,L]=n.useState(!1),[je,X]=n.useState(null),ee=v.find(e=>e.id===je)??null,te=()=>d.allMatching?{by_filter:!0,model:m.model,user_id:m.user_id,api_key_id:m.api_key_id,status:m.status,start_date:m.start_date,end_date:m.end_date,priced:m.priced}:{ids:Z},ye=()=>{T.mutate(te(),{onSuccess:()=>{I(!1),d.clear()}})},ke=e=>{U.mutate({...te(),...e},{onSuccess:()=>{L(!1),d.clear()}})},Se=()=>{s.patch({range:"all",start_date:"",end_date:"",status:"",model:"",user_id:"",api_key_id:"",priced:""})},Ne=()=>{q(B(g,i,h)),y.refetch(),S.refetch()},we=[{id:"time",header:"Time",cell:e=>t.jsx("span",{title:He(e.timestamp),className:"text-[var(--otari-muted)]",children:We(e.timestamp)})},{id:"user",header:"User",cell:e=>e.user_id??"—"},{id:"model",header:"Model",isRowHeader:!0,cell:e=>e.model},{id:"api_key",header:"API key",cell:e=>t.jsx("span",{className:"text-[var(--otari-muted)]",children:p(e.api_key_id)})},{id:"tokens",header:"Tokens",align:"end",cell:e=>j(e.total_tokens)},{id:"cost",header:"Cost",align:"end",cell:e=>D(e.cost)},{id:"latency",header:"Total time",align:"end",cell:e=>ce(e.latency_ms)},{id:"status",header:"Status",cell:e=>t.jsx(et,{status:e.status})}];return t.jsxs("div",{className:"flex flex-col gap-6",children:[t.jsx(Te,{title:"Activity",description:"A per-request log of what the gateway served: tokens, cost, latency, and failures. No request or response content is stored.",action:t.jsx(_,{variant:"outline",onPress:Ne,isDisabled:y.isFetching,children:"Refresh"})}),t.jsx(Ue,{error:y.error??S.error}),t.jsxs("div",{className:"flex flex-wrap items-end gap-3",children:[t.jsxs("div",{className:"flex flex-wrap gap-2",children:[z.map(e=>t.jsx(_,{size:"sm",variant:E===e.key?"primary":"outline",onPress:()=>s.patch({range:e.key,start_date:"",end_date:""}),children:e.label},e.key)),t.jsx(_,{size:"sm",variant:E==="custom"?"primary":"outline",onPress:()=>s.patch({range:"custom"}),children:"Custom…"})]}),E==="custom"?t.jsxs("div",{className:"flex flex-wrap items-end gap-2",children:[t.jsxs("label",{className:"flex flex-col gap-1 text-xs font-medium text-[var(--otari-muted)]",children:["From",t.jsx("input",{type:"datetime-local",value:i,onChange:e=>s.patch({start_date:e.target.value}),className:"rounded-lg border border-[var(--otari-line)] bg-[var(--otari-bg)] px-3 py-2 text-sm text-[var(--otari-ink)] focus:border-[var(--otari-brand)] focus:outline-none"})]}),t.jsxs("label",{className:"flex flex-col gap-1 text-xs font-medium text-[var(--otari-muted)]",children:["To",t.jsx("input",{type:"datetime-local",value:h,onChange:e=>s.patch({end_date:e.target.value}),className:"rounded-lg border border-[var(--otari-line)] bg-[var(--otari-bg)] px-3 py-2 text-sm text-[var(--otari-ink)] focus:border-[var(--otari-brand)] focus:outline-none"})]})]}):null,t.jsxs(_,{size:"sm",variant:"outline",className:"md:hidden",onPress:()=>he(e=>!e),"aria-expanded":J,"aria-controls":"activity-filters",children:["Filters",Y?` (${Y})`:""]}),t.jsxs("div",{id:"activity-filters",className:Ce("flex-wrap items-end gap-3 md:flex",J?"flex w-full md:w-auto":"hidden"),children:[t.jsx(ie,{id:"filter-status",label:"Status",value:c,onChange:e=>s.patch({status:e}),children:Ye.map(e=>t.jsx("option",{value:e.value,children:e.label},e.value))}),t.jsx(ie,{id:"filter-priced",label:"Priced?",value:k,onChange:e=>s.patch({priced:e}),children:Ze.map(e=>t.jsx("option",{value:e.value,children:e.label},e.value))}),t.jsx(R,{label:"API key",value:x,onChange:e=>s.patch({api_key_id:e}),placeholder:"All keys",options:pe}),t.jsx(R,{label:"User",value:f,onChange:e=>s.patch({user_id:e}),placeholder:"All users",options:(a.data??[]).map(e=>({value:e.user_id,label:e.alias?`${e.alias} (${e.user_id})`:e.user_id}))}),t.jsx(R,{label:"Model",value:u,onChange:e=>s.patch({model:e}),allowsCustom:!0,placeholder:"Any model",options:(u&&!M.includes(u)?[u,...M]:M).map(e=>({value:e,label:e}))}),W?t.jsx(_,{size:"sm",variant:"ghost",onPress:Se,children:"Clear filters"}):null]})]}),Q?t.jsxs(Re,{selectedCount:A,allMatching:d.allMatching,matchingTotal:P,canSelectAllMatching:be,onSelectAllMatching:d.enableAllMatching,onClear:d.clear,children:[t.jsx(_,{size:"sm",variant:"primary",onPress:()=>L(!0),children:"Set price"}),t.jsx(_,{size:"sm",variant:"danger",onPress:()=>I(!0),children:"Delete"})]}):null,t.jsx(Be,{ariaLabel:"Activity log",columns:we,rows:v,getRowKey:e=>e.id,isLoading:y.isLoading,emptyContent:W?"No requests match these filters.":"No requests recorded yet.",selectionMode:"multiple",selectedKeys:d.selectedKeys,onSelectionChange:d.onSelectionChange,disabledKeys:xe,onRowAction:e=>X(w=>w===e?null:e),rowClassName:e=>e.status==="error"?"bg-red-50":void 0}),ee?t.jsx(ne,{children:t.jsxs(ne.Content,{className:"p-0",children:[t.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--otari-line)] px-4 py-2",children:[t.jsx("span",{className:"text-sm font-medium text-[var(--otari-ink)]",children:"Request detail"}),t.jsx(_,{size:"sm",variant:"ghost",onPress:()=>X(null),children:"Close"})]}),t.jsx(st,{entry:ee})]})}):null,t.jsx(ze,{page:K,pageSize:F,total:ge,rowsOnPage:v.length,onPageChange:e=>s.patch({page:e}),onPageSizeChange:e=>s.patch({size:e,page:0}),isFetching:y.isFetching,hasNextFallback:v.length===F}),t.jsx($e,{isOpen:ve,onOpenChange:I,heading:"Delete usage rows",body:`Delete ${A.toLocaleString()} imported ${A===1?"row":"rows"}? Only imported rows are removed, and this cannot be undone.`,confirmLabel:"Delete",isPending:T.isPending,error:T.error,onConfirm:ye}),t.jsx(Ke,{isOpen:_e,onOpenChange:L,targetCount:A,isPending:U.isPending,error:U.error,onSubmit:ke})]})}export{ht as ActivityPage}; diff --git a/src/gateway/static/dashboard/assets/AliasesPage-B5d3dytf.js b/src/gateway/static/dashboard/assets/AliasesPage-B5d3dytf.js new file mode 100644 index 00000000..024a8637 --- /dev/null +++ b/src/gateway/static/dashboard/assets/AliasesPage-B5d3dytf.js @@ -0,0 +1 @@ +import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as m,u as L}from"./react-dgEcD0HR.js";import{h as T,i as E,j as M,P as I,E as S,k as A,C as K}from"./index-D1O_nkKy.js";import{u as R,r as F,B as $}from"./tableSelection-CLDlIlLU.js";import{C as q}from"./ConfirmDialog-CSBsET-p.js";import{D as O}from"./DataTable-mgItq60H.js";import{F as V}from"./Field-DEJ6Wjg9.js";import{C as N,L as z,I as H,a as G,b as W,B as h,d as k,f as X}from"./heroui-DZj66Arc.js";const _=50;function P({label:t,value:a,onChange:r,description:n,placeholder:u="provider:model",autoFocus:i,isRequired:d}){const c=T(),{visible:o,total:x,failed:p}=m.useMemo(()=>{var y;const l=a.trim().toLowerCase(),f=((y=c.data)==null?void 0:y.providers)??[],C=f.flatMap(g=>g.models),j=l?C.filter(g=>g.key.toLowerCase().includes(l)):C;return{visible:j.slice(0,_),total:j.length,failed:f.filter(g=>!g.ok)}},[c.data,a]),b=c.isLoading?"Loading models from your providers…":p.length>0?`Could not list models for ${p.map(f=>f.provider).join(", ")}. Check that provider's credentials, or type the model key directly.`:x>o.length?`Showing ${o.length} of ${x} matches. Keep typing to narrow them.`:n;return e.jsxs(N.Root,{allowsCustomValue:!0,allowsEmptyCollection:!0,menuTrigger:"input",inputValue:a,onInputChange:r,onSelectionChange:l=>{l!=null&&r(String(l))},isRequired:d,className:"flex max-w-md flex-col gap-1",children:[e.jsx(z,{className:"text-sm font-medium text-[var(--otari-ink)]",children:t}),e.jsxs(N.InputGroup,{children:[e.jsx(H,{placeholder:u,autoFocus:i}),e.jsx(N.Trigger,{})]}),e.jsx(N.Popover,{children:e.jsx(G,{items:o,className:"max-h-72 overflow-auto",children:l=>e.jsx(W,{id:l.key,textValue:l.key,children:l.key})})}),b?e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:b}):null]})}function J({alias:t,onClose:a}){const r=A(),[n,u]=m.useState(t.target),i=n.trim()!==""&&n.trim()!==t.target,d=()=>{i&&r.mutate({name:t.name,target:n.trim()},{onSuccess:a})};return e.jsx(k,{children:e.jsxs(k.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsxs("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:["Edit alias ",e.jsx("code",{children:t.name})]}),e.jsx(S,{error:r.error}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("span",{className:"text-sm font-medium text-[var(--otari-ink)]",children:"Alias name"}),e.jsx("code",{className:"text-sm text-[var(--otari-muted)]",children:t.name}),e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"The alias name is the key and cannot be changed here. Delete and recreate to rename."})]}),e.jsx(P,{label:"Target",value:n,onChange:u,isRequired:!0,description:"The real model this resolves to. Callers never see it."})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(h,{variant:"primary",isDisabled:!i||r.isPending,onPress:d,children:r.isPending?"Saving…":"Save changes"}),e.jsx(h,{variant:"ghost",onPress:a,children:"Cancel"})]})]})})}function Q({onClose:t,initialTarget:a=""}){const r=A(),[n,u]=m.useState(""),[i,d]=m.useState(a),c=/[:/]/.test(n),o=n.trim()!==""&&i.trim()!==""&&!c,x=()=>{o&&r.mutate({name:n.trim(),target:i.trim()},{onSuccess:t})};return e.jsx(k,{children:e.jsxs(k.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsx("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:"New alias"}),e.jsx(S,{error:r.error}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(V,{label:"Alias name",value:n,onChange:u,placeholder:"fast-model",isRequired:!0,autoFocus:!0,description:c?e.jsx("span",{className:"text-red-700",children:"An alias name cannot contain “:” or “/”."}):"What callers send as `model`."}),e.jsx(P,{label:"Target",value:i,onChange:d,isRequired:!0,description:"The real model this resolves to. Callers never see it."})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(h,{variant:"primary",isDisabled:!o||r.isPending,onPress:x,children:r.isPending?"Creating…":"Create alias"}),e.jsx(h,{variant:"ghost",onPress:t,children:"Cancel"})]})]})})}function ne(){const t=E(),a=M(),[r]=L(),n=r.get("target")??"",[u,i]=m.useState(n!==""),[d,c]=m.useState(null),o=R(),[x,p]=m.useState(!1),[b,l]=m.useState(void 0),[f,C]=m.useState(!1),j=[...t.data??[]].sort((s,B)=>s.name.localeCompare(B.name)),y=j.filter(s=>s.source==="stored").map(s=>s.name),g=j.filter(s=>s.source!=="stored").map(s=>s.name),v=F(o.selectedKeys,y),w=async()=>{C(!0),l(void 0);try{for(const s of v)await a.mutateAsync(s);o.clear(),p(!1)}catch(s){l(s)}finally{C(!1)}},D=[{id:"alias",header:"Alias",isRowHeader:!0,cell:s=>e.jsx("span",{className:"font-medium break-all text-[var(--otari-ink)]",children:s.name})},{id:"target",header:"Target",cell:s=>e.jsx("span",{className:"break-all text-[var(--otari-muted)]",children:s.target})},{id:"source",header:"Source",cell:s=>e.jsx(X,{size:"sm",color:s.source==="stored"?"accent":"default",children:s.source})},{id:"actions",header:"Actions",align:"end",cell:s=>s.source==="stored"?e.jsxs("span",{className:"inline-flex items-center gap-2 whitespace-nowrap",children:[e.jsx(h,{size:"sm",variant:"ghost",onPress:()=>{i(!1),c(s)},children:"Edit"}),e.jsx(K,{confirmLabel:"Delete",isPending:a.isPending,onConfirm:()=>a.mutate(s.name),children:"Delete"})]}):e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"set in config.yml"})}];return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(I,{title:"Aliases",description:"Friendly names that map to a real provider:model. Callers send the alias as the model; pricing, budgets, and usage key on the target.",action:u||d?null:e.jsx(h,{variant:"primary",onPress:()=>{c(null),i(!0)},children:"New alias"})}),e.jsx(S,{error:t.error}),u?e.jsx(Q,{initialTarget:n,onClose:()=>i(!1)}):null,d?e.jsx(J,{alias:d,onClose:()=>c(null)}):null,a.error?e.jsx(S,{error:a.error}):null,v.length>0?e.jsx($,{selectedCount:v.length,allMatching:!1,matchingTotal:null,canSelectAllMatching:!1,onSelectAllMatching:()=>{},onClear:o.clear,children:e.jsx(h,{size:"sm",variant:"danger",onPress:()=>p(!0),children:"Delete"})}):null,e.jsx(O,{ariaLabel:"Aliases",columns:D,rows:j,getRowKey:s=>s.name,isLoading:t.isLoading,emptyContent:"No aliases yet. Create one to give a model a friendly name.",selectionMode:"multiple",selectedKeys:o.selectedKeys,onSelectionChange:o.onSelectionChange,disabledKeys:g}),e.jsx(q,{isOpen:x,onOpenChange:p,heading:"Delete aliases",body:`Delete ${v.length} stored ${v.length===1?"alias":"aliases"}? Callers using ${v.length===1?"it":"them"} will get a model-not-found error.`,confirmLabel:"Delete",isPending:f,error:b,onConfirm:w})]})}export{ne as AliasesPage}; diff --git a/src/gateway/static/dashboard/assets/AliasesPage-BqLd7LKr.js b/src/gateway/static/dashboard/assets/AliasesPage-BqLd7LKr.js deleted file mode 100644 index 3a4f1ea0..00000000 --- a/src/gateway/static/dashboard/assets/AliasesPage-BqLd7LKr.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as x,u as w}from"./react-dgEcD0HR.js";import{f as L,g as E,h as B,P as D,E as N,C as I,i as M,j as A}from"./index-d3Tp3DkF.js";import{F}from"./Field-HzRk1KDP.js";import{C as j,L as R,I as q,a as V,b as H,B as h,f as $,d as C}from"./heroui-BX6JwHY-.js";import{T as z,a as G,d as T,b as f,L as K,c as W,e as v}from"./Table-CLdjdyTx.js";const X=50;function k({label:t,value:n,onChange:a,description:r,placeholder:m="provider:model",autoFocus:i,isRequired:c}){const l=L(),{visible:d,total:s,failed:g}=x.useMemo(()=>{var S;const o=n.trim().toLowerCase(),p=((S=l.data)==null?void 0:S.providers)??[],y=p.flatMap(u=>u.models),P=o?y.filter(u=>u.key.toLowerCase().includes(o)):y;return{visible:P.slice(0,X),total:P.length,failed:p.filter(u=>!u.ok)}},[l.data,n]),b=l.isLoading?"Loading models from your providers…":g.length>0?`Could not list models for ${g.map(p=>p.provider).join(", ")}. Check that provider's credentials, or type the model key directly.`:s>d.length?`Showing ${d.length} of ${s} matches. Keep typing to narrow them.`:r;return e.jsxs(j.Root,{allowsCustomValue:!0,allowsEmptyCollection:!0,menuTrigger:"input",inputValue:n,onInputChange:a,onSelectionChange:o=>{o!=null&&a(String(o))},isRequired:c,className:"flex max-w-md flex-col gap-1",children:[e.jsx(R,{className:"text-sm font-medium text-[var(--otari-ink)]",children:t}),e.jsxs(j.InputGroup,{children:[e.jsx(q,{placeholder:m,autoFocus:i}),e.jsx(j.Trigger,{})]}),e.jsx(j.Popover,{children:e.jsx(V,{items:d,className:"max-h-72 overflow-auto",children:o=>e.jsx(H,{id:o.key,textValue:o.key,children:o.key})})}),b?e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:b}):null]})}function _({alias:t,onClose:n}){const a=A(),[r,m]=x.useState(t.target),i=r.trim()!==""&&r.trim()!==t.target,c=()=>{i&&a.mutate({name:t.name,target:r.trim()},{onSuccess:n})};return e.jsx(C,{children:e.jsxs(C.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsxs("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:["Edit alias ",e.jsx("code",{children:t.name})]}),e.jsx(N,{error:a.error}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("span",{className:"text-sm font-medium text-[var(--otari-ink)]",children:"Alias name"}),e.jsx("code",{className:"text-sm text-[var(--otari-muted)]",children:t.name}),e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"The alias name is the key and cannot be changed here. Delete and recreate to rename."})]}),e.jsx(k,{label:"Target",value:r,onChange:m,isRequired:!0,description:"The real model this resolves to. Callers never see it."})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(h,{variant:"primary",isDisabled:!i||a.isPending,onPress:c,children:a.isPending?"Saving…":"Save changes"}),e.jsx(h,{variant:"ghost",onPress:n,children:"Cancel"})]})]})})}function J({onClose:t,initialTarget:n=""}){const a=A(),[r,m]=x.useState(""),[i,c]=x.useState(n),l=/[:/]/.test(r),d=r.trim()!==""&&i.trim()!==""&&!l,s=()=>{d&&a.mutate({name:r.trim(),target:i.trim()},{onSuccess:t})};return e.jsx(C,{children:e.jsxs(C.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsx("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:"New alias"}),e.jsx(N,{error:a.error}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(F,{label:"Alias name",value:r,onChange:m,placeholder:"fast-model",isRequired:!0,autoFocus:!0,description:l?e.jsx("span",{className:"text-red-700",children:"An alias name cannot contain “:” or “/”."}):"What callers send as `model`."}),e.jsx(k,{label:"Target",value:i,onChange:c,isRequired:!0,description:"The real model this resolves to. Callers never see it."})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(h,{variant:"primary",isDisabled:!d||a.isPending,onPress:s,children:a.isPending?"Creating…":"Create alias"}),e.jsx(h,{variant:"ghost",onPress:t,children:"Cancel"})]})]})})}function se(){const t=E(),n=B(),[a]=w(),r=a.get("target")??"",[m,i]=x.useState(r!==""),[c,l]=x.useState(null),d=[...t.data??[]].sort((s,g)=>s.name.localeCompare(g.name));return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(D,{title:"Aliases",description:"Friendly names that map to a real provider:model. Callers send the alias as the model; pricing, budgets, and usage key on the target.",action:m||c?null:e.jsx(h,{variant:"primary",onPress:()=>{l(null),i(!0)},children:"New alias"})}),e.jsx(N,{error:t.error}),m?e.jsx(J,{initialTarget:r,onClose:()=>i(!1)}):null,c?e.jsx(_,{alias:c,onClose:()=>l(null)}):null,e.jsxs(z,{children:[e.jsx(G,{children:e.jsxs(T,{children:[e.jsx(f,{children:"Alias"}),e.jsx(f,{children:"Target"}),e.jsx(f,{children:"Source"}),e.jsx(f,{className:"text-right",children:"Actions"})]})}),e.jsx("tbody",{children:t.isLoading?e.jsx(K,{colSpan:4}):d.length===0?e.jsx(W,{colSpan:4,children:"No aliases yet. Create one to give a model a friendly name."}):d.map(s=>e.jsxs(T,{children:[e.jsx(v,{className:"font-medium break-all text-[var(--otari-ink)]",children:s.name}),e.jsx(v,{className:"break-all text-[var(--otari-muted)]",children:s.target}),e.jsx(v,{children:e.jsx($,{size:"sm",color:s.source==="stored"?"accent":"default",children:s.source})}),e.jsx(v,{className:"text-right whitespace-nowrap",children:s.source==="stored"?e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx(h,{size:"sm",variant:"ghost",onPress:()=>{i(!1),l(s)},children:"Edit"}),e.jsx(I,{confirmLabel:"Delete",isPending:n.isPending,onConfirm:()=>n.mutate(s.name),children:"Delete"}),n.error?e.jsx("span",{className:"text-xs text-red-700",children:M(n.error)}):null]}):e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"set in config.yml"})})]},s.name))})]})]})}export{se as AliasesPage}; diff --git a/src/gateway/static/dashboard/assets/BudgetsPage-Bg0Es-aw.js b/src/gateway/static/dashboard/assets/BudgetsPage-Bg0Es-aw.js deleted file mode 100644 index 2a4c3a8f..00000000 --- a/src/gateway/static/dashboard/assets/BudgetsPage-Bg0Es-aw.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as d}from"./react-dgEcD0HR.js";import{k as G,u as K,l as Q,m as X,n as J,o as Z,P as ee,E as T,I as se,p as te}from"./index-d3Tp3DkF.js";import{F as I}from"./Field-HzRk1KDP.js";import{T as re,a as ae,b as S,L as ne,c as ie,d as le,e as C}from"./Table-CLdjdyTx.js";import{C as E,I as de,a as oe,b as ue,B as h,d as B,S as ce}from"./heroui-BX6JwHY-.js";const me=50;function xe({value:s,onChange:a,users:r,label:i,description:l}){const[m,x]=d.useState(""),o=d.useMemo(()=>r.filter(t=>!t.user_id.startsWith("apikey-")).map(t=>({id:t.user_id,label:t.alias?`${t.user_id} (${t.alias})`:t.user_id})),[r]),p=d.useMemo(()=>{const t=m.trim().toLowerCase();return o.filter(u=>!s.includes(u.id)).filter(u=>!t||u.id.toLowerCase().includes(t)||u.label.toLowerCase().includes(t)).slice(0,me)},[o,s,m]),c=t=>{s.includes(t)||a([...s,t]),x("")},g=t=>a(s.filter(u=>u!==t));return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-sm font-medium text-[var(--otari-ink)]",children:i}),l?e.jsx("p",{className:"text-xs text-[var(--otari-muted)]",children:l}):null]}),s.length>0?e.jsx("div",{className:"flex flex-wrap gap-1.5",children:s.map(t=>e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-[var(--otari-brand-tint)] px-2.5 py-1 font-mono text-xs text-[var(--otari-brand-dark)]",children:[t,e.jsx("button",{type:"button","aria-label":`Remove ${t}`,onClick:()=>g(t),className:"text-[var(--otari-brand-dark)] hover:text-red-700",children:"×"})]},t))}):null,o.length===0?e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"No users yet. Create users first, then assign them here or from the Users page."}):e.jsxs(E.Root,{allowsEmptyCollection:!0,menuTrigger:"input",inputValue:m,onInputChange:x,selectedKey:null,onSelectionChange:t=>{t!=null&&c(String(t))},className:"flex flex-col gap-1",children:[e.jsxs(E.InputGroup,{children:[e.jsx(de,{"aria-label":"Add a user",placeholder:"Search users…",autoComplete:"off"}),e.jsx(E.Trigger,{})]}),e.jsx(E.Popover,{children:e.jsx(oe,{items:p,className:"max-h-72 overflow-auto",children:t=>e.jsx(ue,{id:t.id,textValue:t.label,children:t.label})})})]})]})}const ge=new Intl.NumberFormat(void 0,{style:"currency",currency:"USD",maximumFractionDigits:2});function P(s){return ge.format(s)}const N=86400,$=3600,R=[{label:"No reset",seconds:null},{label:"Daily",seconds:N},{label:"Weekly",seconds:7*N},{label:"Monthly",seconds:30*N}];function he(s){if(s===null)return"No reset";const a=R.find(r=>r.seconds===s);return a?a.label:s%N===0?`Every ${s/N} days`:s%$===0?`Every ${s/$} hours`:`Every ${s}s`}function F(s){if(!s)return"—";const a=new Date(s);return Number.isNaN(a.getTime())?"—":a.toLocaleString()}function pe(s){const a=s.trim();if(a==="")return{value:null,valid:!0};const r=Number(a);return!Number.isFinite(r)||r<0?{value:null,valid:!1}:{value:r,valid:!0}}function O(s){return s!==null&&s%N===0?String(s/N):""}function fe({value:s,onChange:a,onInvalidChange:r}){const i=R.some(t=>t.seconds===s),[l,m]=d.useState(!i),[x,o]=d.useState(()=>O(s)),p=x.trim(),c=Number(p),g=p!==""&&(!Number.isSafeInteger(c)||c<=0);return d.useEffect(()=>{r==null||r(g)},[g,r]),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-sm font-medium text-[var(--otari-ink)]",children:"Reset period"}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[R.map(t=>e.jsx(h,{size:"sm",variant:!l&&s===t.seconds?"primary":"outline",onPress:()=>{m(!1),o(O(t.seconds)),a(t.seconds)},children:t.label},t.label)),e.jsx(h,{size:"sm",variant:l?"primary":"outline",onPress:()=>m(!0),children:"Custom"})]}),l?e.jsx("div",{className:"flex items-end gap-2",children:e.jsx(I,{label:"Every N days",value:x,onChange:t=>{o(t);const u=Number(t.trim());a(t.trim()===""||!Number.isSafeInteger(u)||u<=0?null:u*N)},placeholder:"14",description:g?e.jsx("span",{className:"text-red-700",children:"Enter a whole number of days."}):"Whole days between resets."})}):null,e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Spend returns to zero each period. A user’s clock starts when the budget is assigned to them."})]})}function H({title:s,submitLabel:a,initial:r,error:i,isPending:l,onSubmit:m,onClose:x,assignUsers:o}){const[p,c]=d.useState(r.name??""),[g,t]=d.useState(r.max_budget===null?"":String(r.max_budget)),[u,b]=d.useState(r.budget_duration_sec),[_,y]=d.useState(!1),[U,D]=d.useState([]),v=pe(g),w=!l&&v.valid&&!_,f=()=>{w&&m({name:p.trim()||null,max_budget:v.value,budget_duration_sec:u},U)};return e.jsx(B,{children:e.jsxs(B.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsx("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:s}),e.jsx(T,{error:i}),e.jsx(I,{label:"Name (optional)",value:p,onChange:c,autoFocus:!0,placeholder:"team-free-tier",description:"A label to recognize this budget later."}),e.jsx(I,{label:"Spending limit (USD)",value:g,onChange:t,placeholder:"100.00",description:v.valid?"The most a single user on this budget may spend per period. Leave blank for no limit.":e.jsx("span",{className:"text-red-700",children:"Enter a non-negative number, or leave blank for no limit."})}),e.jsx(fe,{value:u,onChange:b,onInvalidChange:y}),o?e.jsx(xe,{label:"Assign to users (optional)",description:"Attach this budget to existing users now. You can also manage assignments later on the Users page.",value:U,onChange:D,users:o}):null,e.jsxs("div",{className:"flex gap-2",children:[e.jsx(h,{variant:"primary",isDisabled:!w,onPress:f,children:l?"Saving…":a}),e.jsx(h,{variant:"ghost",isDisabled:l,onPress:x,children:"Cancel"})]})]})})}function je({budget:s}){if(s.user_count===0)return e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"No users assigned"});const a=s.total_spend;if(s.max_budget===null)return e.jsxs("span",{className:"text-xs text-[var(--otari-ink)]",children:[P(a)," spent",e.jsx("span",{className:"text-[var(--otari-muted)]",children:" · no limit"})]});const r=s.max_budget*s.user_count,i=r>0?Math.min(100,a/r*100):0,l=a>r;return e.jsxs("div",{className:"flex min-w-[140px] flex-col gap-1",children:[e.jsxs("div",{className:"flex items-baseline justify-between gap-2 text-xs",children:[e.jsx("span",{className:"text-[var(--otari-ink)]",children:P(a)}),e.jsxs("span",{className:"text-[var(--otari-muted)]",children:["of ",P(r)]})]}),e.jsx("div",{className:"h-1.5 w-full overflow-hidden rounded-full bg-[var(--otari-line)]",role:"progressbar","aria-valuenow":Math.round(i),"aria-valuemin":0,"aria-valuemax":100,"aria-label":"Aggregate spend against total allocation",children:e.jsx("div",{className:`h-full rounded-full ${l?"bg-red-500":"bg-[var(--otari-brand)]"}`,style:{width:`${Math.max(i,l?100:2)}%`}})})]})}function be({budgetId:s}){const a=te(s);if(a.isLoading)return e.jsxs("div",{className:"flex items-center gap-2 px-4 py-4 text-sm text-[var(--otari-muted)]",children:[e.jsx(ce,{size:"sm"})," Loading reset history…"]});if(a.error)return e.jsx("div",{className:"px-4 py-4",children:e.jsx(T,{error:a.error})});const r=a.data??[];return r.length===0?e.jsx("div",{className:"px-4 py-4 text-sm text-[var(--otari-muted)]",children:"No resets recorded yet for this budget."}):e.jsx("div",{className:"overflow-x-auto px-4 py-3",children:e.jsxs("table",{className:"w-full border-collapse text-xs",children:[e.jsx("thead",{className:"text-left text-[var(--otari-muted)]",children:e.jsxs("tr",{children:[e.jsx("th",{className:"py-1.5 pr-4 font-medium",children:"User"}),e.jsx("th",{className:"py-1.5 pr-4 font-medium",children:"Spend cleared"}),e.jsx("th",{className:"py-1.5 pr-4 font-medium",children:"Reset at"}),e.jsx("th",{className:"py-1.5 font-medium",children:"Next reset"})]})}),e.jsx("tbody",{children:r.map(i=>e.jsxs("tr",{className:"border-t border-[var(--otari-line)]",children:[e.jsx("td",{className:"py-1.5 pr-4",children:e.jsx("code",{children:i.user_id??"—"})}),e.jsx("td",{className:"py-1.5 pr-4 text-[var(--otari-ink)]",children:P(i.previous_spend)}),e.jsx("td",{className:"py-1.5 pr-4 text-[var(--otari-muted)]",children:F(i.reset_at)}),e.jsx("td",{className:"py-1.5 text-[var(--otari-muted)]",children:F(i.next_reset_at)})]},i.id))})]})})}function ve({onCreate:s}){return e.jsx(B,{children:e.jsxs(B.Content,{className:"flex flex-col gap-4 p-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold text-[var(--otari-ink)]",children:"No budgets yet"}),e.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:"A budget caps how much a user may spend and, optionally, resets that spend on a schedule. Create one, then assign it to users to enforce a limit."})]}),e.jsx("div",{children:e.jsx(h,{variant:"primary",onPress:s,children:"Create your first budget"})})]})})}function Ne({label:s,isPending:a,onConfirm:r}){const[i,l]=d.useState(!1);return i?e.jsxs("div",{className:"flex flex-col items-end gap-1.5 rounded-lg border border-amber-200 bg-amber-50 p-2 text-right",children:[e.jsxs("span",{className:"max-w-xs text-xs text-amber-800",children:["Delete ",e.jsx("strong",{children:s}),"? Users keep their spend but lose this limit. Cannot be undone."]}),e.jsxs("span",{className:"inline-flex gap-1",children:[e.jsx(h,{size:"sm",variant:"danger",isDisabled:a,onPress:r,children:"Delete permanently"}),e.jsx(h,{size:"sm",variant:"ghost",isDisabled:a,onPress:()=>l(!1),children:"Cancel"})]})]}):e.jsx(h,{size:"sm",variant:"danger-soft",onPress:()=>l(!0),children:"Delete"})}function W(s){return s.split("-")[0]}function V(s){return s.name??W(s.budget_id)}function Ue(){const s=G(),a=K(),r=Q(),i=X(),l=J(),m=Z(),[x,o]=d.useState(!1),[p,c]=d.useState(null),[g,t]=d.useState(null),[u,b]=d.useState(null),[_,y]=d.useState(null),[U,D]=d.useState(!1),v=s.data??[],w=s.isLoading,f=v.find(n=>n.budget_id===p)??null,z=!w&&v.length===0&&!x,M=async(n,j)=>{D(!0),b(null);const A=await Promise.allSettled(j.map(L=>m.mutateAsync({id:L,body:{budget_id:n}})));D(!1);const k=A.flatMap((L,Y)=>L.status==="rejected"?[j[Y]]:[]);if(k.length>0){y({budgetId:n,userIds:k}),b(new Error(`Budget created, but could not assign it to: ${k.join(", ")}. Retry to try again.`));return}y(null),o(!1)},q=(n,j)=>{if(_){M(_.budgetId,_.userIds);return}b(null),r.mutate(n,{onSuccess:async A=>{if(j.length>0){await M(A.budget_id,j);return}o(!1)}})};return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(ee,{title:"Budgets",description:"Define spending limits and reset schedules. Assign a budget to users to enforce it.",action:x||z?null:e.jsx(h,{variant:"primary",onPress:()=>{c(null),b(null),y(null),o(!0)},children:"Create budget"})}),e.jsx(T,{error:s.error??r.error??i.error??l.error??m.error}),e.jsx(se,{children:"Assign a budget to users when you create it, or later from the Users page. Each row’s usage aggregates the spend of the users currently on that budget."}),z?e.jsx(ve,{onCreate:()=>{c(null),b(null),y(null),o(!0)}}):null,x?e.jsx(H,{title:"Create budget",submitLabel:_?"Retry assignments":"Create budget",initial:{name:null,max_budget:null,budget_duration_sec:null},error:r.error??u,isPending:r.isPending||U,assignUsers:a.data??[],onSubmit:q,onClose:()=>{b(null),y(null),o(!1)}}):null,f?e.jsx(H,{title:`Edit budget ${V(f)}`,submitLabel:"Save changes",initial:{name:f.name,max_budget:f.max_budget,budget_duration_sec:f.budget_duration_sec},error:i.error,isPending:i.isPending,onSubmit:n=>i.mutate({id:f.budget_id,body:n},{onSuccess:()=>c(null)}),onClose:()=>c(null)},f.budget_id):null,e.jsxs(re,{children:[e.jsx(ae,{children:e.jsxs("tr",{children:[e.jsx(S,{children:"Budget"}),e.jsx(S,{children:"Limit (per user)"}),e.jsx(S,{children:"Reset"}),e.jsx(S,{children:"Users"}),e.jsx(S,{children:"Usage"}),e.jsx(S,{className:"text-right",children:"Actions"})]})}),e.jsx("tbody",{children:w?e.jsx(ne,{colSpan:6}):v.length===0?e.jsx(ie,{colSpan:6,children:"No budgets yet. Create one to cap spending."}):v.map(n=>e.jsxs(d.Fragment,{children:[e.jsxs(le,{selected:p===n.budget_id,onClick:()=>{o(!1),c(n.budget_id)},children:[e.jsx(C,{className:"font-medium text-[var(--otari-ink)]",children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsx("span",{children:n.name??e.jsx("span",{className:"text-[var(--otari-muted)]",children:"(unnamed)"})}),e.jsx("code",{className:"text-[11px] text-[var(--otari-muted)]",title:n.budget_id,children:W(n.budget_id)})]})}),e.jsx(C,{children:n.max_budget===null?e.jsx("span",{className:"text-[var(--otari-muted)]",children:"Unlimited"}):P(n.max_budget)}),e.jsx(C,{className:"text-[var(--otari-muted)]",children:he(n.budget_duration_sec)}),e.jsx(C,{className:"text-[var(--otari-muted)]",children:n.user_count}),e.jsx(C,{children:e.jsx(je,{budget:n})}),e.jsx(C,{children:e.jsxs("div",{className:"flex items-center justify-end gap-1.5",onClick:j=>j.stopPropagation(),children:[e.jsx(h,{size:"sm",variant:"ghost",onPress:()=>t(j=>j===n.budget_id?null:n.budget_id),children:g===n.budget_id?"Hide history":"History"}),e.jsx(h,{size:"sm",variant:"ghost",onPress:()=>{o(!1),c(n.budget_id)},children:"Edit"}),e.jsx(Ne,{label:V(n),isPending:l.isPending,onConfirm:()=>l.mutate(n.budget_id)})]})})]}),g===n.budget_id?e.jsx("tr",{className:"border-b border-[var(--otari-line)] bg-[var(--otari-bg)]",children:e.jsx("td",{colSpan:6,children:e.jsx(be,{budgetId:n.budget_id})})}):null]},n.budget_id))})]})]})}export{Ue as BudgetsPage}; diff --git a/src/gateway/static/dashboard/assets/BudgetsPage-Dnhf8Nve.js b/src/gateway/static/dashboard/assets/BudgetsPage-Dnhf8Nve.js new file mode 100644 index 00000000..73d25fa9 --- /dev/null +++ b/src/gateway/static/dashboard/assets/BudgetsPage-Dnhf8Nve.js @@ -0,0 +1 @@ +import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as o}from"./react-dgEcD0HR.js";import{l as re,u as ae,m as le,n as ie,o as oe,p as de,P as ue,E as O,I as ce,q as me}from"./index-D1O_nkKy.js";import{u as xe,r as ge,B as he}from"./tableSelection-CLDlIlLU.js";import{C as pe}from"./ConfirmDialog-CSBsET-p.js";import{D as fe}from"./DataTable-mgItq60H.js";import{F as $}from"./Field-DEJ6Wjg9.js";import{C as E,I as be,a as je,b as ve,B as c,d as C,S as ye}from"./heroui-DZj66Arc.js";const Ne=50;function Se({value:t,onChange:a,users:r,label:l,description:i}){const[x,g]=o.useState(""),d=o.useMemo(()=>r.filter(s=>!s.user_id.startsWith("apikey-")).map(s=>({id:s.user_id,label:s.alias?`${s.user_id} (${s.alias})`:s.user_id})),[r]),p=o.useMemo(()=>{const s=x.trim().toLowerCase();return d.filter(u=>!t.includes(u.id)).filter(u=>!s||u.id.toLowerCase().includes(s)||u.label.toLowerCase().includes(s)).slice(0,Ne)},[d,t,x]),m=s=>{t.includes(s)||a([...t,s]),g("")},h=s=>a(t.filter(u=>u!==s));return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-sm font-medium text-[var(--otari-ink)]",children:l}),i?e.jsx("p",{className:"text-xs text-[var(--otari-muted)]",children:i}):null]}),t.length>0?e.jsx("div",{className:"flex flex-wrap gap-1.5",children:t.map(s=>e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-[var(--otari-brand-tint)] px-2.5 py-1 font-mono text-xs text-[var(--otari-brand-dark)]",children:[s,e.jsx("button",{type:"button","aria-label":`Remove ${s}`,onClick:()=>h(s),className:"text-[var(--otari-brand-dark)] hover:text-red-700",children:"×"})]},s))}):null,d.length===0?e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"No users yet. Create users first, then assign them here or from the Users page."}):e.jsxs(E.Root,{allowsEmptyCollection:!0,menuTrigger:"input",inputValue:x,onInputChange:g,selectedKey:null,onSelectionChange:s=>{s!=null&&m(String(s))},className:"flex flex-col gap-1",children:[e.jsxs(E.InputGroup,{children:[e.jsx(be,{"aria-label":"Add a user",placeholder:"Search users…",autoComplete:"off"}),e.jsx(E.Trigger,{})]}),e.jsx(E.Popover,{children:e.jsx(je,{items:p,className:"max-h-72 overflow-auto",children:s=>e.jsx(ve,{id:s.id,textValue:s.label,children:s.label})})})]})]})}const _e=new Intl.NumberFormat(void 0,{style:"currency",currency:"USD",maximumFractionDigits:2});function P(t){return _e.format(t)}const j=86400,q=3600,z=[{label:"No reset",seconds:null},{label:"Daily",seconds:j},{label:"Weekly",seconds:7*j},{label:"Monthly",seconds:30*j}];function Ce(t){if(t===null)return"No reset";const a=z.find(r=>r.seconds===t);return a?a.label:t%j===0?`Every ${t/j} days`:t%q===0?`Every ${t/q} hours`:`Every ${t}s`}function W(t){if(!t)return"—";const a=new Date(t);return Number.isNaN(a.getTime())?"—":a.toLocaleString()}function we(t){const a=t.trim();if(a==="")return{value:null,valid:!0};const r=Number(a);return!Number.isFinite(r)||r<0?{value:null,valid:!1}:{value:r,valid:!0}}function Y(t){return t!==null&&t%j===0?String(t/j):""}function De({value:t,onChange:a,onInvalidChange:r}){const l=z.some(s=>s.seconds===t),[i,x]=o.useState(!l),[g,d]=o.useState(()=>Y(t)),p=g.trim(),m=Number(p),h=p!==""&&(!Number.isSafeInteger(m)||m<=0);return o.useEffect(()=>{r==null||r(h)},[h,r]),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-sm font-medium text-[var(--otari-ink)]",children:"Reset period"}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[z.map(s=>e.jsx(c,{size:"sm",variant:!i&&t===s.seconds?"primary":"outline",onPress:()=>{x(!1),d(Y(s.seconds)),a(s.seconds)},children:s.label},s.label)),e.jsx(c,{size:"sm",variant:i?"primary":"outline",onPress:()=>x(!0),children:"Custom"})]}),i?e.jsx("div",{className:"flex items-end gap-2",children:e.jsx($,{label:"Every N days",value:g,onChange:s=>{d(s);const u=Number(s.trim());a(s.trim()===""||!Number.isSafeInteger(u)||u<=0?null:u*j)},placeholder:"14",description:h?e.jsx("span",{className:"text-red-700",children:"Enter a whole number of days."}):"Whole days between resets."})}):null,e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Spend returns to zero each period. A user’s clock starts when the budget is assigned to them."})]})}function G({title:t,submitLabel:a,initial:r,error:l,isPending:i,onSubmit:x,onClose:g,assignUsers:d}){const[p,m]=o.useState(r.name??""),[h,s]=o.useState(r.max_budget===null?"":String(r.max_budget)),[u,b]=o.useState(r.budget_duration_sec),[S,v]=o.useState(!1),[B,k]=o.useState([]),f=we(h),A=!i&&f.valid&&!S,w=()=>{A&&x({name:p.trim()||null,max_budget:f.value,budget_duration_sec:u},B)};return e.jsx(C,{children:e.jsxs(C.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsx("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:t}),e.jsx(O,{error:l}),e.jsx($,{label:"Name (optional)",value:p,onChange:m,autoFocus:!0,placeholder:"team-free-tier",description:"A label to recognize this budget later."}),e.jsx($,{label:"Spending limit (USD)",value:h,onChange:s,placeholder:"100.00",description:f.valid?"The most a single user on this budget may spend per period. Leave blank for no limit.":e.jsx("span",{className:"text-red-700",children:"Enter a non-negative number, or leave blank for no limit."})}),e.jsx(De,{value:u,onChange:b,onInvalidChange:v}),d?e.jsx(Se,{label:"Assign to users (optional)",description:"Attach this budget to existing users now. You can also manage assignments later on the Users page.",value:B,onChange:k,users:d}):null,e.jsxs("div",{className:"flex gap-2",children:[e.jsx(c,{variant:"primary",isDisabled:!A,onPress:w,children:i?"Saving…":a}),e.jsx(c,{variant:"ghost",isDisabled:i,onPress:g,children:"Cancel"})]})]})})}function Pe({budget:t}){if(t.user_count===0)return e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"No users assigned"});const a=t.total_spend;if(t.max_budget===null)return e.jsxs("span",{className:"text-xs text-[var(--otari-ink)]",children:[P(a)," spent",e.jsx("span",{className:"text-[var(--otari-muted)]",children:" · no limit"})]});const r=t.max_budget*t.user_count,l=r>0?Math.min(100,a/r*100):0,i=a>r;return e.jsxs("div",{className:"flex min-w-[140px] flex-col gap-1",children:[e.jsxs("div",{className:"flex items-baseline justify-between gap-2 text-xs",children:[e.jsx("span",{className:"text-[var(--otari-ink)]",children:P(a)}),e.jsxs("span",{className:"text-[var(--otari-muted)]",children:["of ",P(r)]})]}),e.jsx("div",{className:"h-1.5 w-full overflow-hidden rounded-full bg-[var(--otari-line)]",role:"progressbar","aria-valuenow":Math.round(l),"aria-valuemin":0,"aria-valuemax":100,"aria-label":"Aggregate spend against total allocation",children:e.jsx("div",{className:`h-full rounded-full ${i?"bg-red-500":"bg-[var(--otari-brand)]"}`,style:{width:`${Math.max(l,i?100:2)}%`}})})]})}function Be({budgetId:t}){const a=me(t);if(a.isLoading)return e.jsxs("div",{className:"flex items-center gap-2 px-4 py-4 text-sm text-[var(--otari-muted)]",children:[e.jsx(ye,{size:"sm"})," Loading reset history…"]});if(a.error)return e.jsx("div",{className:"px-4 py-4",children:e.jsx(O,{error:a.error})});const r=a.data??[];return r.length===0?e.jsx("div",{className:"px-4 py-4 text-sm text-[var(--otari-muted)]",children:"No resets recorded yet for this budget."}):e.jsx("div",{className:"overflow-x-auto px-4 py-3",children:e.jsxs("table",{className:"w-full border-collapse text-xs",children:[e.jsx("thead",{className:"text-left text-[var(--otari-muted)]",children:e.jsxs("tr",{children:[e.jsx("th",{className:"py-1.5 pr-4 font-medium",children:"User"}),e.jsx("th",{className:"py-1.5 pr-4 font-medium",children:"Spend cleared"}),e.jsx("th",{className:"py-1.5 pr-4 font-medium",children:"Reset at"}),e.jsx("th",{className:"py-1.5 font-medium",children:"Next reset"})]})}),e.jsx("tbody",{children:r.map(l=>e.jsxs("tr",{className:"border-t border-[var(--otari-line)]",children:[e.jsx("td",{className:"py-1.5 pr-4",children:e.jsx("code",{children:l.user_id??"—"})}),e.jsx("td",{className:"py-1.5 pr-4 text-[var(--otari-ink)]",children:P(l.previous_spend)}),e.jsx("td",{className:"py-1.5 pr-4 text-[var(--otari-muted)]",children:W(l.reset_at)}),e.jsx("td",{className:"py-1.5 text-[var(--otari-muted)]",children:W(l.next_reset_at)})]},l.id))})]})})}function ke({onCreate:t}){return e.jsx(C,{children:e.jsxs(C.Content,{className:"flex flex-col gap-4 p-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold text-[var(--otari-ink)]",children:"No budgets yet"}),e.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:"A budget caps how much a user may spend and, optionally, resets that spend on a schedule. Create one, then assign it to users to enforce a limit."})]}),e.jsx("div",{children:e.jsx(c,{variant:"primary",onPress:t,children:"Create your first budget"})})]})})}function Ae({label:t,isPending:a,onConfirm:r}){const[l,i]=o.useState(!1);return l?e.jsxs("div",{className:"flex flex-col items-end gap-1.5 rounded-lg border border-amber-200 bg-amber-50 p-2 text-right",children:[e.jsxs("span",{className:"max-w-xs text-xs text-amber-800",children:["Delete ",e.jsx("strong",{children:t}),"? Users keep their spend but lose this limit. Cannot be undone."]}),e.jsxs("span",{className:"inline-flex gap-1",children:[e.jsx(c,{size:"sm",variant:"danger",isDisabled:a,onPress:r,children:"Delete permanently"}),e.jsx(c,{size:"sm",variant:"ghost",isDisabled:a,onPress:()=>i(!1),children:"Cancel"})]})]}):e.jsx(c,{size:"sm",variant:"danger-soft",onPress:()=>i(!0),children:"Delete"})}function Q(t){return t.split("-")[0]}function M(t){return t.name??Q(t.budget_id)}function Oe(){const t=re(),a=ae(),r=le(),l=ie(),i=oe(),x=de(),[g,d]=o.useState(!1),[p,m]=o.useState(null),[h,s]=o.useState(null),[u,b]=o.useState(null),[S,v]=o.useState(null),[B,k]=o.useState(!1),f=xe(),[A,w]=o.useState(!1),[X,T]=o.useState(void 0),[J,F]=o.useState(!1),D=t.data??[],H=t.isLoading,y=D.find(n=>n.budget_id===p)??null,U=D.find(n=>n.budget_id===h)??null,K=!H&&D.length===0&&!g,Z=D.map(n=>n.budget_id),_=ge(f.selectedKeys,Z),ee=async()=>{F(!0),T(void 0);try{for(const n of _)await i.mutateAsync(n);f.clear(),w(!1)}catch(n){T(n)}finally{F(!1)}},te=[{id:"budget",header:"Budget",isRowHeader:!0,cell:n=>e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsx("span",{className:"font-medium text-[var(--otari-ink)]",children:n.name??e.jsx("span",{className:"text-[var(--otari-muted)]",children:"(unnamed)"})}),e.jsx("code",{className:"text-[11px] text-[var(--otari-muted)]",title:n.budget_id,children:Q(n.budget_id)})]})},{id:"limit",header:"Limit (per user)",cell:n=>n.max_budget===null?e.jsx("span",{className:"text-[var(--otari-muted)]",children:"Unlimited"}):P(n.max_budget)},{id:"reset",header:"Reset",cell:n=>e.jsx("span",{className:"text-[var(--otari-muted)]",children:Ce(n.budget_duration_sec)})},{id:"users",header:"Users",cell:n=>e.jsx("span",{className:"text-[var(--otari-muted)]",children:n.user_count})},{id:"usage",header:"Usage",cell:n=>e.jsx(Pe,{budget:n})},{id:"actions",header:"Actions",align:"end",cell:n=>e.jsxs("div",{className:"flex items-center justify-end gap-1.5",children:[e.jsx(c,{size:"sm",variant:"ghost",onPress:()=>s(N=>N===n.budget_id?null:n.budget_id),children:h===n.budget_id?"Hide history":"History"}),e.jsx(c,{size:"sm",variant:"ghost",onPress:()=>{d(!1),m(n.budget_id)},children:"Edit"}),e.jsx(Ae,{label:M(n),isPending:i.isPending,onConfirm:()=>i.mutate(n.budget_id)})]})}],V=async(n,N)=>{k(!0),b(null);const L=await Promise.allSettled(N.map(R=>x.mutateAsync({id:R,body:{budget_id:n}})));k(!1);const I=L.flatMap((R,ne)=>R.status==="rejected"?[N[ne]]:[]);if(I.length>0){v({budgetId:n,userIds:I}),b(new Error(`Budget created, but could not assign it to: ${I.join(", ")}. Retry to try again.`));return}v(null),d(!1)},se=(n,N)=>{if(S){V(S.budgetId,S.userIds);return}b(null),r.mutate(n,{onSuccess:async L=>{if(N.length>0){await V(L.budget_id,N);return}d(!1)}})};return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(ue,{title:"Budgets",description:"Define spending limits and reset schedules. Assign a budget to users to enforce it.",action:g||K?null:e.jsx(c,{variant:"primary",onPress:()=>{m(null),b(null),v(null),d(!0)},children:"Create budget"})}),e.jsx(O,{error:t.error??r.error??l.error??i.error??x.error}),e.jsx(ce,{children:"Assign a budget to users when you create it, or later from the Users page. Each row’s usage aggregates the spend of the users currently on that budget."}),K?e.jsx(ke,{onCreate:()=>{m(null),b(null),v(null),d(!0)}}):null,g?e.jsx(G,{title:"Create budget",submitLabel:S?"Retry assignments":"Create budget",initial:{name:null,max_budget:null,budget_duration_sec:null},error:r.error??u,isPending:r.isPending||B,assignUsers:a.data??[],onSubmit:se,onClose:()=>{b(null),v(null),d(!1)}}):null,y?e.jsx(G,{title:`Edit budget ${M(y)}`,submitLabel:"Save changes",initial:{name:y.name,max_budget:y.max_budget,budget_duration_sec:y.budget_duration_sec},error:l.error,isPending:l.isPending,onSubmit:n=>l.mutate({id:y.budget_id,body:n},{onSuccess:()=>m(null)}),onClose:()=>m(null)},y.budget_id):null,_.length>0?e.jsx(he,{selectedCount:_.length,allMatching:!1,matchingTotal:null,canSelectAllMatching:!1,onSelectAllMatching:()=>{},onClear:f.clear,children:e.jsx(c,{size:"sm",variant:"danger",onPress:()=>w(!0),children:"Delete"})}):null,e.jsx(fe,{ariaLabel:"Budgets",columns:te,rows:D,getRowKey:n=>n.budget_id,isLoading:H,emptyContent:"No budgets yet. Create one to cap spending.",selectionMode:"multiple",selectedKeys:f.selectedKeys,onSelectionChange:f.onSelectionChange}),U?e.jsx(C,{children:e.jsxs(C.Content,{className:"p-0",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--otari-line)] px-4 py-2",children:[e.jsxs("span",{className:"text-sm font-medium text-[var(--otari-ink)]",children:["Reset history — ",M(U)]}),e.jsx(c,{size:"sm",variant:"ghost",onPress:()=>s(null),children:"Close"})]}),e.jsx(Be,{budgetId:U.budget_id})]})}):null,e.jsx(pe,{isOpen:A,onOpenChange:w,heading:"Delete budgets",body:`Delete ${_.length} ${_.length===1?"budget":"budgets"}? Users on ${_.length===1?"it":"them"} will no longer be capped.`,confirmLabel:"Delete",isPending:J,error:X,onConfirm:ee})]})}export{Oe as BudgetsPage}; diff --git a/src/gateway/static/dashboard/assets/ConfirmDialog-CSBsET-p.js b/src/gateway/static/dashboard/assets/ConfirmDialog-CSBsET-p.js new file mode 100644 index 00000000..40c25f8d --- /dev/null +++ b/src/gateway/static/dashboard/assets/ConfirmDialog-CSBsET-p.js @@ -0,0 +1 @@ +import{j as r}from"./tanstack-query-1t81HyiD.js";import{E as j}from"./index-D1O_nkKy.js";import{A as e,B as l}from"./heroui-DZj66Arc.js";function p({isOpen:s,onOpenChange:a,heading:n,body:o,confirmLabel:t,confirmVariant:c="danger",isPending:i,error:d,onConfirm:x}){return r.jsx(e,{isOpen:s,onOpenChange:a,children:s?r.jsx(e.Backdrop,{children:r.jsx(e.Container,{placement:"center",size:"md",children:r.jsxs(e.Dialog,{children:[r.jsx(e.Header,{children:r.jsx(e.Heading,{children:n})}),r.jsxs(e.Body,{className:"flex flex-col gap-4",children:[r.jsx("div",{className:"text-sm text-[var(--otari-muted)]",children:o}),r.jsx(j,{error:d})]}),r.jsxs(e.Footer,{children:[r.jsx(l,{variant:"ghost",isDisabled:i,onPress:()=>a(!1),children:"Cancel"}),r.jsx(l,{variant:c,isPending:i,onPress:x,children:t})]})]})})}):null})}export{p as C}; diff --git a/src/gateway/static/dashboard/assets/DataTable-mgItq60H.js b/src/gateway/static/dashboard/assets/DataTable-mgItq60H.js new file mode 100644 index 00000000..0ad39901 --- /dev/null +++ b/src/gateway/static/dashboard/assets/DataTable-mgItq60H.js @@ -0,0 +1 @@ +import{j as e}from"./tanstack-query-1t81HyiD.js";import{h as r,S as C,$ as k}from"./heroui-DZj66Arc.js";function m({ariaLabel:t}){return e.jsx(k,{slot:"selection","aria-label":t,className:"group inline-flex items-center",children:({isSelected:n,isIndeterminate:a})=>e.jsx("span",{className:`flex h-4 w-4 items-center justify-center rounded border transition-colors ${n||a?"border-[var(--otari-brand)] bg-[var(--otari-brand)] text-white":"border-[var(--otari-line)] bg-[var(--otari-surface)]"} group-data-[focus-visible]:outline-2 group-data-[focus-visible]:outline-[var(--otari-brand)]`,children:a?e.jsx("svg",{viewBox:"0 0 24 24",className:"h-3 w-3",fill:"none",stroke:"currentColor",strokeWidth:3,"aria-hidden":!0,children:e.jsx("line",{x1:"6",x2:"18",y1:"12",y2:"12",strokeLinecap:"round"})}):n?e.jsx("svg",{viewBox:"0 0 24 24",className:"h-3 w-3",fill:"none",stroke:"currentColor",strokeWidth:3,"aria-hidden":!0,children:e.jsx("polyline",{points:"5 12 10 17 19 7",strokeLinecap:"round",strokeLinejoin:"round"})}):null})})}const j=44;function R({ariaLabel:t,columns:n,rows:a,getRowKey:p,isLoading:d=!1,emptyContent:b="No rows.",selectionMode:c="none",selectedKeys:f,onSelectionChange:g,disabledKeys:v,sortDescriptor:w,onSortChange:N,onRowAction:x,rowClassName:l,resizable:h=!1}){const u=c==="multiple",S=h?r.ResizableContainer:r.ScrollContainer;return e.jsx(r.Root,{className:"otari-table",children:e.jsx(S,{className:"overflow-x-auto",children:e.jsxs(r.Content,{"aria-label":t,className:"w-full text-sm",selectionMode:c,selectionBehavior:"toggle",disabledBehavior:"selection",selectedKeys:f,onSelectionChange:g,disabledKeys:v,sortDescriptor:w,onSortChange:N,onRowAction:x?i=>x(String(i)):void 0,children:[e.jsxs(r.Header,{children:[u?e.jsx(r.Column,{width:j,minWidth:j,children:e.jsx(m,{ariaLabel:"Select all rows"})}):null,n.map(i=>e.jsx(r.Column,{id:i.id,isRowHeader:i.isRowHeader,allowsSorting:i.allowsSorting,width:i.width,minWidth:i.minWidth,className:i.align==="end"?"text-right":void 0,children:({sortDirection:s})=>e.jsxs("div",{className:`flex items-center gap-1 ${i.align==="end"?"justify-end":""}`,children:[i.allowsSorting?e.jsx(r.SortableColumnHeader,{sortDirection:s,children:i.header}):e.jsx("span",{children:i.header}),h?e.jsx(r.ColumnResizer,{className:"ml-auto cursor-col-resize px-1"}):null]})},i.id))]}),e.jsx(r.Body,{renderEmptyState:()=>e.jsx("div",{className:"px-4 py-10 text-center text-[var(--otari-muted)]",children:d?e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx(C,{size:"sm"})," Loading…"]}):b}),children:(d&&a.length===0?[]:a).map(i=>{const s=p(i);return e.jsxs(r.Row,{id:s,className:l==null?void 0:l(i),children:[u?e.jsx(r.Cell,{children:e.jsx(m,{ariaLabel:"Select row"})}):null,n.map(o=>e.jsx(r.Cell,{className:o.align==="end"?"text-right tabular-nums":void 0,children:o.cell(i)},o.id))]},s)})})]})})})}export{R as D}; diff --git a/src/gateway/static/dashboard/assets/Field-HzRk1KDP.js b/src/gateway/static/dashboard/assets/Field-DEJ6Wjg9.js similarity index 88% rename from src/gateway/static/dashboard/assets/Field-HzRk1KDP.js rename to src/gateway/static/dashboard/assets/Field-DEJ6Wjg9.js index 247b44b4..2a133856 100644 --- a/src/gateway/static/dashboard/assets/Field-HzRk1KDP.js +++ b/src/gateway/static/dashboard/assets/Field-DEJ6Wjg9.js @@ -1 +1 @@ -import{j as t}from"./tanstack-query-1t81HyiD.js";import{T as n,L as o,I as c,D as d}from"./heroui-BX6JwHY-.js";function j({label:s,value:a,onChange:x,placeholder:r,type:l="text",isRequired:m,description:e,autoFocus:i}){return t.jsxs(n,{value:a,onChange:x,isRequired:m,className:"flex max-w-md flex-col gap-1",children:[t.jsx(o,{className:"text-sm font-medium text-[var(--otari-ink)]",children:s}),t.jsx(c,{type:l,placeholder:r,autoFocus:i}),e?t.jsx(d,{className:"text-xs text-[var(--otari-muted)]",children:e}):null]})}export{j as F}; +import{j as t}from"./tanstack-query-1t81HyiD.js";import{T as n,L as o,I as c,D as d}from"./heroui-DZj66Arc.js";function j({label:s,value:a,onChange:x,placeholder:r,type:l="text",isRequired:m,description:e,autoFocus:i}){return t.jsxs(n,{value:a,onChange:x,isRequired:m,className:"flex max-w-md flex-col gap-1",children:[t.jsx(o,{className:"text-sm font-medium text-[var(--otari-ink)]",children:s}),t.jsx(c,{type:l,placeholder:r,autoFocus:i}),e?t.jsx(d,{className:"text-xs text-[var(--otari-muted)]",children:e}):null]})}export{j as F}; diff --git a/src/gateway/static/dashboard/assets/KeysPage-BfiWORhW.js b/src/gateway/static/dashboard/assets/KeysPage-BfiWORhW.js deleted file mode 100644 index 3bf934c9..00000000 --- a/src/gateway/static/dashboard/assets/KeysPage-BfiWORhW.js +++ /dev/null @@ -1,4 +0,0 @@ -import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as u}from"./react-dgEcD0HR.js";import{a as K,q as F,r as H,s as V,P as q,E as T,t as U,u as M,I as W}from"./index-d3Tp3DkF.js";import{F as P}from"./Field-HzRk1KDP.js";import{M as O,a as A}from"./ModelScopeControl-yafJYqc3.js";import{C as S,L as G,I as Y,a as J,b as Q,D as X,B as j,f as k,d as C}from"./heroui-BX6JwHY-.js";import{T as Z,a as ee,b,L as te,c as se,d as re,e as w}from"./Table-CLdjdyTx.js";function ne({value:t,onChange:s,users:r,description:i}){const c=r.filter(a=>!a.user_id.startsWith("apikey-")).map(a=>({id:a.user_id,name:a.alias?`${a.user_id} (${a.alias})`:a.user_id})),[l,o]=u.useState(t),x=l.trim().toLowerCase(),g=c.filter(a=>!x||a.id.toLowerCase().includes(x)||a.name.toLowerCase().includes(x)).slice(0,50),p=a=>{const m=a.trim(),v=c.find(y=>y.id===m||y.name===m);return v?v.id:m},d=p(l),h=c.some(a=>a.id===d),f=d!==""&&!h?e.jsxs("span",{children:["Creates a new user ",e.jsx("code",{children:d}),"."]}):i??"Spend and budgets track against this user.";return e.jsxs(S.Root,{allowsCustomValue:!0,allowsEmptyCollection:!0,menuTrigger:"focus",inputValue:l,onInputChange:a=>{o(a),s(p(a))},onSelectionChange:a=>{if(a!=null){const m=String(a);o(m),s(m)}},className:"flex max-w-md flex-col gap-1",children:[e.jsx(G,{className:"text-sm font-medium text-[var(--otari-ink)]",children:"Owner"}),e.jsxs(S.InputGroup,{children:[e.jsx(Y,{placeholder:"Pick a user, or type a new id…",autoComplete:"off","data-1p-ignore":!0,"data-lpignore":"true",onFocus:a=>a.currentTarget.select()}),e.jsx(S.Trigger,{})]}),e.jsx(S.Popover,{children:e.jsx(J,{items:g,className:"max-h-72 overflow-auto",children:a=>e.jsx(Q,{id:a.id,textValue:a.name,children:a.name})})}),e.jsx(X,{className:"text-xs text-[var(--otari-muted)]",children:f})]})}function R(t){if(!t)return"—";const s=new Date(t);return Number.isNaN(s.getTime())?"—":s.toLocaleDateString()}function ae(t){if(!t)return null;const s=new Date(t).getTime();if(Number.isNaN(s))return null;const r=Math.round((s-Date.now())/1e3),i=Math.abs(r),c=[["day",86400],["hour",3600],["minute",60]],l=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"});for(const[o,x]of c)if(i>=x)return l.format(Math.round(r/x),o);return l.format(r,"second")}function ie(t){if(!t.expires_at)return!1;const s=new Date(t.expires_at).getTime();return!Number.isNaN(s)&&sString(i).padStart(2,"0");return`${s.getFullYear()}-${r(s.getMonth()+1)}-${r(s.getDate())}T${r(s.getHours())}:${r(s.getMinutes())}`}const oe=t=>(t??"").startsWith("apikey-");function I({label:t,value:s,multiline:r=!1,fieldRef:i}){const c=u.useRef(null),l=i??c,[o,x]=u.useState(!1),[g,p]=u.useState(!1),d=async()=>{var f,a,m;(f=l.current)==null||f.focus(),(a=l.current)==null||a.select();try{if((m=navigator.clipboard)!=null&&m.writeText){await navigator.clipboard.writeText(s),x(!0),p(!1),window.setTimeout(()=>x(!1),2e3);return}}catch{}p(!0)},h="w-full rounded-lg border border-[var(--otari-line)] bg-[var(--otari-bg)] px-3 py-2 font-mono text-xs text-[var(--otari-ink)]";return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-xs font-medium text-[var(--otari-muted)]",children:t}),e.jsx(j,{size:"sm",variant:"outline",onPress:d,children:o?"Copied":"Copy"})]}),r?e.jsx("textarea",{ref:l,readOnly:!0,rows:s.split(` -`).length,value:s,onFocus:f=>f.currentTarget.select(),className:`${h} resize-none whitespace-pre`}):e.jsx("input",{ref:l,readOnly:!0,value:s,onFocus:f=>f.currentTarget.select(),className:h}),e.jsx("span",{"aria-live":"polite",className:"text-xs text-green-700",children:o?"Copied to clipboard.":""}),g?e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Selected. Press Ctrl/Cmd-C to copy."}):null]})}function ce({title:t,result:s,onClose:r}){const i=u.useRef(null),c=u.useRef(null),l=typeof window<"u"?window.location.origin:"",o=s.key;u.useEffect(()=>{var d,h;(d=c.current)==null||d.focus(),(h=c.current)==null||h.select()},[]);const x=d=>{var m;if(d.key!=="Tab")return;const h=(m=i.current)==null?void 0:m.querySelectorAll('button, input, textarea, a[href], [tabindex]:not([tabindex="-1"])');if(!h||h.length===0)return;const f=h[0],a=h[h.length-1];d.shiftKey&&document.activeElement===f?(d.preventDefault(),a.focus()):!d.shiftKey&&document.activeElement===a&&(d.preventDefault(),f.focus())},g=[`curl ${l}/v1/chat/completions \\`,` -H "Otari-Key: ${o}" \\`,' -H "Content-Type: application/json" \\',` -d '{"model": "your-model", "messages": [{"role": "user", "content": "Hello"}]}'`].join(` -`),p=["from openai import OpenAI","",`client = OpenAI(base_url="${l}/v1", api_key="${o}")`,"resp = client.chat.completions.create(",' model="your-model",',' messages=[{"role": "user", "content": "Hello"}],',")","print(resp.choices[0].message.content)"].join(` -`);return e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4",role:"presentation",children:e.jsxs("div",{ref:i,role:"dialog","aria-modal":"true","aria-labelledby":"reveal-title",onKeyDown:x,className:"flex max-h-[90vh] w-full max-w-2xl flex-col gap-4 overflow-y-auto rounded-xl bg-[var(--otari-surface)] p-6 shadow-xl",children:[e.jsx("h2",{id:"reveal-title",className:"text-lg font-semibold text-[var(--otari-ink)]",children:t}),e.jsx(W,{tone:"warning",children:"Copy this key now. For security it is shown only once and cannot be retrieved later. If you lose it, use Regenerate to issue a new secret."}),e.jsxs("p",{className:"text-xs text-[var(--otari-muted)]",children:["Model access: ",A(s.allowed_models).text,"."]}),e.jsx(I,{label:"Secret key",value:o,fieldRef:c}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-medium text-[var(--otari-ink)]",children:"Make your first call"}),e.jsxs("p",{className:"text-xs text-[var(--otari-muted)]",children:["Replace ",e.jsx("code",{children:"your-model"})," with a model from the Models page."]})]}),e.jsx(I,{label:"curl",value:g,multiline:!0}),e.jsx(I,{label:"Python (OpenAI SDK)",value:p,multiline:!0})]}),e.jsx("div",{className:"flex justify-end",children:e.jsx(j,{variant:"primary",onPress:r,children:"I’ve saved this key"})})]})})}function L({trigger:t,message:s,confirmLabel:r,isPending:i,onConfirm:c}){const[l,o]=u.useState(!1);return l?e.jsxs("div",{className:"flex flex-col items-end gap-1.5 rounded-lg border border-amber-200 bg-amber-50 p-2 text-right",children:[e.jsx("span",{className:"max-w-xs text-xs text-amber-800",children:s}),e.jsxs("span",{className:"inline-flex gap-1",children:[e.jsx(j,{size:"sm",variant:"danger",isDisabled:i,onPress:c,children:r}),e.jsx(j,{size:"sm",variant:"ghost",isDisabled:i,onPress:()=>o(!1),children:"Cancel"})]})]}):e.jsx(j,{size:"sm",variant:"danger-soft",onPress:()=>o(!0),children:t})}function B({userId:t,users:s}){const r=t.trim();if(r==="")return e.jsx("p",{className:"text-xs text-[var(--otari-muted)]",children:"Choose an owner above to see the models this key can inherit."});const i=s.find(o=>o.user_id===r);if(!i)return e.jsxs("p",{className:"text-xs text-[var(--otari-muted)]",children:["New user ",e.jsx("code",{children:r})," starts unrestricted, so this key may allow any model."]});const{text:c}=A(i.allowed_models),l=i.allowed_models&&i.allowed_models.length>0?i.allowed_models.join(", "):null;return e.jsxs("p",{className:"text-xs text-[var(--otari-muted)]",children:["Owner ",e.jsx("code",{children:r})," allows ",e.jsx("span",{className:"font-medium text-[var(--otari-ink)]",children:c.toLowerCase()}),l?e.jsxs(e.Fragment,{children:[" (",e.jsx("span",{className:"font-mono",children:l}),")"]}):null,". This key inherits that, or narrows within it."]})}function $({checked:t,onChange:s}){return e.jsxs("label",{className:"flex items-start gap-2 rounded-lg border border-[var(--otari-line)] p-3 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t,onChange:r=>s(r.target.checked),className:"mt-0.5 h-4 w-4 accent-[var(--otari-brand)]","aria-label":"Exempt this key from budget"}),e.jsxs("span",{className:"flex flex-col gap-0.5",children:[e.jsx("span",{className:"font-medium text-[var(--otari-ink)]",children:"Exempt from budget"}),e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Requests on this key are logged with their cost but never counted toward the owner's budget or spend, and never blocked by it."})]})]})}function de({onClose:t,onCreated:s}){const r=U(),i=M(),[c,l]=u.useState(""),[o,x]=u.useState(""),[g,p]=u.useState(!1),[d,h]=u.useState(""),[f,a]=u.useState(null),[m,v]=u.useState(!1),[y,n]=u.useState(!0),N=o!==""&&new Date(o).getTime(){if(r.isPending||!y||E)return;const _={key_name:c.trim()||null,user_id:d.trim(),expires_at:o?new Date(o).toISOString():null,allowed_models:f,exclude_from_budget:m};r.mutate(_,{onSuccess:D=>{s(D),t()}})};return e.jsx(C,{children:e.jsxs(C.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsx("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:"Create API key"}),e.jsx(T,{error:r.error}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(P,{label:"Name",value:c,onChange:l,placeholder:"ci-bot",autoFocus:!0,description:"A label to recognize this key later."}),e.jsx(P,{label:"Expires (optional)",value:o,onChange:x,type:"datetime-local",description:N?e.jsx("span",{className:"text-red-700",children:"That time is in the past; the key would be rejected immediately."}):"Leave blank for a key that never expires."})]}),e.jsx(ne,{value:d,onChange:h,users:i.data??[]}),e.jsx("button",{type:"button",className:"self-start text-xs font-medium text-[var(--otari-brand-dark)]",onClick:()=>p(_=>!_),children:g?"Hide advanced":"Advanced"}),g?e.jsxs("div",{className:"flex flex-col gap-4 rounded-lg border border-[var(--otari-line)] p-4",children:[e.jsx(B,{userId:d,users:i.data??[]}),e.jsx(O,{title:"Restrict this key's models",description:"By default this key inherits its owner's access. Optionally narrow it to a subset; a key can never exceed its owner's allowed models.",anyLabel:"Inherit owner access",initial:null,onChange:(_,D)=>{a(_),n(D)}}),e.jsx($,{checked:m,onChange:v})]}):null,e.jsxs("div",{className:"flex gap-2",children:[e.jsx(j,{variant:"primary",isDisabled:r.isPending||!y||E,onPress:z,children:r.isPending?"Creating…":"Create key"}),e.jsx(j,{variant:"ghost",onPress:t,children:"Cancel"})]})]})})}function ue({apiKey:t,onClose:s}){const r=F(),i=M(),[c,l]=u.useState(t.key_name??""),[o,x]=u.useState(le(t.expires_at)),[g,p]=u.useState(t.allowed_models),[d,h]=u.useState(t.exclude_from_budget),[f,a]=u.useState(!0),m=()=>{r.isPending||!f||r.mutate({id:t.id,body:{key_name:c.trim()||null,expires_at:o?new Date(o).toISOString():null,allowed_models:g,exclude_from_budget:d}},{onSuccess:s})};return e.jsx(C,{children:e.jsxs(C.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsxs("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:["Edit ",e.jsx("code",{children:t.key_name??t.id})]}),e.jsx(T,{error:r.error}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(P,{label:"Name",value:c,onChange:l,placeholder:"ci-bot"}),e.jsx(P,{label:"Expires",value:o,onChange:x,type:"datetime-local",description:"Blank clears the expiry."})]}),t.user_id?e.jsx(B,{userId:t.user_id,users:i.data??[]}):null,e.jsx(O,{title:"Restrict this key's models",description:"This key inherits its owner's access by default. Narrow it to a subset here; it can never exceed the owner's allowed models.",anyLabel:"Inherit owner access",initial:t.allowed_models,onChange:(v,y)=>{p(v),a(y)}}),e.jsx($,{checked:d,onChange:h}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(j,{variant:"primary",isDisabled:r.isPending||!f,onPress:m,children:r.isPending?"Saving…":"Save changes"}),e.jsx(j,{variant:"ghost",onPress:s,children:"Cancel"})]})]})})}function xe({apiKey:t}){return t.is_active?ie(t)?e.jsx(k,{size:"sm",color:"warning",children:"Expired"}):e.jsx(k,{size:"sm",color:"accent",children:"Active"}):e.jsx(k,{size:"sm",color:"default",children:"Disabled"})}function me({allowed:t}){const{text:s,tone:r}=A(t),i=r==="danger"?"text-red-700 font-medium":r==="muted"?"text-[var(--otari-muted)]":"text-[var(--otari-brand-dark)] font-medium",c=t&&t.length>0?t.join(", "):void 0;return e.jsx("span",{className:`text-xs ${i}`,title:c,children:s})}function he({onCreate:t}){return e.jsx(C,{children:e.jsxs(C.Content,{className:"flex flex-col gap-4 p-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold text-[var(--otari-ink)]",children:"No API keys yet"}),e.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:"An API key authenticates callers to this gateway. Create one to make your first request; the secret is shown once, so keep it somewhere safe."})]}),e.jsx("div",{children:e.jsx(j,{variant:"primary",onPress:t,children:"Create your first key"})})]})})}function we(){const t=K(),s=F(),r=H(),i=V(),[c,l]=u.useState(!1),[o,x]=u.useState(null),[g,p]=u.useState(null),d=t.data??[],h=t.isLoading,f=d.find(n=>n.id===o)??null,a=!h&&d.length===0&&!c,m=n=>n.key_name??n.id,v=(n,N)=>s.mutate({id:n.id,body:{is_active:N}}),y=n=>r.mutate(n.id,{onSuccess:N=>p({title:`New secret for ${m(n)}`,result:N})});return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(q,{title:"API keys",description:"Issue and revoke the keys that authenticate callers to this gateway. Secrets are shown once at creation.",action:c?null:e.jsx(j,{variant:"primary",onPress:()=>{x(null),l(!0)},children:"Create key"})}),e.jsx(T,{error:t.error??s.error??r.error??i.error}),a?e.jsx(he,{onCreate:()=>{x(null),l(!0)}}):null,c?e.jsx(de,{onClose:()=>l(!1),onCreated:n=>p({title:"API key created",result:n})}):null,f?e.jsx(ue,{apiKey:f,onClose:()=>x(null)},f.id):null,e.jsxs(Z,{children:[e.jsx(ee,{children:e.jsxs("tr",{children:[e.jsx(b,{children:"Name"}),e.jsx(b,{children:"Status"}),e.jsx(b,{children:"Owner"}),e.jsx(b,{children:"Key"}),e.jsx(b,{children:"Created"}),e.jsx(b,{children:"Last used"}),e.jsx(b,{children:"Expires"}),e.jsx(b,{className:"text-right",children:"Actions"})]})}),e.jsx("tbody",{children:h?e.jsx(te,{colSpan:8}):d.length===0?e.jsx(se,{colSpan:8,children:"No API keys yet. Create one to authenticate a caller."}):d.map(n=>e.jsxs(re,{selected:o===n.id,onClick:()=>{l(!1),x(n.id)},children:[e.jsx(w,{className:"font-medium text-[var(--otari-ink)]",children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsx("span",{children:n.key_name??e.jsx("span",{className:"text-[var(--otari-muted)]",children:"(unnamed)"})}),e.jsxs("div",{className:"flex flex-wrap items-center gap-1",children:[e.jsx(me,{allowed:n.allowed_models}),n.exclude_from_budget?e.jsx("span",{className:"inline-flex items-center rounded-full border border-[var(--otari-line)] bg-[var(--otari-brand-tint)] px-2 py-0.5 text-xs font-medium text-[var(--otari-brand-dark)]",title:"Requests on this key are logged with cost but never counted toward budget",children:"Budget-exempt"}):null]})]})}),e.jsx(w,{children:e.jsx(xe,{apiKey:n})}),e.jsx(w,{className:"text-[var(--otari-muted)]",children:oe(n.user_id)?e.jsx("span",{className:"inline-flex items-center gap-1.5",children:e.jsx(k,{size:"sm",color:"default",children:"virtual"})}):e.jsx("code",{className:"text-xs",children:n.user_id??"—"})}),e.jsx(w,{children:e.jsx("code",{className:"text-xs text-[var(--otari-muted)]",children:n.key_prefix?`${n.key_prefix}…`:"—"})}),e.jsx(w,{className:"text-[var(--otari-muted)]",children:R(n.created_at)}),e.jsx(w,{className:"text-[var(--otari-muted)]",children:ae(n.last_used_at)??"never"}),e.jsx(w,{className:"text-[var(--otari-muted)]",children:e.jsx("span",{title:n.expires_at?new Date(n.expires_at).toLocaleString():void 0,children:n.expires_at?R(n.expires_at):"never"})}),e.jsx(w,{children:e.jsxs("div",{className:"flex items-center justify-end gap-1.5",onClick:N=>N.stopPropagation(),children:[n.is_active?e.jsx(j,{size:"sm",variant:"outline",isDisabled:s.isPending,onPress:()=>v(n,!1),children:"Disable"}):e.jsx(j,{size:"sm",variant:"outline",isDisabled:s.isPending,onPress:()=>v(n,!0),children:"Enable"}),e.jsx(j,{size:"sm",variant:"ghost",onPress:()=>{l(!1),x(n.id)},children:"Edit"}),e.jsx(L,{trigger:"Regenerate",confirmLabel:"Regenerate",isPending:r.isPending,message:e.jsxs(e.Fragment,{children:["Regenerate the secret for ",e.jsx("strong",{children:m(n)}),"? The current secret stops working immediately, with no grace period."]}),onConfirm:()=>y(n)}),n.is_active?null:e.jsx(L,{trigger:"Delete",confirmLabel:"Delete permanently",isPending:i.isPending,message:e.jsxs(e.Fragment,{children:["Permanently delete ",e.jsx("strong",{children:m(n)}),"? This removes the key and unlinks its usage history. Cannot be undone."]}),onConfirm:()=>i.mutate(n.id)})]})})]},n.id))})]}),g?e.jsx(ce,{title:g.title,result:g.result,onClose:()=>{p(null),r.reset()}}):null]})}export{we as KeysPage}; diff --git a/src/gateway/static/dashboard/assets/KeysPage-BiO9tu08.js b/src/gateway/static/dashboard/assets/KeysPage-BiO9tu08.js new file mode 100644 index 00000000..8ed6f1b0 --- /dev/null +++ b/src/gateway/static/dashboard/assets/KeysPage-BiO9tu08.js @@ -0,0 +1,4 @@ +import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as u}from"./react-dgEcD0HR.js";import{a as Q,r as H,s as X,t as Z,P as ee,E as F,v as te,u as V,I as se}from"./index-D1O_nkKy.js";import{u as ae,r as ne,B as re}from"./tableSelection-CLDlIlLU.js";import{C as ie}from"./ConfirmDialog-CSBsET-p.js";import{D as le}from"./DataTable-mgItq60H.js";import{F as I}from"./Field-DEJ6Wjg9.js";import{M as q,a as K}from"./ModelScopeControl-DPtZaEWl.js";import{C as D,L as oe,I as ce,a as de,b as ue,D as me,B as p,d as k,f as A}from"./heroui-DZj66Arc.js";function xe({value:s,onChange:a,users:n,description:i}){const d=n.filter(r=>!r.user_id.startsWith("apikey-")).map(r=>({id:r.user_id,name:r.alias?`${r.user_id} (${r.alias})`:r.user_id})),[l,o]=u.useState(s),x=l.trim().toLowerCase(),y=d.filter(r=>!x||r.id.toLowerCase().includes(x)||r.name.toLowerCase().includes(x)).slice(0,50),g=r=>{const m=r.trim(),v=d.find(j=>j.id===m||j.name===m);return v?v.id:m},c=g(l),h=d.some(r=>r.id===c),f=c!==""&&!h?e.jsxs("span",{children:["Creates a new user ",e.jsx("code",{children:c}),"."]}):i??"Spend and budgets track against this user.";return e.jsxs(D.Root,{allowsCustomValue:!0,allowsEmptyCollection:!0,menuTrigger:"focus",inputValue:l,onInputChange:r=>{o(r),a(g(r))},onSelectionChange:r=>{if(r!=null){const m=String(r);o(m),a(m)}},className:"flex max-w-md flex-col gap-1",children:[e.jsx(oe,{className:"text-sm font-medium text-[var(--otari-ink)]",children:"Owner"}),e.jsxs(D.InputGroup,{children:[e.jsx(ce,{placeholder:"Pick a user, or type a new id…",autoComplete:"off","data-1p-ignore":!0,"data-lpignore":"true",onFocus:r=>r.currentTarget.select()}),e.jsx(D.Trigger,{})]}),e.jsx(D.Popover,{children:e.jsx(de,{items:y,className:"max-h-72 overflow-auto",children:r=>e.jsx(ue,{id:r.id,textValue:r.name,children:r.name})})}),e.jsx(me,{className:"text-xs text-[var(--otari-muted)]",children:f})]})}function $(s){if(!s)return"—";const a=new Date(s);return Number.isNaN(a.getTime())?"—":a.toLocaleDateString()}function he(s){if(!s)return null;const a=new Date(s).getTime();if(Number.isNaN(a))return null;const n=Math.round((a-Date.now())/1e3),i=Math.abs(n),d=[["day",86400],["hour",3600],["minute",60]],l=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"});for(const[o,x]of d)if(i>=x)return l.format(Math.round(n/x),o);return l.format(n,"second")}function fe(s){if(!s.expires_at)return!1;const a=new Date(s.expires_at).getTime();return!Number.isNaN(a)&&aString(i).padStart(2,"0");return`${a.getFullYear()}-${n(a.getMonth()+1)}-${n(a.getDate())}T${n(a.getHours())}:${n(a.getMinutes())}`}const ge=s=>(s??"").startsWith("apikey-");function M({label:s,value:a,multiline:n=!1,fieldRef:i}){const d=u.useRef(null),l=i??d,[o,x]=u.useState(!1),[y,g]=u.useState(!1),c=async()=>{var f,r,m;(f=l.current)==null||f.focus(),(r=l.current)==null||r.select();try{if((m=navigator.clipboard)!=null&&m.writeText){await navigator.clipboard.writeText(a),x(!0),g(!1),window.setTimeout(()=>x(!1),2e3);return}}catch{}g(!0)},h="w-full rounded-lg border border-[var(--otari-line)] bg-[var(--otari-bg)] px-3 py-2 font-mono text-xs text-[var(--otari-ink)]";return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-xs font-medium text-[var(--otari-muted)]",children:s}),e.jsx(p,{size:"sm",variant:"outline",onPress:c,children:o?"Copied":"Copy"})]}),n?e.jsx("textarea",{ref:l,readOnly:!0,rows:a.split(` +`).length,value:a,onFocus:f=>f.currentTarget.select(),className:`${h} resize-none whitespace-pre`}):e.jsx("input",{ref:l,readOnly:!0,value:a,onFocus:f=>f.currentTarget.select(),className:h}),e.jsx("span",{"aria-live":"polite",className:"text-xs text-green-700",children:o?"Copied to clipboard.":""}),y?e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Selected. Press Ctrl/Cmd-C to copy."}):null]})}function ye({title:s,result:a,onClose:n}){const i=u.useRef(null),d=u.useRef(null),l=typeof window<"u"?window.location.origin:"",o=a.key;u.useEffect(()=>{var c,h;(c=d.current)==null||c.focus(),(h=d.current)==null||h.select()},[]);const x=c=>{var m;if(c.key!=="Tab")return;const h=(m=i.current)==null?void 0:m.querySelectorAll('button, input, textarea, a[href], [tabindex]:not([tabindex="-1"])');if(!h||h.length===0)return;const f=h[0],r=h[h.length-1];c.shiftKey&&document.activeElement===f?(c.preventDefault(),r.focus()):!c.shiftKey&&document.activeElement===r&&(c.preventDefault(),f.focus())},y=[`curl ${l}/v1/chat/completions \\`,` -H "Otari-Key: ${o}" \\`,' -H "Content-Type: application/json" \\',` -d '{"model": "your-model", "messages": [{"role": "user", "content": "Hello"}]}'`].join(` +`),g=["from openai import OpenAI","",`client = OpenAI(base_url="${l}/v1", api_key="${o}")`,"resp = client.chat.completions.create(",' model="your-model",',' messages=[{"role": "user", "content": "Hello"}],',")","print(resp.choices[0].message.content)"].join(` +`);return e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4",role:"presentation",children:e.jsxs("div",{ref:i,role:"dialog","aria-modal":"true","aria-labelledby":"reveal-title",onKeyDown:x,className:"flex max-h-[90vh] w-full max-w-2xl flex-col gap-4 overflow-y-auto rounded-xl bg-[var(--otari-surface)] p-6 shadow-xl",children:[e.jsx("h2",{id:"reveal-title",className:"text-lg font-semibold text-[var(--otari-ink)]",children:s}),e.jsx(se,{tone:"warning",children:"Copy this key now. For security it is shown only once and cannot be retrieved later. If you lose it, use Regenerate to issue a new secret."}),e.jsxs("p",{className:"text-xs text-[var(--otari-muted)]",children:["Model access: ",K(a.allowed_models).text,"."]}),e.jsx(M,{label:"Secret key",value:o,fieldRef:d}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-medium text-[var(--otari-ink)]",children:"Make your first call"}),e.jsxs("p",{className:"text-xs text-[var(--otari-muted)]",children:["Replace ",e.jsx("code",{children:"your-model"})," with a model from the Models page."]})]}),e.jsx(M,{label:"curl",value:y,multiline:!0}),e.jsx(M,{label:"Python (OpenAI SDK)",value:g,multiline:!0})]}),e.jsx("div",{className:"flex justify-end",children:e.jsx(p,{variant:"primary",onPress:n,children:"I’ve saved this key"})})]})})}function z({trigger:s,message:a,confirmLabel:n,isPending:i,onConfirm:d}){const[l,o]=u.useState(!1);return l?e.jsxs("div",{className:"flex flex-col items-end gap-1.5 rounded-lg border border-amber-200 bg-amber-50 p-2 text-right",children:[e.jsx("span",{className:"max-w-xs text-xs text-amber-800",children:a}),e.jsxs("span",{className:"inline-flex gap-1",children:[e.jsx(p,{size:"sm",variant:"danger",isDisabled:i,onPress:d,children:n}),e.jsx(p,{size:"sm",variant:"ghost",isDisabled:i,onPress:()=>o(!1),children:"Cancel"})]})]}):e.jsx(p,{size:"sm",variant:"danger-soft",onPress:()=>o(!0),children:s})}function U({userId:s,users:a}){const n=s.trim();if(n==="")return e.jsx("p",{className:"text-xs text-[var(--otari-muted)]",children:"Choose an owner above to see the models this key can inherit."});const i=a.find(o=>o.user_id===n);if(!i)return e.jsxs("p",{className:"text-xs text-[var(--otari-muted)]",children:["New user ",e.jsx("code",{children:n})," starts unrestricted, so this key may allow any model."]});const{text:d}=K(i.allowed_models),l=i.allowed_models&&i.allowed_models.length>0?i.allowed_models.join(", "):null;return e.jsxs("p",{className:"text-xs text-[var(--otari-muted)]",children:["Owner ",e.jsx("code",{children:n})," allows ",e.jsx("span",{className:"font-medium text-[var(--otari-ink)]",children:d.toLowerCase()}),l?e.jsxs(e.Fragment,{children:[" (",e.jsx("span",{className:"font-mono",children:l}),")"]}):null,". This key inherits that, or narrows within it."]})}function W({checked:s,onChange:a}){return e.jsxs("label",{className:"flex items-start gap-2 rounded-lg border border-[var(--otari-line)] p-3 text-sm",children:[e.jsx("input",{type:"checkbox",checked:s,onChange:n=>a(n.target.checked),className:"mt-0.5 h-4 w-4 accent-[var(--otari-brand)]","aria-label":"Exempt this key from budget"}),e.jsxs("span",{className:"flex flex-col gap-0.5",children:[e.jsx("span",{className:"font-medium text-[var(--otari-ink)]",children:"Exempt from budget"}),e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Requests on this key are logged with their cost but never counted toward the owner's budget or spend, and never blocked by it."})]})]})}function je({onClose:s,onCreated:a}){const n=te(),i=V(),[d,l]=u.useState(""),[o,x]=u.useState(""),[y,g]=u.useState(!1),[c,h]=u.useState(""),[f,r]=u.useState(null),[m,v]=u.useState(!1),[j,T]=u.useState(!0),_=o!==""&&new Date(o).getTime(){if(n.isPending||!j||N)return;const b={key_name:d.trim()||null,user_id:c.trim(),expires_at:o?new Date(o).toISOString():null,allowed_models:f,exclude_from_budget:m};n.mutate(b,{onSuccess:w=>{a(w),s()}})};return e.jsx(k,{children:e.jsxs(k.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsx("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:"Create API key"}),e.jsx(F,{error:n.error}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(I,{label:"Name",value:d,onChange:l,placeholder:"ci-bot",autoFocus:!0,description:"A label to recognize this key later."}),e.jsx(I,{label:"Expires (optional)",value:o,onChange:x,type:"datetime-local",description:_?e.jsx("span",{className:"text-red-700",children:"That time is in the past; the key would be rejected immediately."}):"Leave blank for a key that never expires."})]}),e.jsx(xe,{value:c,onChange:h,users:i.data??[]}),e.jsx("button",{type:"button",className:"self-start text-xs font-medium text-[var(--otari-brand-dark)]",onClick:()=>g(b=>!b),children:y?"Hide advanced":"Advanced"}),y?e.jsxs("div",{className:"flex flex-col gap-4 rounded-lg border border-[var(--otari-line)] p-4",children:[e.jsx(U,{userId:c,users:i.data??[]}),e.jsx(q,{title:"Restrict this key's models",description:"By default this key inherits its owner's access. Optionally narrow it to a subset; a key can never exceed its owner's allowed models.",anyLabel:"Inherit owner access",initial:null,onChange:(b,w)=>{r(b),T(w)}}),e.jsx(W,{checked:m,onChange:v})]}):null,e.jsxs("div",{className:"flex gap-2",children:[e.jsx(p,{variant:"primary",isDisabled:n.isPending||!j||N,onPress:S,children:n.isPending?"Creating…":"Create key"}),e.jsx(p,{variant:"ghost",onPress:s,children:"Cancel"})]})]})})}function ve({apiKey:s,onClose:a}){const n=H(),i=V(),[d,l]=u.useState(s.key_name??""),[o,x]=u.useState(pe(s.expires_at)),[y,g]=u.useState(s.allowed_models),[c,h]=u.useState(s.exclude_from_budget),[f,r]=u.useState(!0),m=()=>{n.isPending||!f||n.mutate({id:s.id,body:{key_name:d.trim()||null,expires_at:o?new Date(o).toISOString():null,allowed_models:y,exclude_from_budget:c}},{onSuccess:a})};return e.jsx(k,{children:e.jsxs(k.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsxs("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:["Edit ",e.jsx("code",{children:s.key_name??s.id})]}),e.jsx(F,{error:n.error}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(I,{label:"Name",value:d,onChange:l,placeholder:"ci-bot"}),e.jsx(I,{label:"Expires",value:o,onChange:x,type:"datetime-local",description:"Blank clears the expiry."})]}),s.user_id?e.jsx(U,{userId:s.user_id,users:i.data??[]}):null,e.jsx(q,{title:"Restrict this key's models",description:"This key inherits its owner's access by default. Narrow it to a subset here; it can never exceed the owner's allowed models.",anyLabel:"Inherit owner access",initial:s.allowed_models,onChange:(v,j)=>{g(v),r(j)}}),e.jsx(W,{checked:c,onChange:h}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(p,{variant:"primary",isDisabled:n.isPending||!f,onPress:m,children:n.isPending?"Saving…":"Save changes"}),e.jsx(p,{variant:"ghost",onPress:a,children:"Cancel"})]})]})})}function be({apiKey:s}){return s.is_active?fe(s)?e.jsx(A,{size:"sm",color:"warning",children:"Expired"}):e.jsx(A,{size:"sm",color:"accent",children:"Active"}):e.jsx(A,{size:"sm",color:"default",children:"Disabled"})}function we({allowed:s}){const{text:a,tone:n}=K(s),i=n==="danger"?"text-red-700 font-medium":n==="muted"?"text-[var(--otari-muted)]":"text-[var(--otari-brand-dark)] font-medium",d=s&&s.length>0?s.join(", "):void 0;return e.jsx("span",{className:`text-xs ${i}`,title:d,children:a})}function Ne({onCreate:s}){return e.jsx(k,{children:e.jsxs(k.Content,{className:"flex flex-col gap-4 p-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold text-[var(--otari-ink)]",children:"No API keys yet"}),e.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:"An API key authenticates callers to this gateway. Create one to make your first request; the secret is shown once, so keep it somewhere safe."})]}),e.jsx("div",{children:e.jsx(p,{variant:"primary",onPress:s,children:"Create your first key"})})]})})}function Ee(){const s=Q(),a=H(),n=X(),i=Z(),[d,l]=u.useState(!1),[o,x]=u.useState(null),[y,g]=u.useState(null),c=s.data??[],h=s.isLoading,f=c.find(t=>t.id===o)??null,r=!h&&c.length===0&&!d,m=ae(),[v,j]=u.useState(!1),[T,_]=u.useState(void 0),[N,S]=u.useState(!1),b=c.map(t=>t.id),w=ne(m.selectedKeys,b),E=c.filter(t=>w.includes(t.id)),B=t=>t.key_name??t.id,G=(t,C)=>a.mutate({id:t.id,body:{is_active:C}}),Y=t=>n.mutate(t.id,{onSuccess:C=>g({title:`New secret for ${B(t)}`,result:C})}),R=async(t,C,L)=>{S(!0),_(void 0);try{for(const O of t)await C(O);m.clear(),L==null||L()}catch(O){_(O)}finally{S(!1)}},J=[{id:"name",header:"Name",isRowHeader:!0,cell:t=>e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsx("span",{className:"font-medium text-[var(--otari-ink)]",children:t.key_name??e.jsx("span",{className:"text-[var(--otari-muted)]",children:"(unnamed)"})}),e.jsxs("div",{className:"flex flex-wrap items-center gap-1",children:[e.jsx(we,{allowed:t.allowed_models}),t.exclude_from_budget?e.jsx("span",{className:"inline-flex items-center rounded-full border border-[var(--otari-line)] bg-[var(--otari-brand-tint)] px-2 py-0.5 text-xs font-medium text-[var(--otari-brand-dark)]",title:"Requests on this key are logged with cost but never counted toward budget",children:"Budget-exempt"}):null]})]})},{id:"status",header:"Status",cell:t=>e.jsx(be,{apiKey:t})},{id:"owner",header:"Owner",cell:t=>ge(t.user_id)?e.jsx(A,{size:"sm",color:"default",children:"virtual"}):e.jsx("code",{className:"text-xs text-[var(--otari-muted)]",children:t.user_id??"—"})},{id:"key",header:"Key",cell:t=>e.jsx("code",{className:"text-xs text-[var(--otari-muted)]",children:t.key_prefix?`${t.key_prefix}…`:"—"})},{id:"created",header:"Created",cell:t=>e.jsx("span",{className:"text-[var(--otari-muted)]",children:$(t.created_at)})},{id:"last_used",header:"Last used",cell:t=>e.jsx("span",{className:"text-[var(--otari-muted)]",children:he(t.last_used_at)??"never"})},{id:"expires",header:"Expires",cell:t=>e.jsx("span",{className:"text-[var(--otari-muted)]",title:t.expires_at?new Date(t.expires_at).toLocaleString():void 0,children:t.expires_at?$(t.expires_at):"never"})},{id:"actions",header:"Actions",align:"end",cell:t=>e.jsxs("div",{className:"flex items-center justify-end gap-1.5",children:[e.jsx(p,{size:"sm",variant:"outline",isDisabled:a.isPending,onPress:()=>G(t,!t.is_active),children:t.is_active?"Disable":"Enable"}),e.jsx(p,{size:"sm",variant:"ghost",onPress:()=>{l(!1),x(t.id)},children:"Edit"}),e.jsx(z,{trigger:"Regenerate",confirmLabel:"Regenerate",isPending:n.isPending,message:e.jsxs(e.Fragment,{children:["Regenerate the secret for ",e.jsx("strong",{children:B(t)}),"? The current secret stops working immediately, with no grace period."]}),onConfirm:()=>Y(t)}),t.is_active?null:e.jsx(z,{trigger:"Delete",confirmLabel:"Delete permanently",isPending:i.isPending,message:e.jsxs(e.Fragment,{children:["Permanently delete ",e.jsx("strong",{children:B(t)}),"? This removes the key and unlinks its usage history. Cannot be undone."]}),onConfirm:()=>i.mutate(t.id)})]})}],P=E.filter(t=>!t.is_active);return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(ee,{title:"API keys",description:"Issue and revoke the keys that authenticate callers to this gateway. Secrets are shown once at creation.",action:d?null:e.jsx(p,{variant:"primary",onPress:()=>{x(null),l(!0)},children:"Create key"})}),e.jsx(F,{error:s.error??a.error??n.error??i.error}),r?e.jsx(Ne,{onCreate:()=>{x(null),l(!0)}}):null,d?e.jsx(je,{onClose:()=>l(!1),onCreated:t=>g({title:"API key created",result:t})}):null,f?e.jsx(ve,{apiKey:f,onClose:()=>x(null)},f.id):null,w.length>0?e.jsxs(re,{selectedCount:w.length,allMatching:!1,matchingTotal:null,canSelectAllMatching:!1,onSelectAllMatching:()=>{},onClear:m.clear,children:[e.jsx(p,{size:"sm",variant:"outline",isDisabled:N,onPress:()=>void R(E,t=>a.mutateAsync({id:t.id,body:{is_active:!1}})),children:"Disable"}),e.jsx(p,{size:"sm",variant:"outline",isDisabled:N,onPress:()=>void R(E,t=>a.mutateAsync({id:t.id,body:{exclude_from_budget:!0}})),children:"Budget-exempt"}),e.jsx(p,{size:"sm",variant:"danger",isDisabled:P.length===0,onPress:()=>j(!0),children:"Delete"})]}):null,e.jsx(le,{ariaLabel:"API keys",columns:J,rows:c,getRowKey:t=>t.id,isLoading:h,emptyContent:"No API keys yet. Create one to authenticate a caller.",selectionMode:"multiple",selectedKeys:m.selectedKeys,onSelectionChange:m.onSelectionChange}),e.jsx(ie,{isOpen:v,onOpenChange:j,heading:"Delete API keys",body:`Permanently delete ${P.length} disabled ${P.length===1?"key":"keys"}? This removes them and unlinks their usage history. Cannot be undone. Active keys in the selection are skipped; disable them first.`,confirmLabel:"Delete permanently",isPending:N,error:T,onConfirm:()=>void R(P,t=>i.mutateAsync(t.id),()=>j(!1))}),y?e.jsx(ye,{title:y.title,result:y.result,onClose:()=>{g(null),n.reset()}}):null]})}export{Ee as KeysPage}; diff --git a/src/gateway/static/dashboard/assets/ModelScopeControl-yafJYqc3.js b/src/gateway/static/dashboard/assets/ModelScopeControl-DPtZaEWl.js similarity index 80% rename from src/gateway/static/dashboard/assets/ModelScopeControl-yafJYqc3.js rename to src/gateway/static/dashboard/assets/ModelScopeControl-DPtZaEWl.js index 52a0c518..a335c34d 100644 --- a/src/gateway/static/dashboard/assets/ModelScopeControl-yafJYqc3.js +++ b/src/gateway/static/dashboard/assets/ModelScopeControl-DPtZaEWl.js @@ -1 +1 @@ -import{j as t}from"./tanstack-query-1t81HyiD.js";import{r as n}from"./react-dgEcD0HR.js";import{J as A,f as $,g as P}from"./index-d3Tp3DkF.js";import{C as d,I as R,a as T,b as V}from"./heroui-BX6JwHY-.js";function q(r){return r===null?"any":r.length===0?"block":"only"}const O=50;function Q({initial:r,onChange:m,title:N="Model access",description:w,anyLabel:C="Any model"}){const x=A(),u=$(),g=P(),[i,S]=n.useState(q(r)),[a,v]=n.useState(r??[]),[p,y]=n.useState(""),f=n.useMemo(()=>{var j,k;const e=new Set,s=[],l=(o,c)=>{o&&!e.has(o)&&(e.add(o),s.push({id:o,label:c}))};for(const o of((j=x.data)==null?void 0:j.providers)??[])l(`${o.instance}:*`,`${o.instance}:* · all ${o.instance} models`);for(const o of((k=u.data)==null?void 0:k.providers)??[])for(const c of o.models)l(c.key,c.key);for(const o of g.data??[])l(o.target,`${o.name} · alias`);return s},[x.data,u.data,g.data]),L=n.useMemo(()=>{const e=p.trim().toLowerCase();return f.filter(s=>!a.includes(s.id)).filter(s=>!e||s.id.toLowerCase().includes(e)||s.label.toLowerCase().includes(e)).slice(0,O)},[f,a,p]),h=(e,s)=>{e==="any"?m(null,!0):e==="block"?m([],!0):m(s,s.length>0)},B=e=>{S(e),h(e,a)},M=e=>{const s=a.includes(e)?a:[...a,e];v(s),y(""),h("only",s)},E=e=>{const s=a.filter(l=>l!==e);v(s),h("only",s)},b=(e,s)=>t.jsx("button",{type:"button","aria-pressed":i===e,onClick:()=>B(e),className:i===e?"rounded-md bg-white px-3 py-1.5 text-sm font-medium text-[var(--otari-ink)] shadow-sm":"rounded-md px-3 py-1.5 text-sm text-[var(--otari-muted)] hover:text-[var(--otari-ink)]",children:s}),I=!u.isLoading&&!x.isLoading&&f.length===0;return t.jsxs("div",{className:"flex flex-col gap-3",children:[t.jsxs("div",{children:[t.jsx("span",{className:"text-sm font-medium text-[var(--otari-ink)]",children:N}),t.jsx("p",{className:"text-xs text-[var(--otari-muted)]",children:w??"Which models this key may list and call. The master key is never restricted, so blocking a key cannot lock you out of the dashboard."})]}),t.jsxs("div",{className:"flex w-fit items-center gap-1 rounded-lg bg-[var(--otari-bg)] p-1",children:[b("any",C),b("only","Only selected"),b("block","Block all")]}),i==="block"?t.jsxs("div",{className:"rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800",children:["Blocked from ",t.jsx("strong",{children:"every"})," model until you change this access."]}):null,i==="only"?t.jsxs("div",{className:"flex flex-col gap-2",children:[t.jsx("div",{className:"flex flex-wrap gap-1.5",children:a.length===0?t.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Pick at least one model below, or choose “Block all”."}):a.map(e=>t.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-[var(--otari-brand-tint)] px-2.5 py-1 font-mono text-xs text-[var(--otari-brand-dark)]",children:[e,t.jsx("button",{type:"button","aria-label":`Remove ${e}`,onClick:()=>E(e),className:"text-[var(--otari-brand-dark)] hover:text-red-700",children:"×"})]},e))}),I?t.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"No providers or models discovered yet. Configure a provider first, then scope this key."}):t.jsxs(d.Root,{allowsEmptyCollection:!0,menuTrigger:"input",inputValue:p,onInputChange:y,selectedKey:null,onSelectionChange:e=>{e!=null&&M(String(e))},className:"flex max-w-md flex-col gap-1",children:[t.jsxs(d.InputGroup,{children:[t.jsx(R,{"aria-label":"Add a model",placeholder:"Search providers, models, aliases…",autoComplete:"off"}),t.jsx(d.Trigger,{})]}),t.jsx(d.Popover,{children:t.jsx(T,{items:L,className:"max-h-72 overflow-auto",children:e=>t.jsx(V,{id:e.id,textValue:e.label,children:e.label})})})]})]}):null]})}function W(r){return r===null?{text:"All models",tone:"muted"}:r.length===0?{text:"No models",tone:"danger"}:{text:"Selected models",tone:"normal"}}export{Q as M,W as a}; +import{j as t}from"./tanstack-query-1t81HyiD.js";import{r as n}from"./react-dgEcD0HR.js";import{K as A,h as $,i as P}from"./index-D1O_nkKy.js";import{C as d,I as R,a as T,b as V}from"./heroui-DZj66Arc.js";function q(r){return r===null?"any":r.length===0?"block":"only"}const K=50;function W({initial:r,onChange:m,title:N="Model access",description:w,anyLabel:C="Any model"}){const x=A(),u=$(),v=P(),[i,S]=n.useState(q(r)),[a,g]=n.useState(r??[]),[p,y]=n.useState(""),f=n.useMemo(()=>{var j,k;const e=new Set,s=[],l=(o,c)=>{o&&!e.has(o)&&(e.add(o),s.push({id:o,label:c}))};for(const o of((j=x.data)==null?void 0:j.providers)??[])l(`${o.instance}:*`,`${o.instance}:* · all ${o.instance} models`);for(const o of((k=u.data)==null?void 0:k.providers)??[])for(const c of o.models)l(c.key,c.key);for(const o of v.data??[])l(o.target,`${o.name} · alias`);return s},[x.data,u.data,v.data]),L=n.useMemo(()=>{const e=p.trim().toLowerCase();return f.filter(s=>!a.includes(s.id)).filter(s=>!e||s.id.toLowerCase().includes(e)||s.label.toLowerCase().includes(e)).slice(0,K)},[f,a,p]),h=(e,s)=>{e==="any"?m(null,!0):e==="block"?m([],!0):m(s,s.length>0)},B=e=>{S(e),h(e,a)},M=e=>{const s=a.includes(e)?a:[...a,e];g(s),y(""),h("only",s)},E=e=>{const s=a.filter(l=>l!==e);g(s),h("only",s)},b=(e,s)=>t.jsx("button",{type:"button","aria-pressed":i===e,onClick:()=>B(e),className:i===e?"rounded-md bg-white px-3 py-1.5 text-sm font-medium text-[var(--otari-ink)] shadow-sm":"rounded-md px-3 py-1.5 text-sm text-[var(--otari-muted)] hover:text-[var(--otari-ink)]",children:s}),I=!u.isLoading&&!x.isLoading&&f.length===0;return t.jsxs("div",{className:"flex flex-col gap-3",children:[t.jsxs("div",{children:[t.jsx("span",{className:"text-sm font-medium text-[var(--otari-ink)]",children:N}),t.jsx("p",{className:"text-xs text-[var(--otari-muted)]",children:w??"Which models this key may list and call. The master key is never restricted, so blocking a key cannot lock you out of the dashboard."})]}),t.jsxs("div",{className:"flex w-fit items-center gap-1 rounded-lg bg-[var(--otari-bg)] p-1",children:[b("any",C),b("only","Only selected"),b("block","Block all")]}),i==="block"?t.jsxs("div",{className:"rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800",children:["Blocked from ",t.jsx("strong",{children:"every"})," model until you change this access."]}):null,i==="only"?t.jsxs("div",{className:"flex flex-col gap-2",children:[t.jsx("div",{className:"flex flex-wrap gap-1.5",children:a.length===0?t.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Pick at least one model below, or choose “Block all”."}):a.map(e=>t.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-[var(--otari-brand-tint)] px-2.5 py-1 font-mono text-xs text-[var(--otari-brand-dark)]",children:[e,t.jsx("button",{type:"button","aria-label":`Remove ${e}`,onClick:()=>E(e),className:"text-[var(--otari-brand-dark)] hover:text-red-700",children:"×"})]},e))}),I?t.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"No providers or models discovered yet. Configure a provider first, then scope this key."}):t.jsxs(d.Root,{allowsEmptyCollection:!0,menuTrigger:"input",inputValue:p,onInputChange:y,selectedKey:null,onSelectionChange:e=>{e!=null&&M(String(e))},className:"flex max-w-md flex-col gap-1",children:[t.jsxs(d.InputGroup,{children:[t.jsx(R,{"aria-label":"Add a model",placeholder:"Search providers, models, aliases…",autoComplete:"off"}),t.jsx(d.Trigger,{})]}),t.jsx(d.Popover,{children:t.jsx(T,{items:L,className:"max-h-72 overflow-auto",children:e=>t.jsx(V,{id:e.id,textValue:e.label,children:e.label})})})]})]}):null]})}function X(r){return r===null?{text:"All models",tone:"muted"}:r.length===0?{text:"No models",tone:"danger"}:{text:"Selected models",tone:"normal"}}export{W as M,X as a}; diff --git a/src/gateway/static/dashboard/assets/ModelsPage-BS-xT7Ts.js b/src/gateway/static/dashboard/assets/ModelsPage-BS-xT7Ts.js new file mode 100644 index 00000000..81cafedf --- /dev/null +++ b/src/gateway/static/dashboard/assets/ModelsPage-BS-xT7Ts.js @@ -0,0 +1 @@ +import{j as e}from"./tanstack-query-1t81HyiD.js";import{i as gt,u as vt,r as c}from"./react-dgEcD0HR.js";import{w as _t,x as bt,h as jt,y as yt,z as je,P as Pt,E as Nt,F as B,I as St,A as ae,B as ze,C as Re,D as be,G as Ct,H as E,J as kt}from"./index-D1O_nkKy.js";import{u as Mt,r as Wt,B as It}from"./tableSelection-CLDlIlLU.js";import{D as Tt}from"./DataTable-mgItq60H.js";import{T as Lt,S as At}from"./TablePagination-CsvD577_.js";import{B as A,d as se,f as V}from"./heroui-DZj66Arc.js";function Oe(t){const i=t.indexOf(":");return i>0?t.slice(0,i):"—"}function $t(t,i=Date.now()){const r=new Map;for(const n of t){const a=r.get(n.model_key)??[];a.push(n),r.set(n.model_key,a)}const s=[];for(const n of r.values()){const a=[...n].sort((h,u)=>Date.parse(h.effective_at)-Date.parse(u.effective_at)),f=[...a].reverse().find(h=>Date.parse(h.effective_at)<=i);s.push(f??a[0])}return s.sort((n,a)=>n.model_key.localeCompare(a.model_key))}const Et="otari",De=[{value:"vision",label:"Vision",test:t=>Array.isArray(t.input_modalities)&&t.input_modalities.includes("image")},{value:"tool_call",label:"Tool calling",test:t=>!!t.tool_call},{value:"reasoning",label:"Reasoning",test:t=>!!t.reasoning},{value:"structured_output",label:"Structured output",test:t=>!!t.structured_output},{value:"attachment",label:"Attachments",test:t=>!!t.attachment},{value:"audio",label:"Audio",test:t=>Array.isArray(t.input_modalities)&&t.input_modalities.includes("audio")},{value:"pdf",label:"PDF",test:t=>Array.isArray(t.input_modalities)&&t.input_modalities.includes("pdf")}],Ot=[{key:"reasoning",label:"Reasoning"},{key:"tool_call",label:"Tool calling"},{key:"structured_output",label:"Structured output"},{key:"attachment",label:"Attachments"},{key:"temperature",label:"Temperature"}],Fe={text:"Text",image:"Image",audio:"Audio",video:"Video",pdf:"PDF"},Dt=[{value:"0",label:"Any context"},{value:"8000",label:"≥ 8K"},{value:"32000",label:"≥ 32K"},{value:"128000",label:"≥ 128K"},{value:"200000",label:"≥ 200K"},{value:"1000000",label:"≥ 1M"}],Ft=[{value:"",label:"Any price"},{value:"1",label:"≤ $1 / 1M in"},{value:"3",label:"≤ $3 / 1M in"},{value:"10",label:"≤ $10 / 1M in"},{value:"30",label:"≤ $30 / 1M in"}],Bt=[{value:"",label:"Base prices"},{value:"8000",label:"Compare at 8K"},{value:"128000",label:"Compare at 128K"},{value:"200000",label:"Compare at 200K"},{value:"500000",label:"Compare at 500K"},{value:"1000000",label:"Compare at 1M"}],Kt=[{value:"all",label:"Any release date"},{value:"365",label:"Past year"},{value:"730",label:"Past 2 years"},{value:"1095",label:"Past 3 years"}],zt=1440*60*1e3;function Be(t,i){const r=`${i}:`;return t.startsWith(r)?t.slice(r.length):t}function Ke(t,i){const r={inputPrice:t.inputPrice,outputPrice:t.outputPrice,cacheReadPrice:t.cacheReadPrice,cacheWritePrice:t.cacheWritePrice,cacheWrite1hPrice:t.cacheWrite1hPrice};if(i==null)return r;const s=t.pricingTiers.filter(n=>n.min_input_tokens<=i).sort((n,a)=>a.min_input_tokens-n.min_input_tokens)[0];return s?{inputPrice:s.input_price_per_million??r.inputPrice,outputPrice:s.output_price_per_million??r.outputPrice,cacheReadPrice:s.cache_read_price_per_million??r.cacheReadPrice,cacheWritePrice:s.cache_write_price_per_million??r.cacheWritePrice,cacheWrite1hPrice:s.cache_write_1h_price_per_million??r.cacheWrite1hPrice}:r}function ce(t){const i=Number(t);return t.trim()!==""&&Number.isFinite(i)&&i>=0}function w(t){if(t.trim()==="")return!0;const i=Number(t);return Number.isFinite(i)&&i>=0}function Y(t){return t.trim()===""?null:Number(t)}function we(t){return t.map((i,r)=>({id:r,minInputTokens:String(i.min_input_tokens),input:i.input_price_per_million==null?"":String(i.input_price_per_million),output:i.output_price_per_million==null?"":String(i.output_price_per_million),cacheRead:i.cache_read_price_per_million==null?"":String(i.cache_read_price_per_million),cacheWrite:i.cache_write_price_per_million==null?"":String(i.cache_write_price_per_million),cacheWrite1h:i.cache_write_1h_price_per_million==null?"":String(i.cache_write_1h_price_per_million)}))}function Ve(t){const i=new Set;return t.every(r=>{const s=Number(r.minInputTokens),n=[r.input,r.output,r.cacheRead,r.cacheWrite,r.cacheWrite1h].some(a=>a.trim()!=="");return!Number.isInteger(s)||s<=0||i.has(s)||!n?!1:(i.add(s),[r.input,r.output,r.cacheRead,r.cacheWrite,r.cacheWrite1h].every(w))})}function Ye(t){return t.map(i=>({min_input_tokens:Number(i.minInputTokens),...i.input.trim()===""?{}:{input_price_per_million:Number(i.input)},...i.output.trim()===""?{}:{output_price_per_million:Number(i.output)},...i.cacheRead.trim()===""?{}:{cache_read_price_per_million:Number(i.cacheRead)},...i.cacheWrite.trim()===""?{}:{cache_write_price_per_million:Number(i.cacheWrite)},...i.cacheWrite1h.trim()===""?{}:{cache_write_1h_price_per_million:Number(i.cacheWrite1h)}}))}function b({value:t,onChange:i,ariaLabel:r}){return e.jsx("input",{type:"number",step:"any",min:"0",inputMode:"decimal","aria-label":r,value:t,onChange:s=>i(s.target.value),className:"w-28 rounded-md border border-[var(--otari-line)] bg-white px-2 py-1 text-right text-sm tabular-nums focus:border-[var(--otari-brand)] focus:outline-none"})}function He({tiers:t,onChange:i}){const r=(n,a,f)=>{i(t.map(h=>h.id===n?{...h,[a]:f}:h))},s=()=>{const n=t.reduce((a,f)=>Math.max(a,f.id),-1)+1;i([...t,{id:n,minInputTokens:"128000",input:"",output:"",cacheRead:"",cacheWrite:"",cacheWrite1h:""}])};return e.jsxs("div",{className:"flex flex-col gap-2 rounded-lg border border-[var(--otari-line)] p-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-medium text-[var(--otari-ink)]",children:"Long-context price tiers"}),e.jsx("p",{className:"text-xs text-[var(--otari-muted)]",children:"At a threshold, listed rates replace the base rate for the whole request."})]}),e.jsx(A,{size:"sm",variant:"outline",onPress:s,children:"Add tier"})]}),t.map(n=>e.jsxs("div",{className:"flex flex-wrap items-end gap-2 border-t border-[var(--otari-line)] pt-2",children:[e.jsxs("label",{className:"flex flex-col gap-1 text-xs text-[var(--otari-muted)]",children:["Context ≥ tokens",e.jsx("input",{type:"number",min:"1",step:"1",inputMode:"numeric","aria-label":"Tier context threshold",value:n.minInputTokens,onChange:a=>r(n.id,"minInputTokens",a.target.value),className:"w-28 rounded-md border border-[var(--otari-line)] bg-white px-2 py-1 text-right text-sm tabular-nums focus:border-[var(--otari-brand)] focus:outline-none"})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-xs text-[var(--otari-muted)]",children:["Input",e.jsx(b,{value:n.input,onChange:a=>r(n.id,"input",a),ariaLabel:"Tier input price"})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-xs text-[var(--otari-muted)]",children:["Output",e.jsx(b,{value:n.output,onChange:a=>r(n.id,"output",a),ariaLabel:"Tier output price"})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-xs text-[var(--otari-muted)]",children:["Cache read",e.jsx(b,{value:n.cacheRead,onChange:a=>r(n.id,"cacheRead",a),ariaLabel:"Tier cache read price"})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-xs text-[var(--otari-muted)]",children:["Cache write",e.jsx(b,{value:n.cacheWrite,onChange:a=>r(n.id,"cacheWrite",a),ariaLabel:"Tier cache write price"})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-xs text-[var(--otari-muted)]",children:["1h write",e.jsx(b,{value:n.cacheWrite1h,onChange:a=>r(n.id,"cacheWrite1h",a),ariaLabel:"Tier 1 hour cache write price"})]}),e.jsx(A,{size:"sm",variant:"ghost",onPress:()=>i(t.filter(a=>a.id!==n.id)),children:"Remove"})]},n.id))]})}function Rt({source:t}){return t==="configured"?e.jsx(V,{size:"sm",color:"default",children:"configured"}):t==="default"||t==="alias"?e.jsx(V,{size:"sm",color:"accent",children:t}):e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"not priced"})}function oe({label:t,tone:i="info",children:r}){const s=c.useId();return e.jsxs("span",{className:"group relative inline-flex items-center font-normal normal-case",children:[e.jsx("button",{type:"button","aria-label":t,"aria-describedby":s,className:`inline-flex h-4 w-4 items-center justify-center rounded-full border text-[10px] leading-none ${i==="warning"?"border-[#c2843a] text-[#b45309]":"border-[var(--otari-line)] text-[var(--otari-muted)] hover:border-[var(--otari-brand)] hover:text-[var(--otari-brand)]"}`,children:"i"}),e.jsx("span",{id:s,role:"tooltip",className:"pointer-events-none absolute top-full right-0 z-20 mt-1.5 w-72 rounded-lg border border-[var(--otari-line)] bg-[var(--otari-surface)] px-3 py-2 text-left text-xs font-normal whitespace-normal break-words text-[var(--otari-ink)] opacity-0 shadow-lg transition-opacity group-hover:opacity-100 group-focus-within:opacity-100",children:r})]})}function wt(){const t=kt();return t.data?t.data.default_pricing?e.jsx(oe,{label:"How unpriced models are metered",tone:"info",children:"Default pricing is on: models without a configured price are metered using community-maintained rates (the bundled genai-prices dataset). Set a price to override the fallback."}):e.jsxs(oe,{label:"How unpriced models are metered",tone:"warning",children:["Default pricing is off: only models with a configured price are metered.",t.data.require_pricing?" Requests for any other model are rejected (HTTP 402) because require_pricing is on.":" Other models are served without cost tracking."]}):null}function W({label:t,value:i}){return e.jsxs("div",{className:"flex items-baseline justify-between gap-3",children:[e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:t}),e.jsx("span",{className:"text-right text-sm text-[var(--otari-ink)] tabular-nums",children:i})]})}function le({title:t,children:i}){return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-[var(--otari-muted)]",children:t}),i]})}function Vt({row:t}){const i=je(),r=ze(),[s,n]=c.useState(!1),[a,f]=c.useState(""),[h,u]=c.useState(""),[y,j]=c.useState(""),[P,I]=c.useState(""),[p,N]=c.useState(""),[T,O]=c.useState([]),S=()=>{f(t.inputPrice==null?"":String(t.inputPrice)),u(t.outputPrice==null?"":String(t.outputPrice)),j(t.cacheReadPrice==null?"":String(t.cacheReadPrice)),I(t.cacheWritePrice==null?"":String(t.cacheWritePrice)),N(t.cacheWrite1hPrice==null?"":String(t.cacheWrite1hPrice)),O(we(t.pricingTiers)),n(!0)},Z=ce(a)&&ce(h)&&w(y)&&w(P)&&w(p)&&Ve(T),M=()=>{Z&&i.mutate({model_key:t.key,input_price_per_million:Number(a),output_price_per_million:Number(h),cache_read_price_per_million:Y(y),cache_write_price_per_million:Y(P),cache_write_1h_price_per_million:Y(p),pricing_tiers:Ye(T)},{onSuccess:()=>n(!1)})};return s?e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Input $ / 1M"}),e.jsx(b,{value:a,onChange:f,ariaLabel:`Input price for ${t.key}`})]}),e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Output $ / 1M"}),e.jsx(b,{value:h,onChange:u,ariaLabel:`Output price for ${t.key}`})]}),e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Cache read $ / 1M"}),e.jsx(b,{value:y,onChange:j,ariaLabel:`Cache read price for ${t.key}`})]}),e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Cache write $ / 1M"}),e.jsx(b,{value:P,onChange:I,ariaLabel:`Cache write price for ${t.key}`})]}),e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"1h cache write $ / 1M"}),e.jsx(b,{value:p,onChange:N,ariaLabel:`1 hour cache write price for ${t.key}`})]}),e.jsx(He,{tiers:T,onChange:O}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(A,{size:"sm",variant:"primary",isDisabled:i.isPending||!Z,onPress:M,children:"Save"}),e.jsx(A,{size:"sm",variant:"ghost",isDisabled:i.isPending,onPress:()=>n(!1),children:"Cancel"})]}),i.error?e.jsx("span",{className:"text-xs text-red-700",children:be(i.error)}):null]}):e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(W,{label:"Input",value:t.inputPrice==null?"—":`${E(t.inputPrice)} / 1M`}),e.jsx(W,{label:"Output",value:t.outputPrice==null?"—":`${E(t.outputPrice)} / 1M`}),e.jsx(W,{label:"Cache read",value:t.cacheReadPrice==null?"—":`${E(t.cacheReadPrice)} / 1M`}),e.jsx(W,{label:"Cache write",value:t.cacheWritePrice==null?"—":`${E(t.cacheWritePrice)} / 1M`}),e.jsx(W,{label:"1h cache write",value:t.cacheWrite1hPrice==null?"—":`${E(t.cacheWrite1hPrice)} / 1M`}),e.jsx(W,{label:"Context tiers",value:t.pricingTiers.length?`${t.pricingTiers.length} configured`:"—"}),e.jsxs("div",{className:"flex items-center gap-2 pt-1",children:[e.jsx(A,{size:"sm",variant:"outline",onPress:S,children:t.source==="configured"?"Edit price":"Set price"}),t.source==="configured"?e.jsxs(e.Fragment,{children:[e.jsx(Re,{confirmLabel:"Reset",isPending:r.isPending,onConfirm:()=>r.mutate(t.key),children:"Reset"}),e.jsx(oe,{label:"What reset does",children:"Removes the custom price. The model reverts to the default rate (genai-prices) when default pricing is on, otherwise it is metered at no cost."})]}):null,r.error?e.jsx("span",{className:"text-xs text-red-700",children:be(r.error)}):null]})]})}function Yt({row:t,metadata:i,metadataAvailable:r,onMakeAlias:s,onClose:n}){const a=(i==null?void 0:i.input_modalities)??[],f=(i==null?void 0:i.output_modalities)??[],h=Ot.filter(({key:u})=>i==null?void 0:i[u]);return e.jsx(se,{children:e.jsxs(se.Content,{className:"flex flex-col gap-5 p-5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{className:"text-base font-semibold break-all text-[var(--otari-ink)]",children:t.model}),i!=null&&i.deprecated?e.jsx(V,{size:"sm",color:"danger",children:"deprecated"}):null]}),e.jsxs("p",{className:"mt-1 text-xs break-all text-[var(--otari-muted)]",children:["Selector: ",e.jsx("code",{children:t.key})]}),i!=null&&i.family?e.jsx("p",{className:"text-xs text-[var(--otari-muted)]",children:i.family}):null]}),e.jsx("button",{type:"button","aria-label":"Close model details",onClick:n,className:"-mt-1 -mr-1 shrink-0 rounded-md px-1.5 py-0.5 text-lg leading-none text-[var(--otari-muted)] hover:bg-[var(--otari-bg)] hover:text-[var(--otari-ink)]",children:"✕"})]}),i!=null&&i.description?e.jsx("p",{className:"text-sm text-[var(--otari-ink)]",children:i.description}):null,e.jsxs(le,{title:"Pricing",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Rt,{source:t.source}),t.isDiscovered?null:e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"not discovered"})]}),e.jsx(Vt,{row:t},t.key),e.jsx(A,{size:"sm",variant:"outline",onPress:()=>s(t.key),children:"Make an alias"})]}),e.jsxs(le,{title:"Specs",children:[e.jsx(W,{label:"Context window",value:ae(t.contextWindow)}),e.jsx(W,{label:"Max output",value:ae((i==null?void 0:i.max_output_tokens)??null)}),e.jsx(W,{label:"Knowledge cutoff",value:(i==null?void 0:i.knowledge_cutoff)??"—"}),e.jsx(W,{label:"Released",value:Ct(i==null?void 0:i.release_date)}),e.jsx(W,{label:"Open weights",value:i?i.open_weights?"Yes":"No":"—"})]}),e.jsx(le,{title:"Modalities",children:a.length===0&&f.length===0?e.jsx("span",{className:"text-sm text-[var(--otari-muted)]",children:"Unknown."}):e.jsxs("div",{className:"flex flex-col gap-1.5 text-xs text-[var(--otari-muted)]",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-1",children:[e.jsx("span",{children:"In:"}),a.map(u=>e.jsx(V,{size:"sm",color:"default",children:Fe[u]??u},u))]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-1",children:[e.jsx("span",{children:"Out:"}),f.map(u=>e.jsx(V,{size:"sm",color:"default",children:Fe[u]??u},u))]})]})}),e.jsx(le,{title:"Capabilities",children:h.length>0?e.jsx("div",{className:"flex flex-wrap gap-1.5",children:h.map(({key:u,label:y})=>e.jsx(V,{size:"sm",color:"default",children:y},u))}):e.jsx("span",{className:"text-sm text-[var(--otari-muted)]",children:r?"None reported.":"Extended metadata unavailable (models.dev disabled or unreachable)."})})]})})}const Ht=15;function qt({value:t,onChange:i,placeholder:r}){return e.jsx("input",{type:"search",value:t,onChange:s=>i(s.target.value),placeholder:r,"aria-label":r,className:"w-full max-w-xs rounded-md border border-[var(--otari-line)] bg-white px-3 py-1.5 text-sm focus:border-[var(--otari-brand)] focus:outline-none"})}const qe="otari.dashboard.modelsSort",_e={col:"model",dir:"asc"},Ut=["model","released","input","output"];function Gt(){if(typeof window>"u")return _e;try{const t=window.localStorage.getItem(qe);if(!t)return _e;const i=JSON.parse(t);if(Ut.includes(i.col)&&(i.dir==="asc"||i.dir==="desc"))return{col:i.col,dir:i.dir}}catch{}return _e}function Jt({row:t,onClose:i}){const r=je(),s=ze(),[n,a]=c.useState(t.inputPrice==null?"":String(t.inputPrice)),[f,h]=c.useState(t.outputPrice==null?"":String(t.outputPrice)),[u,y]=c.useState(t.cacheReadPrice==null?"":String(t.cacheReadPrice)),[j,P]=c.useState(t.cacheWritePrice==null?"":String(t.cacheWritePrice)),[I,p]=c.useState(t.cacheWrite1hPrice==null?"":String(t.cacheWrite1hPrice)),[N,T]=c.useState(we(t.pricingTiers)),O=ce(n)&&ce(f)&&w(u)&&w(j)&&w(I)&&Ve(N),S=()=>{O&&r.mutate({model_key:t.key,input_price_per_million:Number(n),output_price_per_million:Number(f),cache_read_price_per_million:Y(u),cache_write_price_per_million:Y(j),cache_write_1h_price_per_million:Y(I),pricing_tiers:Ye(N)},{onSuccess:i})};return e.jsxs("div",{className:"flex flex-col gap-3 px-4 py-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("span",{className:"text-xs font-medium break-all text-[var(--otari-muted)]",children:t.key}),e.jsxs("label",{className:"flex items-center gap-1.5 text-xs text-[var(--otari-muted)]",children:["Input $ / 1M",e.jsx(b,{value:n,onChange:a,ariaLabel:`Input price for ${t.key}`})]}),e.jsxs("label",{className:"flex items-center gap-1.5 text-xs text-[var(--otari-muted)]",children:["Output $ / 1M",e.jsx(b,{value:f,onChange:h,ariaLabel:`Output price for ${t.key}`})]}),e.jsxs("label",{className:"flex items-center gap-1.5 text-xs text-[var(--otari-muted)]",children:["Cache read $ / 1M",e.jsx(b,{value:u,onChange:y,ariaLabel:`Cache read price for ${t.key}`})]}),e.jsxs("label",{className:"flex items-center gap-1.5 text-xs text-[var(--otari-muted)]",children:["Cache write $ / 1M",e.jsx(b,{value:j,onChange:P,ariaLabel:`Cache write price for ${t.key}`})]}),e.jsxs("label",{className:"flex items-center gap-1.5 text-xs text-[var(--otari-muted)]",children:["1h cache write $ / 1M",e.jsx(b,{value:I,onChange:p,ariaLabel:`1 hour cache write price for ${t.key}`})]}),e.jsx(A,{size:"sm",variant:"primary",isDisabled:r.isPending||!O,onPress:S,children:r.isPending?"Saving…":"Save"}),e.jsx(A,{size:"sm",variant:"ghost",isDisabled:r.isPending,onPress:i,children:"Cancel"}),t.source==="configured"?e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(Re,{confirmLabel:"Reset",isPending:s.isPending,onConfirm:()=>s.mutate(t.key,{onSuccess:i}),children:"Reset"}),e.jsx(oe,{label:"What reset does",children:"Removes the custom price. The model reverts to the default rate (genai-prices) when default pricing is on, otherwise it is metered at no cost."})]}):null,r.error||s.error?e.jsx("span",{className:"text-xs text-red-700",children:be(r.error??s.error)}):null]}),e.jsx(He,{tiers:N,onChange:T})]})}function Xt({primary:t,secondary:i,rowKey:r,primaryLabel:s,secondaryLabel:n,onEdit:a}){const f=(h,u)=>e.jsx("button",{type:"button","aria-label":`Edit ${u} price for ${r}`,className:"tabular-nums hover:text-[var(--otari-brand-dark)] hover:underline",onClick:y=>{y.stopPropagation(),a()},children:h==null?"—":E(h)});return e.jsxs("span",{className:"inline-flex items-center justify-end gap-1",children:[f(t,s),e.jsx("span",{className:"text-[var(--otari-muted)]",children:"/"}),f(i,n)]})}function Zt({rates:t,rowKey:i,onEdit:r}){const s=[t.cacheReadPrice==null?null:`R ${E(t.cacheReadPrice)}`,t.cacheWritePrice==null?null:`W ${E(t.cacheWritePrice)}`,t.cacheWrite1hPrice==null?null:`1h ${E(t.cacheWrite1hPrice)}`].filter(n=>n!==null);return e.jsx("button",{type:"button","aria-label":`Edit caching price for ${i}`,className:"max-w-44 text-right text-xs leading-5 text-[var(--otari-muted)] hover:text-[var(--otari-brand-dark)] hover:underline",onClick:n=>{n.stopPropagation(),r()},children:s.length>0?s.join(" · "):"Input-rate fallback"})}function Qt({row:t,onEdit:i}){const r=[...t.pricingTiers].sort((n,a)=>n.min_input_tokens-a.min_input_tokens).map(n=>ae(n.min_input_tokens)),s=r.length===0?"Base only":`${r.length} tier${r.length===1?"":"s"} · ≥ ${r.join(", ")}`;return e.jsx("button",{type:"button","aria-label":`Edit pricing policy for ${t.key}`,className:"max-w-40 text-right text-xs leading-5 text-[var(--otari-muted)] hover:text-[var(--otari-brand-dark)] hover:underline",onClick:n=>{n.stopPropagation(),i()},children:s})}function ei({rows:t,isLoading:i,empty:r,sortDescriptor:s,onSortChange:n,selectedKey:a,onSelect:f,onEditPricing:h,comparisonContextTokens:u,selectedKeys:y,onSelectionChange:j}){const P=u==null?"Base":`at ${ae(u)}`,I=[{id:"model",header:"Model",isRowHeader:!0,allowsSorting:!0,cell:p=>e.jsxs("span",{className:"font-medium break-all",children:[p.model,e.jsx("span",{className:"sr-only",children:p.key})]})},{id:"provider",header:"Provider",cell:p=>e.jsx("span",{className:"text-[var(--otari-muted)]",children:p.provider})},{id:"input",header:e.jsxs("span",{className:"inline-flex items-center gap-1",children:[`${P} in / out $ / 1M`,e.jsx(wt,{})]}),align:"end",allowsSorting:!0,cell:p=>{const N=Ke(p,u);return e.jsx(Xt,{primary:N.inputPrice,secondary:N.outputPrice,rowKey:p.key,primaryLabel:"input",secondaryLabel:"output",onEdit:()=>h(p.key)})}},{id:"caching",header:`Caching ${u==null?"policy":P}`,align:"end",cell:p=>e.jsx(Zt,{rates:Ke(p,u),rowKey:p.key,onEdit:()=>h(p.key)})},{id:"policy",header:"Pricing policy",align:"end",cell:p=>e.jsx(Qt,{row:p,onEdit:()=>h(p.key)})}];return e.jsx(Tt,{ariaLabel:"Models",columns:I,rows:t,getRowKey:p=>p.key,isLoading:i,emptyContent:r,selectionMode:"multiple",selectedKeys:y,onSelectionChange:j,sortDescriptor:s,onSortChange:n,onRowAction:f,rowClassName:p=>p.key===a?"bg-[var(--otari-brand-tint)]":void 0})}function ti({providers:t}){return t.length===0?null:e.jsxs(St,{tone:"warning",children:["Could not list ",t.map(i=>i.provider).join(", "),". Check that provider's credentials in config.yml; its models are missing from the list below."]})}function di(){var Te,Le,Ae;const t=gt(),[i]=vt(),r=_t(),s=bt(),n=jt(),a=yt(),f=je(),[h,u]=c.useState(""),[y,j]=c.useState(0),[P,I]=c.useState(Ht),[p,N]=c.useState(null),[T,O]=c.useState(null),[S,Z]=c.useState(Gt),M=Mt(),[Ue,ue]=c.useState(!1),[Ge,ye]=c.useState(!1),[Je,Pe]=c.useState(void 0);c.useEffect(()=>{try{window.localStorage.setItem(qe,JSON.stringify(S))}catch{}},[S]);const[D,Ne]=c.useState(i.get("provider")||"all"),[K,Xe]=c.useState("all"),[H,Ze]=c.useState("all"),[q,Qe]=c.useState("all"),[de,et]=c.useState("0"),[Q,tt]=c.useState(""),[ee,it]=c.useState("all"),[pe,rt]=c.useState(""),F=((Te=a.data)==null?void 0:Te.models)??{},nt=((Le=a.data)==null?void 0:Le.available)??!1,Se=c.useMemo(()=>{var l;return new Set((((l=n.data)==null?void 0:l.providers)??[]).flatMap(m=>m.models.map(o=>o.key)))},[n.data]),lt=l=>{u(l),j(0)},z=l=>m=>{l(m),j(0)},te=c.useMemo(()=>{var k,v,_,$,L,R,$e;const l=new Map($t(s.data??[]).map(d=>[d.model_key,d])),m=[],o=new Set,g=(d,ve,Ee,x)=>{if(o.has(d))return;o.add(d);const C=l.get(d);m.push({key:d,model:Be(ve,Ee),provider:Ee,isDiscovered:Se.has(d),contextWindow:(x==null?void 0:x.contextWindow)??null,inputPrice:C?C.input_price_per_million:(x==null?void 0:x.inputPrice)??null,outputPrice:C?C.output_price_per_million:(x==null?void 0:x.outputPrice)??null,cacheReadPrice:C?C.cache_read_price_per_million:(x==null?void 0:x.cacheReadPrice)??null,cacheWritePrice:C?C.cache_write_price_per_million:(x==null?void 0:x.cacheWritePrice)??null,cacheWrite1hPrice:C?C.cache_write_1h_price_per_million??null:(x==null?void 0:x.cacheWrite1hPrice)??null,pricingTiers:C?C.pricing_tiers??[]:(x==null?void 0:x.pricingTiers)??[],source:C?"configured":(x==null?void 0:x.source)??"none"})};for(const d of((k=r.data)==null?void 0:k.data)??[]){if(d.owned_by===Et)continue;const ve=d.pricing_source==="default"?"default":d.pricing?"configured":"none";g(d.id,d.id,d.owned_by||Oe(d.id),{key:d.id,model:d.id,provider:d.owned_by,contextWindow:d.context_window,inputPrice:((v=d.pricing)==null?void 0:v.input_price_per_million)??null,outputPrice:((_=d.pricing)==null?void 0:_.output_price_per_million)??null,cacheReadPrice:(($=d.pricing)==null?void 0:$.cache_read_price_per_million)??null,cacheWritePrice:((L=d.pricing)==null?void 0:L.cache_write_price_per_million)??null,cacheWrite1hPrice:((R=d.pricing)==null?void 0:R.cache_write_1h_price_per_million)??null,pricingTiers:(($e=d.pricing)==null?void 0:$e.pricing_tiers)??[],source:ve})}for(const d of l.keys())g(d,d,Oe(d));return m},[r.data,s.data,Se]),Ce=c.useMemo(()=>new Map(te.map(l=>[l.key,l])),[te]),ie=c.useMemo(()=>{var o,g,k;const l=te.map(v=>{var _,$;return{...v,contextWindow:v.contextWindow??((_=F[v.key])==null?void 0:_.context_window)??null,releaseDate:(($=F[v.key])==null?void 0:$.release_date)??null}}),m=new Set(l.map(v=>v.key));for(const v of((o=n.data)==null?void 0:o.providers)??[])for(const _ of v.models)m.has(_.key)||(m.add(_.key),l.push({key:_.key,model:Be(_.key,v.provider),provider:v.provider,isDiscovered:!0,contextWindow:((g=F[_.key])==null?void 0:g.context_window)??null,releaseDate:((k=F[_.key])==null?void 0:k.release_date)??null,inputPrice:null,outputPrice:null,cacheReadPrice:null,cacheWritePrice:null,cacheWrite1hPrice:null,pricingTiers:[],source:"none"}));return l},[te,n.data,F]),at=(((Ae=n.data)==null?void 0:Ae.providers)??[]).filter(l=>!l.ok),re=c.useMemo(()=>{const l=Array.from(new Set(ie.map(m=>m.provider))).sort((m,o)=>m.localeCompare(o));return[{value:"all",label:"All providers"},...l.map(m=>({value:m,label:m}))]},[ie]);c.useEffect(()=>{D==="all"||re.length<=1||re.some(l=>l.value===D)||Ne("all")},[re,D]);const U=h.trim().toLowerCase(),he=Number(de)||0,me=Q===""?Number.POSITIVE_INFINITY:Number(Q),st=pe===""?null:Number(pe),xe=ee==="all"?null:Date.now()-Number(ee)*zt,G=c.useMemo(()=>{const l=o=>{if(U&&!o.key.toLowerCase().includes(U)&&!o.provider.toLowerCase().includes(U)||D!=="all"&&o.provider!==D||K==="configured"&&o.source!=="configured"||K==="default"&&o.source!=="default"||K==="priced"&&o.inputPrice==null||K==="unpriced"&&o.inputPrice!=null||H==="discovered"&&!o.isDiscovered||H==="custom"&&o.isDiscovered)return!1;if(q!=="all"){const g=De.find(v=>v.value===q),k=F[o.key];if(!g||!k||!g.test(k))return!1}if(he>0&&(o.contextWindow==null||o.contextWindowme))return!1;if(xe!=null){const g=o.releaseDate?Date.parse(o.releaseDate):Number.NaN;if(Number.isNaN(g)||g{const k=S.dir==="asc"?1:-1;if(S.col==="model")return o.model.localeCompare(g.model)*k;if(S.col==="released"){const L=o.releaseDate??null,R=g.releaseDate??null;return!L&&!R?o.model.localeCompare(g.model):L?R?(LR?1:0)*k||o.model.localeCompare(g.model):-1:1}const v=L=>S.col==="input"?L.inputPrice:L.outputPrice,_=v(o),$=v(g);return _==null&&$==null?o.model.localeCompare(g.model):_==null?1:$==null?-1:(_-$)*k||o.model.localeCompare(g.model)};return ie.filter(l).sort(m)},[ie,U,D,K,H,q,he,me,xe,F,S]),J=G.length,ct=Math.max(1,Math.ceil(J/P)),ke=Math.min(y,ct-1),Me=ke*P,fe=G.slice(Me,Me+P),ot={column:S.col,direction:S.dir==="asc"?"ascending":"descending"},ut=l=>{Z({col:String(l.column),dir:l.direction==="ascending"?"asc":"desc"}),j(0)},dt=l=>N(m=>m===l?null:l),ge=fe.map(l=>l.key),X=Wt(M.selectedKeys,ge),pt=ge.length>0&&X.length===ge.length&&J>X.length,ht=M.allMatching?G.map(l=>l.key):X,We=M.allMatching?J:X.length,Ie=p?G.find(l=>l.key===p)??Ce.get(p)??null:null,mt=async l=>{ye(!0),Pe(void 0);try{for(const m of ht)await f.mutateAsync({model_key:m,input_price_per_million:l.input_price_per_million,output_price_per_million:l.output_price_per_million,cache_read_price_per_million:l.cache_read_price_per_million??null,cache_write_price_per_million:l.cache_write_price_per_million??null,cache_write_1h_price_per_million:null,pricing_tiers:[]});M.clear(),ue(!1)}catch(m){Pe(m)}finally{ye(!1)}},xt=r.isLoading||s.isLoading||n.isLoading,ft=U!==""||D!=="all"||K!=="all"||H!=="all"||q!=="all"||de!=="0"||Q!==""||ee!=="all"?"No models match your filters.":"No models yet. Add a provider on the Providers page, or price a model below.",ne=T?G.find(l=>l.key===T)??Ce.get(T)??null:null;return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(Pt,{title:"Models",description:"Every model your providers can serve. Set a price on any model so budgets and usage tracking work."}),e.jsx(Nt,{error:r.error??s.error??n.error??a.error}),e.jsxs("div",{className:`grid gap-4 lg:items-start ${ne?"lg:grid-cols-[minmax(0,1fr)_360px]":"grid-cols-1"}`,children:[e.jsxs("div",{className:"flex min-w-0 flex-col gap-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(qt,{value:h,onChange:lt,placeholder:"Search models…"}),e.jsx(B,{ariaLabel:"Filter by provider",value:D,onChange:z(Ne),options:re}),e.jsx(B,{ariaLabel:"Filter by pricing",value:K,onChange:z(Xe),options:[{value:"all",label:"Any pricing"},{value:"configured",label:"Custom price"},{value:"default",label:"Default price"},{value:"priced",label:"Priced"},{value:"unpriced",label:"Unpriced"}]}),e.jsx(B,{ariaLabel:"Filter by source",value:H,onChange:z(Ze),options:[{value:"all",label:"Any source"},{value:"discovered",label:"Discovered"},{value:"custom",label:"Custom (not discovered)"}]}),e.jsx(B,{ariaLabel:"Filter by capability",value:q,onChange:z(Qe),options:[{value:"all",label:"Any capability"},...De.map(l=>({value:l.value,label:l.label}))]}),e.jsx(B,{ariaLabel:"Minimum context window",value:de,onChange:z(et),options:Dt}),e.jsx(B,{ariaLabel:"Maximum input price",value:Q,onChange:z(tt),options:Ft}),e.jsx(B,{ariaLabel:"Compare prices at context",value:pe,onChange:rt,options:Bt}),e.jsx(B,{ariaLabel:"Filter by release date",value:ee,onChange:z(it),options:Kt})]}),e.jsx(ti,{providers:at}),X.length>0?e.jsx(It,{selectedCount:We,allMatching:M.allMatching,matchingTotal:J,canSelectAllMatching:pt,onSelectAllMatching:M.enableAllMatching,onClear:M.clear,children:e.jsx(A,{size:"sm",variant:"primary",onPress:()=>ue(!0),children:"Set pricing"})}):null,e.jsx(ei,{rows:fe,isLoading:xt,empty:ft,sortDescriptor:ot,onSortChange:ut,selectedKey:T,onSelect:O,onEditPricing:dt,comparisonContextTokens:st,selectedKeys:M.selectedKeys,onSelectionChange:M.onSelectionChange}),Ie?e.jsx(se,{children:e.jsxs(se.Content,{className:"p-0",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--otari-line)] px-4 py-2",children:[e.jsx("span",{className:"text-sm font-medium text-[var(--otari-ink)]",children:"Edit pricing"}),e.jsx(A,{size:"sm",variant:"ghost",onPress:()=>N(null),children:"Close"})]}),e.jsx(Jt,{row:Ie,onClose:()=>N(null)})]})}):null,e.jsx(Lt,{page:ke,pageSize:P,total:J,rowsOnPage:fe.length,onPageChange:j,onPageSizeChange:l=>{I(l),j(0)},pageSizeOptions:[15,25,50]})]}),ne?e.jsx("aside",{className:"lg:sticky lg:top-4",children:e.jsx(Yt,{row:ne,metadata:F[ne.key],metadataAvailable:nt,onMakeAlias:l=>t(`/aliases?target=${encodeURIComponent(l)}`),onClose:()=>O(null)})}):null]}),e.jsx(At,{isOpen:Ue,onOpenChange:ue,targetCount:We,isPending:Ge,error:Je,onSubmit:mt,title:"Set pricing",description:l=>`Apply these per-1M rates to ${l.toLocaleString()} selected ${l===1?"model":"models"}. This replaces each model's price; pricing tiers and the 1h cache rate are cleared. Edit a single model for tiers.`})]})}export{di as ModelsPage}; diff --git a/src/gateway/static/dashboard/assets/ModelsPage-DAJitSnp.js b/src/gateway/static/dashboard/assets/ModelsPage-DAJitSnp.js deleted file mode 100644 index 95c1b762..00000000 --- a/src/gateway/static/dashboard/assets/ModelsPage-DAJitSnp.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./tanstack-query-1t81HyiD.js";import{i as rt,u as nt,r as c}from"./react-dgEcD0HR.js";import{v as at,w as st,f as lt,x as ct,P as ot,E as ut,F as E,I as dt,y as ne,z as pt,A as ht,B as xt,D as A,G as $e,H as Ee,C as Ae,i as me}from"./index-d3Tp3DkF.js";import{T as mt,a as ft,d as Ce,b as re,L as vt,e as U,c as bt}from"./Table-CLdjdyTx.js";import{B as L,d as ke,f as K}from"./heroui-BX6JwHY-.js";function We(t){const i=t.indexOf(":");return i>0?t.slice(0,i):"—"}function gt(t,i=Date.now()){const r=new Map;for(const n of t){const a=r.get(n.model_key)??[];a.push(n),r.set(n.model_key,a)}const s=[];for(const n of r.values()){const a=[...n].sort((h,p)=>Date.parse(h.effective_at)-Date.parse(p.effective_at)),d=[...a].reverse().find(h=>Date.parse(h.effective_at)<=i);s.push(d??a[0])}return s.sort((n,a)=>n.model_key.localeCompare(a.model_key))}const _t="otari",Me=[{value:"vision",label:"Vision",test:t=>Array.isArray(t.input_modalities)&&t.input_modalities.includes("image")},{value:"tool_call",label:"Tool calling",test:t=>!!t.tool_call},{value:"reasoning",label:"Reasoning",test:t=>!!t.reasoning},{value:"structured_output",label:"Structured output",test:t=>!!t.structured_output},{value:"attachment",label:"Attachments",test:t=>!!t.attachment},{value:"audio",label:"Audio",test:t=>Array.isArray(t.input_modalities)&&t.input_modalities.includes("audio")},{value:"pdf",label:"PDF",test:t=>Array.isArray(t.input_modalities)&&t.input_modalities.includes("pdf")}],jt=[{key:"reasoning",label:"Reasoning"},{key:"tool_call",label:"Tool calling"},{key:"structured_output",label:"Structured output"},{key:"attachment",label:"Attachments"},{key:"temperature",label:"Temperature"}],Te={text:"Text",image:"Image",audio:"Audio",video:"Video",pdf:"PDF"},Pt=[{value:"0",label:"Any context"},{value:"8000",label:"≥ 8K"},{value:"32000",label:"≥ 32K"},{value:"128000",label:"≥ 128K"},{value:"200000",label:"≥ 200K"},{value:"1000000",label:"≥ 1M"}],yt=[{value:"",label:"Any price"},{value:"1",label:"≤ $1 / 1M in"},{value:"3",label:"≤ $3 / 1M in"},{value:"10",label:"≤ $10 / 1M in"},{value:"30",label:"≤ $30 / 1M in"}],Nt=[{value:"",label:"Base prices"},{value:"8000",label:"Compare at 8K"},{value:"128000",label:"Compare at 128K"},{value:"200000",label:"Compare at 200K"},{value:"500000",label:"Compare at 500K"},{value:"1000000",label:"Compare at 1M"}],St=[{value:"all",label:"Any release date"},{value:"365",label:"Past year"},{value:"730",label:"Past 2 years"},{value:"1095",label:"Past 3 years"}],Ct=1440*60*1e3;function Ie(t,i){const r=`${i}:`;return t.startsWith(r)?t.slice(r.length):t}function kt(t,i){const r={inputPrice:t.inputPrice,outputPrice:t.outputPrice,cacheReadPrice:t.cacheReadPrice,cacheWritePrice:t.cacheWritePrice,cacheWrite1hPrice:t.cacheWrite1hPrice};if(i==null)return r;const s=t.pricingTiers.filter(n=>n.min_input_tokens<=i).sort((n,a)=>a.min_input_tokens-n.min_input_tokens)[0];return s?{inputPrice:s.input_price_per_million??r.inputPrice,outputPrice:s.output_price_per_million??r.outputPrice,cacheReadPrice:s.cache_read_price_per_million??r.cacheReadPrice,cacheWritePrice:s.cache_write_price_per_million??r.cacheWritePrice,cacheWrite1hPrice:s.cache_write_1h_price_per_million??r.cacheWrite1hPrice}:r}function ae(t){const i=Number(t);return t.trim()!==""&&Number.isFinite(i)&&i>=0}function R(t){if(t.trim()==="")return!0;const i=Number(t);return Number.isFinite(i)&&i>=0}function V(t){return t.trim()===""?null:Number(t)}function De(t){return t.map((i,r)=>({id:r,minInputTokens:String(i.min_input_tokens),input:i.input_price_per_million==null?"":String(i.input_price_per_million),output:i.output_price_per_million==null?"":String(i.output_price_per_million),cacheRead:i.cache_read_price_per_million==null?"":String(i.cache_read_price_per_million),cacheWrite:i.cache_write_price_per_million==null?"":String(i.cache_write_price_per_million),cacheWrite1h:i.cache_write_1h_price_per_million==null?"":String(i.cache_write_1h_price_per_million)}))}function Oe(t){const i=new Set;return t.every(r=>{const s=Number(r.minInputTokens),n=[r.input,r.output,r.cacheRead,r.cacheWrite,r.cacheWrite1h].some(a=>a.trim()!=="");return!Number.isInteger(s)||s<=0||i.has(s)||!n?!1:(i.add(s),[r.input,r.output,r.cacheRead,r.cacheWrite,r.cacheWrite1h].every(R))})}function Fe(t){return t.map(i=>({min_input_tokens:Number(i.minInputTokens),...i.input.trim()===""?{}:{input_price_per_million:Number(i.input)},...i.output.trim()===""?{}:{output_price_per_million:Number(i.output)},...i.cacheRead.trim()===""?{}:{cache_read_price_per_million:Number(i.cacheRead)},...i.cacheWrite.trim()===""?{}:{cache_write_price_per_million:Number(i.cacheWrite)},...i.cacheWrite1h.trim()===""?{}:{cache_write_1h_price_per_million:Number(i.cacheWrite1h)}}))}function j({value:t,onChange:i,ariaLabel:r}){return e.jsx("input",{type:"number",step:"any",min:"0",inputMode:"decimal","aria-label":r,value:t,onChange:s=>i(s.target.value),className:"w-28 rounded-md border border-[var(--otari-line)] bg-white px-2 py-1 text-right text-sm tabular-nums focus:border-[var(--otari-brand)] focus:outline-none"})}function ze({tiers:t,onChange:i}){const r=(n,a,d)=>{i(t.map(h=>h.id===n?{...h,[a]:d}:h))},s=()=>{const n=t.reduce((a,d)=>Math.max(a,d.id),-1)+1;i([...t,{id:n,minInputTokens:"128000",input:"",output:"",cacheRead:"",cacheWrite:"",cacheWrite1h:""}])};return e.jsxs("div",{className:"flex flex-col gap-2 rounded-lg border border-[var(--otari-line)] p-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-medium text-[var(--otari-ink)]",children:"Long-context price tiers"}),e.jsx("p",{className:"text-xs text-[var(--otari-muted)]",children:"At a threshold, listed rates replace the base rate for the whole request."})]}),e.jsx(L,{size:"sm",variant:"outline",onPress:s,children:"Add tier"})]}),t.map(n=>e.jsxs("div",{className:"flex flex-wrap items-end gap-2 border-t border-[var(--otari-line)] pt-2",children:[e.jsxs("label",{className:"flex flex-col gap-1 text-xs text-[var(--otari-muted)]",children:["Context ≥ tokens",e.jsx("input",{type:"number",min:"1",step:"1",inputMode:"numeric","aria-label":"Tier context threshold",value:n.minInputTokens,onChange:a=>r(n.id,"minInputTokens",a.target.value),className:"w-28 rounded-md border border-[var(--otari-line)] bg-white px-2 py-1 text-right text-sm tabular-nums focus:border-[var(--otari-brand)] focus:outline-none"})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-xs text-[var(--otari-muted)]",children:["Input",e.jsx(j,{value:n.input,onChange:a=>r(n.id,"input",a),ariaLabel:"Tier input price"})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-xs text-[var(--otari-muted)]",children:["Output",e.jsx(j,{value:n.output,onChange:a=>r(n.id,"output",a),ariaLabel:"Tier output price"})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-xs text-[var(--otari-muted)]",children:["Cache read",e.jsx(j,{value:n.cacheRead,onChange:a=>r(n.id,"cacheRead",a),ariaLabel:"Tier cache read price"})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-xs text-[var(--otari-muted)]",children:["Cache write",e.jsx(j,{value:n.cacheWrite,onChange:a=>r(n.id,"cacheWrite",a),ariaLabel:"Tier cache write price"})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-xs text-[var(--otari-muted)]",children:["1h write",e.jsx(j,{value:n.cacheWrite1h,onChange:a=>r(n.id,"cacheWrite1h",a),ariaLabel:"Tier 1 hour cache write price"})]}),e.jsx(L,{size:"sm",variant:"ghost",onPress:()=>i(t.filter(a=>a.id!==n.id)),children:"Remove"})]},n.id))]})}function Wt({source:t}){return t==="configured"?e.jsx(K,{size:"sm",color:"default",children:"configured"}):t==="default"||t==="alias"?e.jsx(K,{size:"sm",color:"accent",children:t}):e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"not priced"})}function se({label:t,tone:i="info",children:r}){const s=c.useId();return e.jsxs("span",{className:"group relative inline-flex items-center font-normal normal-case",children:[e.jsx("button",{type:"button","aria-label":t,"aria-describedby":s,className:`inline-flex h-4 w-4 items-center justify-center rounded-full border text-[10px] leading-none ${i==="warning"?"border-[#c2843a] text-[#b45309]":"border-[var(--otari-line)] text-[var(--otari-muted)] hover:border-[var(--otari-brand)] hover:text-[var(--otari-brand)]"}`,children:"i"}),e.jsx("span",{id:s,role:"tooltip",className:"pointer-events-none absolute top-full right-0 z-20 mt-1.5 w-72 rounded-lg border border-[var(--otari-line)] bg-[var(--otari-surface)] px-3 py-2 text-left text-xs font-normal whitespace-normal break-words text-[var(--otari-ink)] opacity-0 shadow-lg transition-opacity group-hover:opacity-100 group-focus-within:opacity-100",children:r})]})}function Mt(){const t=xt();return t.data?t.data.default_pricing?e.jsx(se,{label:"How unpriced models are metered",tone:"info",children:"Default pricing is on: models without a configured price are metered using community-maintained rates (the bundled genai-prices dataset). Set a price to override the fallback."}):e.jsxs(se,{label:"How unpriced models are metered",tone:"warning",children:["Default pricing is off: only models with a configured price are metered.",t.data.require_pricing?" Requests for any other model are rejected (HTTP 402) because require_pricing is on.":" Other models are served without cost tracking."]}):null}function T({label:t,value:i}){return e.jsxs("div",{className:"flex items-baseline justify-between gap-3",children:[e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:t}),e.jsx("span",{className:"text-right text-sm text-[var(--otari-ink)] tabular-nums",children:i})]})}function ie({title:t,children:i}){return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-[var(--otari-muted)]",children:t}),i]})}function Tt({row:t}){const i=$e(),r=Ee(),[s,n]=c.useState(!1),[a,d]=c.useState(""),[h,p]=c.useState(""),[v,P]=c.useState(""),[m,S]=c.useState(""),[k,W]=c.useState(""),[D,y]=c.useState([]),Y=()=>{d(t.inputPrice==null?"":String(t.inputPrice)),p(t.outputPrice==null?"":String(t.outputPrice)),P(t.cacheReadPrice==null?"":String(t.cacheReadPrice)),S(t.cacheWritePrice==null?"":String(t.cacheWritePrice)),W(t.cacheWrite1hPrice==null?"":String(t.cacheWrite1hPrice)),y(De(t.pricingTiers)),n(!0)},M=ae(a)&&ae(h)&&R(v)&&R(m)&&R(k)&&Oe(D),G=()=>{M&&i.mutate({model_key:t.key,input_price_per_million:Number(a),output_price_per_million:Number(h),cache_read_price_per_million:V(v),cache_write_price_per_million:V(m),cache_write_1h_price_per_million:V(k),pricing_tiers:Fe(D)},{onSuccess:()=>n(!1)})};return s?e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Input $ / 1M"}),e.jsx(j,{value:a,onChange:d,ariaLabel:`Input price for ${t.key}`})]}),e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Output $ / 1M"}),e.jsx(j,{value:h,onChange:p,ariaLabel:`Output price for ${t.key}`})]}),e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Cache read $ / 1M"}),e.jsx(j,{value:v,onChange:P,ariaLabel:`Cache read price for ${t.key}`})]}),e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Cache write $ / 1M"}),e.jsx(j,{value:m,onChange:S,ariaLabel:`Cache write price for ${t.key}`})]}),e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"1h cache write $ / 1M"}),e.jsx(j,{value:k,onChange:W,ariaLabel:`1 hour cache write price for ${t.key}`})]}),e.jsx(ze,{tiers:D,onChange:y}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(L,{size:"sm",variant:"primary",isDisabled:i.isPending||!M,onPress:G,children:"Save"}),e.jsx(L,{size:"sm",variant:"ghost",isDisabled:i.isPending,onPress:()=>n(!1),children:"Cancel"})]}),i.error?e.jsx("span",{className:"text-xs text-red-700",children:me(i.error)}):null]}):e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(T,{label:"Input",value:t.inputPrice==null?"—":`${A(t.inputPrice)} / 1M`}),e.jsx(T,{label:"Output",value:t.outputPrice==null?"—":`${A(t.outputPrice)} / 1M`}),e.jsx(T,{label:"Cache read",value:t.cacheReadPrice==null?"—":`${A(t.cacheReadPrice)} / 1M`}),e.jsx(T,{label:"Cache write",value:t.cacheWritePrice==null?"—":`${A(t.cacheWritePrice)} / 1M`}),e.jsx(T,{label:"1h cache write",value:t.cacheWrite1hPrice==null?"—":`${A(t.cacheWrite1hPrice)} / 1M`}),e.jsx(T,{label:"Context tiers",value:t.pricingTiers.length?`${t.pricingTiers.length} configured`:"—"}),e.jsxs("div",{className:"flex items-center gap-2 pt-1",children:[e.jsx(L,{size:"sm",variant:"outline",onPress:Y,children:t.source==="configured"?"Edit price":"Set price"}),t.source==="configured"?e.jsxs(e.Fragment,{children:[e.jsx(Ae,{confirmLabel:"Reset",isPending:r.isPending,onConfirm:()=>r.mutate(t.key),children:"Reset"}),e.jsx(se,{label:"What reset does",children:"Removes the custom price. The model reverts to the default rate (genai-prices) when default pricing is on, otherwise it is metered at no cost."})]}):null,r.error?e.jsx("span",{className:"text-xs text-red-700",children:me(r.error)}):null]})]})}function It({row:t,metadata:i,metadataAvailable:r,onMakeAlias:s,onClose:n}){const a=(i==null?void 0:i.input_modalities)??[],d=(i==null?void 0:i.output_modalities)??[],h=jt.filter(({key:p})=>i==null?void 0:i[p]);return e.jsx(ke,{children:e.jsxs(ke.Content,{className:"flex flex-col gap-5 p-5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{className:"text-base font-semibold break-all text-[var(--otari-ink)]",children:t.model}),i!=null&&i.deprecated?e.jsx(K,{size:"sm",color:"danger",children:"deprecated"}):null]}),e.jsxs("p",{className:"mt-1 text-xs break-all text-[var(--otari-muted)]",children:["Selector: ",e.jsx("code",{children:t.key})]}),i!=null&&i.family?e.jsx("p",{className:"text-xs text-[var(--otari-muted)]",children:i.family}):null]}),e.jsx("button",{type:"button","aria-label":"Close model details",onClick:n,className:"-mt-1 -mr-1 shrink-0 rounded-md px-1.5 py-0.5 text-lg leading-none text-[var(--otari-muted)] hover:bg-[var(--otari-bg)] hover:text-[var(--otari-ink)]",children:"✕"})]}),i!=null&&i.description?e.jsx("p",{className:"text-sm text-[var(--otari-ink)]",children:i.description}):null,e.jsxs(ie,{title:"Pricing",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Wt,{source:t.source}),t.isDiscovered?null:e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"not discovered"})]}),e.jsx(Tt,{row:t},t.key),e.jsx(L,{size:"sm",variant:"outline",onPress:()=>s(t.key),children:"Make an alias"})]}),e.jsxs(ie,{title:"Specs",children:[e.jsx(T,{label:"Context window",value:ne(t.contextWindow)}),e.jsx(T,{label:"Max output",value:ne((i==null?void 0:i.max_output_tokens)??null)}),e.jsx(T,{label:"Knowledge cutoff",value:(i==null?void 0:i.knowledge_cutoff)??"—"}),e.jsx(T,{label:"Released",value:ht(i==null?void 0:i.release_date)}),e.jsx(T,{label:"Open weights",value:i?i.open_weights?"Yes":"No":"—"})]}),e.jsx(ie,{title:"Modalities",children:a.length===0&&d.length===0?e.jsx("span",{className:"text-sm text-[var(--otari-muted)]",children:"Unknown."}):e.jsxs("div",{className:"flex flex-col gap-1.5 text-xs text-[var(--otari-muted)]",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-1",children:[e.jsx("span",{children:"In:"}),a.map(p=>e.jsx(K,{size:"sm",color:"default",children:Te[p]??p},p))]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-1",children:[e.jsx("span",{children:"Out:"}),d.map(p=>e.jsx(K,{size:"sm",color:"default",children:Te[p]??p},p))]})]})}),e.jsx(ie,{title:"Capabilities",children:h.length>0?e.jsx("div",{className:"flex flex-wrap gap-1.5",children:h.map(({key:p,label:v})=>e.jsx(K,{size:"sm",color:"default",children:v},p))}):e.jsx("span",{className:"text-sm text-[var(--otari-muted)]",children:r?"None reported.":"Extended metadata unavailable (models.dev disabled or unreachable)."})})]})})}const Lt=15,$t=[{value:"15",label:"15 per page"},{value:"25",label:"25 per page"},{value:"50",label:"50 per page"}];function Et({value:t,onChange:i,placeholder:r}){return e.jsx("input",{type:"search",value:t,onChange:s=>i(s.target.value),placeholder:r,"aria-label":r,className:"w-full max-w-xs rounded-md border border-[var(--otari-line)] bg-white px-3 py-1.5 text-sm focus:border-[var(--otari-brand)] focus:outline-none"})}function At({page:t,pageCount:i,total:r,pageSize:s,onPage:n,onPageSize:a}){return e.jsxs("div",{className:"flex items-center justify-between px-1 pt-1 text-sm text-[var(--otari-muted)]",children:[e.jsxs("span",{children:[i>1?`Page ${t+1} of ${i} · `:"",pt(r)," model",r===1?"":"s"]}),e.jsxs("span",{className:"inline-flex gap-2",children:[e.jsx(E,{ariaLabel:"Rows per page",value:String(s),onChange:d=>a(Number(d)),options:$t}),i>1?e.jsxs(e.Fragment,{children:[e.jsx(L,{size:"sm",variant:"outline",isDisabled:t===0,onPress:()=>n(t-1),children:"Prev"}),e.jsx(L,{size:"sm",variant:"outline",isDisabled:t>=i-1,onPress:()=>n(t+1),children:"Next"})]}):null]})]})}const Be="otari.dashboard.modelsSort",xe={col:"model",dir:"asc"},Dt=["model","released","input","output"];function Ot(){if(typeof window>"u")return xe;try{const t=window.localStorage.getItem(Be);if(!t)return xe;const i=JSON.parse(t);if(Dt.includes(i.col)&&(i.dir==="asc"||i.dir==="desc"))return{col:i.col,dir:i.dir}}catch{}return xe}function Le({label:t,col:i,sort:r,onSort:s,align:n="left",info:a}){const d=r.col===i;return e.jsx(re,{className:n==="right"?"text-right":void 0,ariaSort:d?r.dir==="asc"?"ascending":"descending":"none",children:e.jsxs("span",{className:`inline-flex items-center gap-1.5 ${n==="right"?"flex-row-reverse":""}`,children:[e.jsxs("button",{type:"button",onClick:()=>s(i),className:`inline-flex items-center gap-1 ${n==="right"?"flex-row-reverse":""} hover:text-[var(--otari-ink)]`,children:[t,e.jsx("span",{className:"text-[10px] text-[var(--otari-muted)]",children:d?r.dir==="asc"?"▲":"▼":"↕"})]}),a]})})}function Ft({row:t,onClose:i}){const r=$e(),s=Ee(),[n,a]=c.useState(t.inputPrice==null?"":String(t.inputPrice)),[d,h]=c.useState(t.outputPrice==null?"":String(t.outputPrice)),[p,v]=c.useState(t.cacheReadPrice==null?"":String(t.cacheReadPrice)),[P,m]=c.useState(t.cacheWritePrice==null?"":String(t.cacheWritePrice)),[S,k]=c.useState(t.cacheWrite1hPrice==null?"":String(t.cacheWrite1hPrice)),[W,D]=c.useState(De(t.pricingTiers)),y=ae(n)&&ae(d)&&R(p)&&R(P)&&R(S)&&Oe(W),Y=()=>{y&&r.mutate({model_key:t.key,input_price_per_million:Number(n),output_price_per_million:Number(d),cache_read_price_per_million:V(p),cache_write_price_per_million:V(P),cache_write_1h_price_per_million:V(S),pricing_tiers:Fe(W)},{onSuccess:i})};return e.jsxs("div",{className:"flex flex-col gap-3 px-4 py-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("span",{className:"text-xs font-medium break-all text-[var(--otari-muted)]",children:t.key}),e.jsxs("label",{className:"flex items-center gap-1.5 text-xs text-[var(--otari-muted)]",children:["Input $ / 1M",e.jsx(j,{value:n,onChange:a,ariaLabel:`Input price for ${t.key}`})]}),e.jsxs("label",{className:"flex items-center gap-1.5 text-xs text-[var(--otari-muted)]",children:["Output $ / 1M",e.jsx(j,{value:d,onChange:h,ariaLabel:`Output price for ${t.key}`})]}),e.jsxs("label",{className:"flex items-center gap-1.5 text-xs text-[var(--otari-muted)]",children:["Cache read $ / 1M",e.jsx(j,{value:p,onChange:v,ariaLabel:`Cache read price for ${t.key}`})]}),e.jsxs("label",{className:"flex items-center gap-1.5 text-xs text-[var(--otari-muted)]",children:["Cache write $ / 1M",e.jsx(j,{value:P,onChange:m,ariaLabel:`Cache write price for ${t.key}`})]}),e.jsxs("label",{className:"flex items-center gap-1.5 text-xs text-[var(--otari-muted)]",children:["1h cache write $ / 1M",e.jsx(j,{value:S,onChange:k,ariaLabel:`1 hour cache write price for ${t.key}`})]}),e.jsx(L,{size:"sm",variant:"primary",isDisabled:r.isPending||!y,onPress:Y,children:r.isPending?"Saving…":"Save"}),e.jsx(L,{size:"sm",variant:"ghost",isDisabled:r.isPending,onPress:i,children:"Cancel"}),t.source==="configured"?e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(Ae,{confirmLabel:"Reset",isPending:s.isPending,onConfirm:()=>s.mutate(t.key,{onSuccess:i}),children:"Reset"}),e.jsx(se,{label:"What reset does",children:"Removes the custom price. The model reverts to the default rate (genai-prices) when default pricing is on, otherwise it is metered at no cost."})]}):null,r.error||s.error?e.jsx("span",{className:"text-xs text-red-700",children:me(r.error??s.error)}):null]}),e.jsx(ze,{tiers:W,onChange:D})]})}function zt({primary:t,secondary:i,rowKey:r,primaryLabel:s,secondaryLabel:n,onEdit:a}){const d=(h,p)=>e.jsx("button",{type:"button","aria-label":`Edit ${p} price for ${r}`,className:"tabular-nums hover:text-[var(--otari-brand-dark)] hover:underline",onClick:v=>{v.stopPropagation(),a()},children:h==null?"—":A(h)});return e.jsxs("span",{className:"inline-flex items-center justify-end gap-1",children:[d(t,s),e.jsx("span",{className:"text-[var(--otari-muted)]",children:"/"}),d(i,n)]})}function Bt({rates:t,rowKey:i,onEdit:r}){const s=[t.cacheReadPrice==null?null:`R ${A(t.cacheReadPrice)}`,t.cacheWritePrice==null?null:`W ${A(t.cacheWritePrice)}`,t.cacheWrite1hPrice==null?null:`1h ${A(t.cacheWrite1hPrice)}`].filter(n=>n!==null);return e.jsx("button",{type:"button","aria-label":`Edit caching price for ${i}`,className:"max-w-44 text-right text-xs leading-5 text-[var(--otari-muted)] hover:text-[var(--otari-brand-dark)] hover:underline",onClick:n=>{n.stopPropagation(),r()},children:s.length>0?s.join(" · "):"Input-rate fallback"})}function Rt({row:t,onEdit:i}){const r=[...t.pricingTiers].sort((n,a)=>n.min_input_tokens-a.min_input_tokens).map(n=>ne(n.min_input_tokens)),s=r.length===0?"Base only":`${r.length} tier${r.length===1?"":"s"} · ≥ ${r.join(", ")}`;return e.jsx("button",{type:"button","aria-label":`Edit pricing policy for ${t.key}`,className:"max-w-40 text-right text-xs leading-5 text-[var(--otari-muted)] hover:text-[var(--otari-brand-dark)] hover:underline",onClick:n=>{n.stopPropagation(),i()},children:s})}function Kt({rows:t,isLoading:i,empty:r,sort:s,onSort:n,selectedKey:a,onSelect:d,pricingKey:h,onSetPricingKey:p,comparisonContextTokens:v}){const P=v==null?"Base":`at ${ne(v)}`;return e.jsxs(mt,{children:[e.jsx(ft,{children:e.jsxs(Ce,{children:[e.jsx(Le,{label:"Model",col:"model",sort:s,onSort:n}),e.jsx(re,{children:"Provider"}),e.jsx(Le,{label:`${P} in / out $ / 1M`,col:"input",sort:s,onSort:n,align:"right",info:e.jsx(Mt,{})}),e.jsxs(re,{className:"text-right",children:["Caching ",v==null?"policy":P]}),e.jsx(re,{className:"text-right",children:"Pricing policy"})]})}),e.jsx("tbody",{children:i?e.jsx(vt,{colSpan:5}):t.length>0?t.map(m=>{const S=()=>p(h===m.key?null:m.key),k=kt(m,v);return e.jsxs(c.Fragment,{children:[e.jsxs(Ce,{onClick:()=>d(m.key),selected:m.key===a,children:[e.jsxs(U,{className:"font-medium break-all",children:[m.model,e.jsx("span",{className:"sr-only",children:m.key})]}),e.jsx(U,{className:"text-[var(--otari-muted)]",children:m.provider}),e.jsx(U,{className:"text-right",children:e.jsx(zt,{primary:k.inputPrice,secondary:k.outputPrice,rowKey:m.key,primaryLabel:"input",secondaryLabel:"output",onEdit:S})}),e.jsx(U,{className:"text-right",children:e.jsx(Bt,{rates:k,rowKey:m.key,onEdit:S})}),e.jsx(U,{className:"text-right",children:e.jsx(Rt,{row:m,onEdit:S})})]}),h===m.key?e.jsx("tr",{className:"border-b border-[var(--otari-line)] bg-[var(--otari-bg)] last:border-b-0",children:e.jsx("td",{colSpan:5,children:e.jsx(Ft,{row:m,onClose:()=>p(null)})})}):null]},m.key)}):e.jsx(bt,{colSpan:5,children:r})})]})}function Vt({providers:t}){return t.length===0?null:e.jsxs(dt,{tone:"warning",children:["Could not list ",t.map(i=>i.provider).join(", "),". Check that provider's credentials in config.yml; its models are missing from the list below."]})}function Jt(){var je,Pe,ye;const t=rt(),[i]=nt(),r=at(),s=st(),n=lt(),a=ct(),[d,h]=c.useState(""),[p,v]=c.useState(0),[P,m]=c.useState(Lt),[S,k]=c.useState(null),[W,D]=c.useState(null),[y,Y]=c.useState(Ot);c.useEffect(()=>{try{window.localStorage.setItem(Be,JSON.stringify(y))}catch{}},[y]);const[M,G]=c.useState(i.get("provider")||"all"),[F,Re]=c.useState("all"),[H,Ke]=c.useState("all"),[q,Ve]=c.useState("all"),[le,Ye]=c.useState("0"),[J,He]=c.useState(""),[Z,qe]=c.useState("all"),[ce,we]=c.useState(""),O=((je=a.data)==null?void 0:je.models)??{},Ue=((Pe=a.data)==null?void 0:Pe.available)??!1,fe=c.useMemo(()=>{var l;return new Set((((l=n.data)==null?void 0:l.providers)??[]).flatMap(f=>f.models.map(o=>o.key)))},[n.data]),Ge=l=>{h(l),v(0)},z=l=>f=>{l(f),v(0)},Je=l=>{Y(f=>f.col===l?{col:l,dir:f.dir==="asc"?"desc":"asc"}:{col:l,dir:l==="released"?"desc":"asc"}),v(0)},X=c.useMemo(()=>{var C,g,_,$,I,B,Ne;const l=new Map(gt(s.data??[]).map(u=>[u.model_key,u])),f=[],o=new Set,b=(u,he,Se,x)=>{if(o.has(u))return;o.add(u);const N=l.get(u);f.push({key:u,model:Ie(he,Se),provider:Se,isDiscovered:fe.has(u),contextWindow:(x==null?void 0:x.contextWindow)??null,inputPrice:N?N.input_price_per_million:(x==null?void 0:x.inputPrice)??null,outputPrice:N?N.output_price_per_million:(x==null?void 0:x.outputPrice)??null,cacheReadPrice:N?N.cache_read_price_per_million:(x==null?void 0:x.cacheReadPrice)??null,cacheWritePrice:N?N.cache_write_price_per_million:(x==null?void 0:x.cacheWritePrice)??null,cacheWrite1hPrice:N?N.cache_write_1h_price_per_million??null:(x==null?void 0:x.cacheWrite1hPrice)??null,pricingTiers:N?N.pricing_tiers??[]:(x==null?void 0:x.pricingTiers)??[],source:N?"configured":(x==null?void 0:x.source)??"none"})};for(const u of((C=r.data)==null?void 0:C.data)??[]){if(u.owned_by===_t)continue;const he=u.pricing_source==="default"?"default":u.pricing?"configured":"none";b(u.id,u.id,u.owned_by||We(u.id),{key:u.id,model:u.id,provider:u.owned_by,contextWindow:u.context_window,inputPrice:((g=u.pricing)==null?void 0:g.input_price_per_million)??null,outputPrice:((_=u.pricing)==null?void 0:_.output_price_per_million)??null,cacheReadPrice:(($=u.pricing)==null?void 0:$.cache_read_price_per_million)??null,cacheWritePrice:((I=u.pricing)==null?void 0:I.cache_write_price_per_million)??null,cacheWrite1hPrice:((B=u.pricing)==null?void 0:B.cache_write_1h_price_per_million)??null,pricingTiers:((Ne=u.pricing)==null?void 0:Ne.pricing_tiers)??[],source:he})}for(const u of l.keys())b(u,u,We(u));return f},[r.data,s.data,fe]),Ze=c.useMemo(()=>new Map(X.map(l=>[l.key,l])),[X]),Q=c.useMemo(()=>{var o,b,C;const l=X.map(g=>{var _,$;return{...g,contextWindow:g.contextWindow??((_=O[g.key])==null?void 0:_.context_window)??null,releaseDate:(($=O[g.key])==null?void 0:$.release_date)??null}}),f=new Set(l.map(g=>g.key));for(const g of((o=n.data)==null?void 0:o.providers)??[])for(const _ of g.models)f.has(_.key)||(f.add(_.key),l.push({key:_.key,model:Ie(_.key,g.provider),provider:g.provider,isDiscovered:!0,contextWindow:((b=O[_.key])==null?void 0:b.context_window)??null,releaseDate:((C=O[_.key])==null?void 0:C.release_date)??null,inputPrice:null,outputPrice:null,cacheReadPrice:null,cacheWritePrice:null,cacheWrite1hPrice:null,pricingTiers:[],source:"none"}));return l},[X,n.data,O]),Xe=(((ye=n.data)==null?void 0:ye.providers)??[]).filter(l=>!l.ok),ee=c.useMemo(()=>{const l=Array.from(new Set(Q.map(f=>f.provider))).sort((f,o)=>f.localeCompare(o));return[{value:"all",label:"All providers"},...l.map(f=>({value:f,label:f}))]},[Q]);c.useEffect(()=>{M==="all"||ee.length<=1||ee.some(l=>l.value===M)||G("all")},[ee,M]);const w=d.trim().toLowerCase(),oe=Number(le)||0,ue=J===""?Number.POSITIVE_INFINITY:Number(J),Qe=ce===""?null:Number(ce),de=Z==="all"?null:Date.now()-Number(Z)*Ct,pe=c.useMemo(()=>{const l=o=>{if(w&&!o.key.toLowerCase().includes(w)&&!o.provider.toLowerCase().includes(w)||M!=="all"&&o.provider!==M||F==="configured"&&o.source!=="configured"||F==="default"&&o.source!=="default"||F==="priced"&&o.inputPrice==null||F==="unpriced"&&o.inputPrice!=null||H==="discovered"&&!o.isDiscovered||H==="custom"&&o.isDiscovered)return!1;if(q!=="all"){const b=Me.find(g=>g.value===q),C=O[o.key];if(!b||!C||!b.test(C))return!1}if(oe>0&&(o.contextWindow==null||o.contextWindowue))return!1;if(de!=null){const b=o.releaseDate?Date.parse(o.releaseDate):Number.NaN;if(Number.isNaN(b)||b{const C=y.dir==="asc"?1:-1;if(y.col==="model")return o.model.localeCompare(b.model)*C;if(y.col==="released"){const I=o.releaseDate??null,B=b.releaseDate??null;return!I&&!B?o.model.localeCompare(b.model):I?B?(IB?1:0)*C||o.model.localeCompare(b.model):-1:1}const g=I=>y.col==="input"?I.inputPrice:I.outputPrice,_=g(o),$=g(b);return _==null&&$==null?o.model.localeCompare(b.model):_==null?1:$==null?-1:(_-$)*C||o.model.localeCompare(b.model)};return Q.filter(l).sort(f)},[Q,w,M,F,H,q,oe,ue,de,O,y]),ve=pe.length,be=Math.max(1,Math.ceil(ve/P)),ge=Math.min(p,be-1),_e=ge*P,et=pe.slice(_e,_e+P),tt=r.isLoading||s.isLoading||n.isLoading,it=w!==""||M!=="all"||F!=="all"||H!=="all"||q!=="all"||le!=="0"||J!==""||Z!=="all"?"No models match your filters.":"No models yet. Add a provider on the Providers page, or price a model below.",te=W?pe.find(l=>l.key===W)??Ze.get(W)??null:null;return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(ot,{title:"Models",description:"Every model your providers can serve. Set a price on any model so budgets and usage tracking work."}),e.jsx(ut,{error:r.error??s.error??n.error??a.error}),e.jsxs("div",{className:`grid gap-4 lg:items-start ${te?"lg:grid-cols-[minmax(0,1fr)_360px]":"grid-cols-1"}`,children:[e.jsxs("div",{className:"flex min-w-0 flex-col gap-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(Et,{value:d,onChange:Ge,placeholder:"Search models…"}),e.jsx(E,{ariaLabel:"Filter by provider",value:M,onChange:z(G),options:ee}),e.jsx(E,{ariaLabel:"Filter by pricing",value:F,onChange:z(Re),options:[{value:"all",label:"Any pricing"},{value:"configured",label:"Custom price"},{value:"default",label:"Default price"},{value:"priced",label:"Priced"},{value:"unpriced",label:"Unpriced"}]}),e.jsx(E,{ariaLabel:"Filter by source",value:H,onChange:z(Ke),options:[{value:"all",label:"Any source"},{value:"discovered",label:"Discovered"},{value:"custom",label:"Custom (not discovered)"}]}),e.jsx(E,{ariaLabel:"Filter by capability",value:q,onChange:z(Ve),options:[{value:"all",label:"Any capability"},...Me.map(l=>({value:l.value,label:l.label}))]}),e.jsx(E,{ariaLabel:"Minimum context window",value:le,onChange:z(Ye),options:Pt}),e.jsx(E,{ariaLabel:"Maximum input price",value:J,onChange:z(He),options:yt}),e.jsx(E,{ariaLabel:"Compare prices at context",value:ce,onChange:we,options:Nt}),e.jsx(E,{ariaLabel:"Filter by release date",value:Z,onChange:z(qe),options:St})]}),e.jsx(Vt,{providers:Xe}),e.jsx(Kt,{rows:et,isLoading:tt,empty:it,sort:y,onSort:Je,selectedKey:W,onSelect:D,pricingKey:S,onSetPricingKey:k,comparisonContextTokens:Qe}),e.jsx("div",{className:"flex flex-wrap items-center justify-between gap-2",children:e.jsx(At,{page:ge,pageCount:be,total:ve,pageSize:P,onPage:v,onPageSize:l=>{m(l),v(0)}})})]}),te?e.jsx("aside",{className:"lg:sticky lg:top-4",children:e.jsx(It,{row:te,metadata:O[te.key],metadataAvailable:Ue,onMakeAlias:l=>t(`/aliases?target=${encodeURIComponent(l)}`),onClose:()=>D(null)})}):null]})]})}export{Jt as ModelsPage}; diff --git a/src/gateway/static/dashboard/assets/OverviewPage-BINTdHsm.js b/src/gateway/static/dashboard/assets/OverviewPage-BINTdHsm.js new file mode 100644 index 00000000..ce025129 --- /dev/null +++ b/src/gateway/static/dashboard/assets/OverviewPage-BINTdHsm.js @@ -0,0 +1 @@ +import{j as t}from"./tanstack-query-1t81HyiD.js";import{r as h,i as tt,N as G}from"./react-dgEcD0HR.js";import{K as et,d as j,L as rt,l as at,a as st,u as nt,b as ot,M as w,P as it,E as I,S as p,N as _,O as N,Q as R,R as D,T as lt}from"./index-D1O_nkKy.js";import{S as M}from"./charts-CuOShutR.js";import{D as dt}from"./DataTable-mgItq60H.js";import{d as U,B as ut}from"./heroui-DZj66Arc.js";import"./recharts-D7kuKp97.js";function B(e){return e==="neutral"?void 0:e}const ct=.02,mt=.1;function K(e){if(!e||e.request_count===0)return{rate:null,status:"neutral"};const o=e.error_count/e.request_count,r=o>=mt?"alert":o>=ct?"warn":"ok";return{rate:o,status:r}}function xt(e){return!e||e.total===0?"neutral":e.healthy>=e.total?"ok":e.healthy===0?"alert":"warn"}const vt=.8;function ft(e){if(e.length===0)return{status:"neutral",label:"No budgets configured",overCount:0,nearCount:0,cappedCount:0};const o=e.filter(s=>s.max_budget!==null&&s.user_count>0);if(o.length===0)return{status:"neutral",label:"No capped budgets",overCount:0,nearCount:0,cappedCount:0};let r=0,a=0,n,x=-1;for(const s of o){const i=s.max_budget*s.user_count,l=i>0?s.total_spend/i:0;l>=1?r+=1:l>=vt&&(a+=1),l>x&&(x=l,n={name:s.name??s.budget_id,spent:s.total_spend,allocated:i,pct:l})}const c=r>0?"alert":a>0?"warn":"ok",g=r>0?`${r} over limit`:a>0?`${a} near limit`:"All within budget";return{status:c,label:g,overCount:r,nearCount:a,cappedCount:o.length,worst:n}}const F=864e5,T=30;function W(){const e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`}function pt(){const[e,o]=h.useState(W);return h.useEffect(()=>{const r=()=>{if(document.visibilityState==="visible"){const a=W();o(n=>n===a?n:a)}};return document.addEventListener("visibilitychange",r),window.addEventListener("focus",r),()=>{document.removeEventListener("visibilitychange",r),window.removeEventListener("focus",r)}},[]),h.useMemo(()=>{const r=Date.now(),a=new Date(r);return{today:new Date(a.getFullYear(),a.getMonth(),a.getDate()).toISOString(),periodStart:new Date(r-T*F).toISOString(),prevStart:new Date(r-2*T*F).toISOString()}},[e])}const ht={ok:"Healthy",warn:"Elevated",alert:"High"},gt={ok:"On track",warn:"Near limit",alert:"Over budget"};function Lt(){const e=et();return e.isLoading?null:t.jsx(bt,{needsSetup:e.isSuccess&&e.data.providers.length===0})}function bt({needsSetup:e=!1}){var O,L,$,A,P,q,H;const o=pt(),r=h.useMemo(()=>({start_date:o.today}),[o]),a=h.useMemo(()=>({start_date:o.periodStart}),[o]),n=h.useMemo(()=>({start_date:o.prevStart,end_date:o.periodStart}),[o]),x=j(r,"hour"),c=j(a,"day"),g=j(n,"day"),s=rt(),i=at(),l=st(),y=nt(),b=ot({},0,5),E=(O=x.data)==null?void 0:O.totals,m=(L=c.data)==null?void 0:L.totals,v=($=g.data)==null?void 0:$.totals,S=((A=c.data)==null?void 0:A.series)??[],C=S.length>1,d=K(m),k=K(v),Y=d.rate!==null&&k.rate!==null?w(d.rate,k.rate):null,u=ft(i.data??[]),Q=xt(s.data),V=(l.data??[]).filter(f=>f.is_active).length,z=(y.data??[]).filter(f=>!f.blocked).length,J=(((P=b.data)==null?void 0:P.length)??0)>0,X=e&&b.isSuccess&&!J,Z=x.error??c.error??s.error??i.error??l.error??y.error;return t.jsxs("div",{className:"flex flex-col gap-6",children:[t.jsx(it,{title:"Overview",description:"At-a-glance spend, traffic, and health across the gateway."}),X?t.jsx(yt,{}):null,t.jsx(I,{error:Z}),t.jsx(jt,{providerHealth:Q,healthy:((q=s.data)==null?void 0:q.healthy)??0,total:((H=s.data)==null?void 0:H.total)??0,budget:u,errStatus:d.status,errRate:d.rate,ready:s.isSuccess&&i.isSuccess&&c.isSuccess,failed:s.isError||i.isError||c.isError}),t.jsxs("div",{className:"grid grid-cols-2 gap-4 sm:grid-cols-3 xl:grid-cols-4",children:[t.jsx(p,{label:"Spend today",value:E?_(E.cost):"—"}),t.jsx(p,{label:"Spend, last 30 days",value:m?_(m.cost):"—",hint:m?t.jsx(N,{fraction:w(m.cost,v==null?void 0:v.cost)}):null,chart:C?t.jsx(M,{values:S.map(f=>f.cost),ariaLabel:"Spend trend over the last 30 days"}):void 0}),t.jsx(p,{label:"Requests, last 30 days",value:m?R(m.request_count):"—",hint:m?t.jsx(N,{fraction:w(m.request_count,v==null?void 0:v.request_count)}):null,chart:C?t.jsx(M,{values:S.map(f=>f.requests),ariaLabel:"Request volume trend over the last 30 days"}):void 0}),t.jsx(p,{label:"Error rate, last 30 days",value:d.rate===null?"—":D(d.rate),status:B(d.status),statusLabel:d.status==="neutral"?void 0:ht[d.status],hint:d.rate!==null?t.jsx(N,{fraction:Y}):null}),t.jsx(p,{label:"Budget health",value:i.data&&u.worst?D(u.worst.pct):"—",status:i.data?B(u.status):void 0,statusLabel:i.data&&u.status!=="neutral"?gt[u.status]:void 0,hint:i.data?u.worst?`${u.label} · worst: ${u.worst.name}`:u.label:void 0,to:"/budgets"}),t.jsx(p,{label:"Active keys",value:l.data?R(V):"—",to:"/keys"}),t.jsx(p,{label:"Active users",value:y.data?R(z):"—",to:"/users"})]}),t.jsx(Nt,{entries:b.data??[],loading:b.isLoading,error:b.error})]})}function yt(){const e=tt();return t.jsx(U,{children:t.jsxs(U.Content,{className:"flex flex-col gap-3 p-6",children:[t.jsxs("div",{children:[t.jsx("h2",{className:"text-lg font-semibold text-[var(--otari-ink)]",children:"Get started with Otari"}),t.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:"Add a provider to begin serving models. Once it is configured, this page will show your gateway’s traffic, spend, and health."})]}),t.jsx("div",{children:t.jsx(ut,{variant:"primary",onPress:()=>e("/providers"),children:"Add your first provider"})})]})})}function St({text:e}){return t.jsx("div",{role:"status",className:"flex items-center gap-2 rounded-xl border border-[var(--otari-line)] bg-[var(--otari-bg)] px-4 py-3 text-sm text-[var(--otari-muted)]",children:e})}function jt({providerHealth:e,healthy:o,total:r,budget:a,errStatus:n,errRate:x,ready:c,failed:g}){if(g)return t.jsx(St,{text:"Some status data could not be loaded."});if(!c)return null;const s=[];if((e==="warn"||e==="alert")&&r>0){const i=r-o;s.push({text:`${i} provider${i===1?"":"s"} unreachable`,to:"/providers"})}return a.overCount>0?s.push({text:`${a.overCount} budget${a.overCount===1?"":"s"} over limit`,to:"/budgets"}):a.nearCount>0&&s.push({text:`${a.nearCount} budget${a.nearCount===1?"":"s"} near limit`,to:"/budgets"}),n==="alert"&&x!==null&&s.push({text:`error rate ${D(x)}`,to:"/activity?status=error"}),s.length===0?null:t.jsxs("div",{role:"alert",className:"flex flex-col gap-2 rounded-xl border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-900 sm:flex-row sm:flex-wrap sm:items-center",children:[t.jsx("span",{className:"font-medium",children:"Needs attention:"}),s.map((i,l)=>t.jsxs("span",{className:"flex items-center gap-2",children:[l>0?t.jsx("span",{"aria-hidden":!0,className:"text-amber-400",children:"·"}):null,t.jsx(G,{to:i.to,className:"underline underline-offset-2 hover:text-amber-950",children:i.text})]},i.to+i.text))]})}function wt(e){return e==="error"?"error":"ok"}function Nt({entries:e,loading:o,error:r}){const a=[{id:"time",header:"Time",cell:n=>t.jsx("span",{className:"text-[var(--otari-muted)]",title:new Date(n.timestamp).toLocaleString(),children:lt(n.timestamp)})},{id:"model",header:"Model",isRowHeader:!0,cell:n=>t.jsx("span",{className:"text-[var(--otari-ink)]",children:n.model})},{id:"cost",header:"Cost",align:"end",cell:n=>n.cost===null?"—":_(n.cost)},{id:"status",header:"Status",cell:n=>t.jsx("span",{className:`inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium ${n.status==="error"?"border-red-200 bg-red-50 text-red-700":"border-[var(--otari-line)] bg-[var(--otari-brand-tint)] text-[var(--otari-brand-dark)]"}`,children:wt(n.status)})}];return t.jsxs("div",{className:"flex flex-col gap-3",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:"Recent activity"}),t.jsx(G,{to:"/activity",className:"text-sm text-[var(--otari-brand-dark)] hover:underline",children:"View all →"})]}),t.jsx(I,{error:r}),t.jsx(dt,{ariaLabel:"Recent activity",columns:a,rows:e,getRowKey:n=>n.id,isLoading:o,emptyContent:"No requests yet. Once the gateway serves traffic, it appears here."})]})}export{Lt as OverviewIndex,bt as OverviewPage,W as localDayKey}; diff --git a/src/gateway/static/dashboard/assets/OverviewPage-D-4Und7I.js b/src/gateway/static/dashboard/assets/OverviewPage-D-4Und7I.js deleted file mode 100644 index cba6121f..00000000 --- a/src/gateway/static/dashboard/assets/OverviewPage-D-4Und7I.js +++ /dev/null @@ -1 +0,0 @@ -import{j as t}from"./tanstack-query-1t81HyiD.js";import{r as f,i as rt,N as Y}from"./react-dgEcD0HR.js";import{J as st,d as N,K as at,k as nt,a as ot,u as it,b as lt,L as _,P as dt,E as z,S as p,M as k,N as R,z as E,O as D,Q as ct}from"./index-d3Tp3DkF.js";import{S as U}from"./charts-Cr3Dij9t.js";import{T as ut,a as xt,b as j,L as mt,c as ht,d as vt,e as S}from"./Table-CLdjdyTx.js";import{d as B,B as pt}from"./heroui-BX6JwHY-.js";import"./recharts-CR3TAEof.js";function F(e){return e==="neutral"?void 0:e}const ft=.02,gt=.1;function K(e){if(!e||e.request_count===0)return{rate:null,status:"neutral"};const n=e.error_count/e.request_count,s=n>=gt?"alert":n>=ft?"warn":"ok";return{rate:n,status:s}}function bt(e){return!e||e.total===0?"neutral":e.healthy>=e.total?"ok":e.healthy===0?"alert":"warn"}const jt=.8;function St(e){if(e.length===0)return{status:"neutral",label:"No budgets configured",overCount:0,nearCount:0,cappedCount:0};const n=e.filter(a=>a.max_budget!==null&&a.user_count>0);if(n.length===0)return{status:"neutral",label:"No capped budgets",overCount:0,nearCount:0,cappedCount:0};let s=0,r=0,c,m=-1;for(const a of n){const o=a.max_budget*a.user_count,i=o>0?a.total_spend/o:0;i>=1?s+=1:i>=jt&&(r+=1),i>m&&(m=i,c={name:a.name??a.budget_id,spent:a.total_spend,allocated:o,pct:i})}const u=s>0?"alert":r>0?"warn":"ok",g=s>0?`${s} over limit`:r>0?`${r} near limit`:"All within budget";return{status:u,label:g,overCount:s,nearCount:r,cappedCount:n.length,worst:c}}const W=864e5,G=30;function I(){const e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`}function yt(){const[e,n]=f.useState(I);return f.useEffect(()=>{const s=()=>{if(document.visibilityState==="visible"){const r=I();n(c=>c===r?c:r)}};return document.addEventListener("visibilitychange",s),window.addEventListener("focus",s),()=>{document.removeEventListener("visibilitychange",s),window.removeEventListener("focus",s)}},[]),f.useMemo(()=>{const s=Date.now(),r=new Date(s);return{today:new Date(r.getFullYear(),r.getMonth(),r.getDate()).toISOString(),periodStart:new Date(s-G*W).toISOString(),prevStart:new Date(s-2*G*W).toISOString()}},[e])}const wt={ok:"Healthy",warn:"Elevated",alert:"High"},Nt={ok:"On track",warn:"Near limit",alert:"Over budget"};function qt(){const e=st();return e.isLoading?null:t.jsx(_t,{needsSetup:e.isSuccess&&e.data.providers.length===0})}function _t({needsSetup:e=!1}){var $,A,P,T,M,q,H;const n=yt(),s=f.useMemo(()=>({start_date:n.today}),[n]),r=f.useMemo(()=>({start_date:n.periodStart}),[n]),c=f.useMemo(()=>({start_date:n.prevStart,end_date:n.periodStart}),[n]),m=N(s,"hour"),u=N(r,"day"),g=N(c,"day"),a=at(),o=nt(),i=ot(),y=it(),b=lt({},0,5),C=($=m.data)==null?void 0:$.totals,x=(A=u.data)==null?void 0:A.totals,h=(P=g.data)==null?void 0:P.totals,w=((T=u.data)==null?void 0:T.series)??[],O=w.length>1,l=K(x),L=K(h),J=l.rate!==null&&L.rate!==null?_(l.rate,L.rate):null,d=St(o.data??[]),Q=bt(a.data),V=(i.data??[]).filter(v=>v.is_active).length,X=(y.data??[]).filter(v=>!v.blocked).length,Z=(((M=b.data)==null?void 0:M.length)??0)>0,tt=e&&b.isSuccess&&!Z,et=m.error??u.error??a.error??o.error??i.error??y.error;return t.jsxs("div",{className:"flex flex-col gap-6",children:[t.jsx(dt,{title:"Overview",description:"At-a-glance spend, traffic, and health across the gateway."}),tt?t.jsx(Rt,{}):null,t.jsx(z,{error:et}),t.jsx(kt,{providerHealth:Q,healthy:((q=a.data)==null?void 0:q.healthy)??0,total:((H=a.data)==null?void 0:H.total)??0,budget:d,errStatus:l.status,errRate:l.rate,ready:a.isSuccess&&o.isSuccess&&u.isSuccess,failed:a.isError||o.isError||u.isError}),t.jsxs("div",{className:"grid grid-cols-2 gap-4 sm:grid-cols-3 xl:grid-cols-4",children:[t.jsx(p,{label:"Spend today",value:C?k(C.cost):"—"}),t.jsx(p,{label:"Spend, last 30 days",value:x?k(x.cost):"—",hint:x?t.jsx(R,{fraction:_(x.cost,h==null?void 0:h.cost)}):null,chart:O?t.jsx(U,{values:w.map(v=>v.cost),ariaLabel:"Spend trend over the last 30 days"}):void 0}),t.jsx(p,{label:"Requests, last 30 days",value:x?E(x.request_count):"—",hint:x?t.jsx(R,{fraction:_(x.request_count,h==null?void 0:h.request_count)}):null,chart:O?t.jsx(U,{values:w.map(v=>v.requests),ariaLabel:"Request volume trend over the last 30 days"}):void 0}),t.jsx(p,{label:"Error rate, last 30 days",value:l.rate===null?"—":D(l.rate),status:F(l.status),statusLabel:l.status==="neutral"?void 0:wt[l.status],hint:l.rate!==null?t.jsx(R,{fraction:J}):null}),t.jsx(p,{label:"Budget health",value:o.data&&d.worst?D(d.worst.pct):"—",status:o.data?F(d.status):void 0,statusLabel:o.data&&d.status!=="neutral"?Nt[d.status]:void 0,hint:o.data?d.worst?`${d.label} · worst: ${d.worst.name}`:d.label:void 0,to:"/budgets"}),t.jsx(p,{label:"Active keys",value:i.data?E(V):"—",to:"/keys"}),t.jsx(p,{label:"Active users",value:y.data?E(X):"—",to:"/users"})]}),t.jsx(Ct,{entries:b.data??[],loading:b.isLoading,error:b.error})]})}function Rt(){const e=rt();return t.jsx(B,{children:t.jsxs(B.Content,{className:"flex flex-col gap-3 p-6",children:[t.jsxs("div",{children:[t.jsx("h2",{className:"text-lg font-semibold text-[var(--otari-ink)]",children:"Get started with Otari"}),t.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:"Add a provider to begin serving models. Once it is configured, this page will show your gateway’s traffic, spend, and health."})]}),t.jsx("div",{children:t.jsx(pt,{variant:"primary",onPress:()=>e("/providers"),children:"Add your first provider"})})]})})}function Et({text:e}){return t.jsx("div",{role:"status",className:"flex items-center gap-2 rounded-xl border border-[var(--otari-line)] bg-[var(--otari-bg)] px-4 py-3 text-sm text-[var(--otari-muted)]",children:e})}function kt({providerHealth:e,healthy:n,total:s,budget:r,errStatus:c,errRate:m,ready:u,failed:g}){if(g)return t.jsx(Et,{text:"Some status data could not be loaded."});if(!u)return null;const a=[];if((e==="warn"||e==="alert")&&s>0){const o=s-n;a.push({text:`${o} provider${o===1?"":"s"} unreachable`,to:"/providers"})}return r.overCount>0?a.push({text:`${r.overCount} budget${r.overCount===1?"":"s"} over limit`,to:"/budgets"}):r.nearCount>0&&a.push({text:`${r.nearCount} budget${r.nearCount===1?"":"s"} near limit`,to:"/budgets"}),c==="alert"&&m!==null&&a.push({text:`error rate ${D(m)}`,to:"/activity?status=error"}),a.length===0?null:t.jsxs("div",{role:"alert",className:"flex flex-col gap-2 rounded-xl border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-900 sm:flex-row sm:flex-wrap sm:items-center",children:[t.jsx("span",{className:"font-medium",children:"Needs attention:"}),a.map((o,i)=>t.jsxs("span",{className:"flex items-center gap-2",children:[i>0?t.jsx("span",{"aria-hidden":!0,className:"text-amber-400",children:"·"}):null,t.jsx(Y,{to:o.to,className:"underline underline-offset-2 hover:text-amber-950",children:o.text})]},o.to+o.text))]})}function Dt(e){return e==="error"?"error":"ok"}function Ct({entries:e,loading:n,error:s}){return t.jsxs("div",{className:"flex flex-col gap-3",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:"Recent activity"}),t.jsx(Y,{to:"/activity",className:"text-sm text-[var(--otari-brand-dark)] hover:underline",children:"View all →"})]}),t.jsx(z,{error:s}),t.jsxs(ut,{children:[t.jsx(xt,{children:t.jsxs("tr",{children:[t.jsx(j,{children:"Time"}),t.jsx(j,{children:"Model"}),t.jsx(j,{className:"text-right",children:"Cost"}),t.jsx(j,{children:"Status"})]})}),t.jsx("tbody",{children:n?t.jsx(mt,{colSpan:4}):e.length===0?t.jsx(ht,{colSpan:4,children:"No requests yet. Once the gateway serves traffic, it appears here."}):e.map(r=>t.jsxs(vt,{children:[t.jsx(S,{className:"text-[var(--otari-muted)]",children:t.jsx("span",{title:new Date(r.timestamp).toLocaleString(),children:ct(r.timestamp)})}),t.jsx(S,{className:"text-[var(--otari-ink)]",children:r.model}),t.jsx(S,{className:"text-right tabular-nums",children:r.cost===null?"—":k(r.cost)}),t.jsx(S,{children:t.jsx("span",{className:`inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium ${r.status==="error"?"border-red-200 bg-red-50 text-red-700":"border-[var(--otari-line)] bg-[var(--otari-brand-tint)] text-[var(--otari-brand-dark)]"}`,children:Dt(r.status)})})]},r.id))})]})]})}export{qt as OverviewIndex,_t as OverviewPage,I as localDayKey}; diff --git a/src/gateway/static/dashboard/assets/ProvidersPage-BKJfR2nH.js b/src/gateway/static/dashboard/assets/ProvidersPage-BKJfR2nH.js new file mode 100644 index 00000000..aa807708 --- /dev/null +++ b/src/gateway/static/dashboard/assets/ProvidersPage-BKJfR2nH.js @@ -0,0 +1 @@ +import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as x,L as M}from"./react-dgEcD0HR.js";import{K as Y,U as V,J as W,L as G,V as J,W as X,X as Z,P as Q,E as I,I as ee,Y as te,Z as se,T as $,C as ae,_ as O,$ as ne,D as q,a0 as re,a1 as ie}from"./index-D1O_nkKy.js";import{F as S}from"./Field-DEJ6Wjg9.js";import{D as oe}from"./DataTable-mgItq60H.js";import{B as f,d as _,f as de,T as le,L as F,I as H,D as ce,S as me,C as T,a as ue,b as xe}from"./heroui-DZj66Arc.js";function R({value:s,onChange:a,label:t,placeholder:r,description:i}){return e.jsxs(le,{value:s,onChange:a,className:"flex max-w-md flex-col gap-1",children:[e.jsx(F,{className:"text-sm font-medium text-[var(--otari-ink)]",children:t}),e.jsx(H,{type:"password",placeholder:r??"sk-…",autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",spellCheck:!1,"data-1p-ignore":!0,"data-lpignore":"true"}),i?e.jsx(ce,{className:"text-xs text-[var(--otari-muted)]",children:i}):null]})}function U({label:s,value:a,onChange:t,description:r,placeholder:i,extra:l=[],includeCatalog:m=!0}){var k;const g=re(),u=x.useMemo(()=>m?[...l,...(g.data??[]).map(o=>({id:o.id,name:o.name}))]:l,[g.data,l,m]),[p,c]=x.useState(()=>{var o;return((o=u.find(y=>y.id===a))==null?void 0:o.name)??""}),j=((k=u.find(o=>o.id===a))==null?void 0:k.name)??"",h=p.trim()===j.trim()?"":p.trim().toLowerCase(),d=u.filter(o=>!h||o.name.toLowerCase().includes(h)||o.id.toLowerCase().includes(h)).slice(0,50);return e.jsxs(T.Root,{allowsEmptyCollection:!0,menuTrigger:"focus",inputValue:p,onInputChange:c,onSelectionChange:o=>{var y;o!=null?(t(String(o)),c(((y=u.find(N=>N.id===String(o)))==null?void 0:y.name)??"")):(t(""),c(""))},className:"flex max-w-md flex-col gap-1",children:[e.jsx(F,{className:"text-sm font-medium text-[var(--otari-ink)]",children:s}),e.jsxs(T.InputGroup,{children:[e.jsx(H,{placeholder:i??"Search providers…",autoComplete:"off","data-1p-ignore":!0,"data-lpignore":"true",onFocus:o=>o.currentTarget.select()}),e.jsx(T.Trigger,{})]}),e.jsx(T.Popover,{children:e.jsx(ue,{items:d,className:"max-h-72 overflow-auto",children:o=>e.jsx(xe,{id:o.id,textValue:o.name,children:o.name})})}),r?e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:r}):null]})}function z({getPayload:s}){const a=ie(),t=s();return e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx(f,{variant:"outline",isDisabled:t===null||a.isPending,onPress:()=>{t&&a.mutate(t)},children:a.isPending?"Testing…":"Test connection"}),e.jsx("span",{role:"status","aria-live":"polite",children:a.isPending?null:a.error?e.jsx("span",{className:"text-xs text-red-700",children:q(a.error)}):a.data?a.data.ok?e.jsxs("span",{className:"text-xs font-medium text-green-700",children:["Connected. ",a.data.model_count," model",a.data.model_count===1?"":"s"," available."]}):e.jsx("span",{className:"block max-w-md break-words text-xs text-red-700",children:a.data.error??"Connection failed."}):null})]})}function pe({onClose:s}){var w;const a=O(),[t,r]=x.useState(""),[i,l]=x.useState(""),[m,g]=x.useState(!1),[u,p]=x.useState(""),[c,j]=x.useState(""),h=ne(t),d=((w=h.data)==null?void 0:w.id)===t?h.data:void 0;x.useEffect(()=>{d&&p(d.default_api_base??"")},[d]);const k=(d==null?void 0:d.env_key_present)??!1,o=((d==null?void 0:d.requires_api_key)??!0)&&!k,y=c.trim()!==""&&c.trim()!==t,N=/[:/]/.test(c),P=t!==""&&!N&&(!o||i.trim()!=="")&&!a.isPending,A=()=>{P&&a.mutate({instance:y?c.trim():t,provider_type:y?t:null,api_base:u.trim()||null,api_key:i.trim()||null},{onSuccess:s})};return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(I,{error:a.error}),e.jsx(U,{label:"Provider",value:t,onChange:C=>{r(C),j(""),p("")},description:"Its endpoint is built in."}),e.jsx(R,{value:i,onChange:l,label:d&&!o?"API key (optional)":"API key",description:d?o?`${d.name}'s endpoint is built in — just add your key.`:k?`${d.env_key} is set on the server, so a key is optional here. Paste one to override it.`:`${d.name} needs no API key.`:"Stored encrypted. Requires OTARI_SECRET_KEY on the server."}),e.jsx("button",{type:"button",className:"self-start text-xs font-medium text-[var(--otari-brand-dark)]",onClick:()=>g(C=>!C),children:m?"Hide advanced":"Advanced (API base, rename)"}),m?e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(S,{label:"API base",value:u,onChange:p,placeholder:(d==null?void 0:d.default_api_base)??"https://…/v1",description:"Only if you route through a proxy. Blank uses the built-in default."}),e.jsx(S,{label:"Name",value:c,onChange:j,placeholder:t||"instance name",description:N?e.jsx("span",{className:"text-red-700",children:"A name cannot contain “:” or “/”."}):"Rename to run two instances of the same provider."})]}):null,e.jsxs("div",{className:"flex flex-wrap items-start gap-2",children:[e.jsx(f,{variant:"primary",isDisabled:!P,onPress:A,children:a.isPending?"Adding…":"Add provider"}),e.jsx(f,{variant:"ghost",onPress:s,children:"Cancel"}),e.jsx(z,{getPayload:()=>t===""?null:{instance:y?c.trim():t,provider_type:y?t:null,api_base:u.trim()||null,api_key:i.trim()||null}})]})]})}function he({onClose:s}){const a=O(),[t,r]=x.useState(""),[i,l]=x.useState("openai-compatible"),[m,g]=x.useState(""),[u,p]=x.useState(""),c=/[:/]/.test(t),j=t.trim()!==""&&!c&&m.trim()!==""&&!a.isPending,h=()=>{j&&a.mutate({instance:t.trim(),provider_type:i||"openai-compatible",api_base:m.trim(),api_key:u.trim()||null},{onSuccess:s})};return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(I,{error:a.error}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(S,{label:"Name",value:t,onChange:r,placeholder:"my-local-llm",isRequired:!0,autoFocus:!0,description:c?e.jsx("span",{className:"text-red-700",children:"A name cannot contain “:” or “/”."}):"Call it whatever you want."}),e.jsx(U,{label:"Compatible with",value:i,onChange:l,includeCatalog:!1,description:"The API this endpoint speaks.",extra:[{id:"openai-compatible",name:"OpenAI"},{id:"anthropic-compatible",name:"Anthropic"}]})]}),e.jsx(S,{label:"API base",value:m,onChange:g,placeholder:"http://localhost:8000/v1",isRequired:!0,description:"The endpoint URL of your server."}),e.jsx(R,{value:u,onChange:p,label:"API key (optional)",description:"Many local backends need none. Stored encrypted."}),e.jsxs("div",{className:"flex flex-wrap items-start gap-2",children:[e.jsx(f,{variant:"primary",isDisabled:!j,onPress:h,children:a.isPending?"Adding…":"Add provider"}),e.jsx(f,{variant:"ghost",onPress:s,children:"Cancel"}),e.jsx(z,{getPayload:()=>t.trim()===""||m.trim()===""?null:{instance:t.trim(),provider_type:i||"openai-compatible",api_base:m.trim(),api_key:u.trim()||null}})]})]})}function ve({onClose:s}){const[a,t]=x.useState("known");return e.jsx(_,{children:e.jsxs(_.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx("div",{className:"flex items-center gap-1 rounded-lg bg-[var(--otari-bg)] p-1",children:[["known","Known provider"],["custom","Custom endpoint"]].map(([r,i])=>e.jsx("button",{type:"button","aria-pressed":a===r,onClick:()=>t(r),className:a===r?"rounded-md bg-white px-3 py-1.5 text-sm font-medium text-[var(--otari-ink)] shadow-sm":"rounded-md px-3 py-1.5 text-sm text-[var(--otari-muted)] hover:text-[var(--otari-ink)]",children:i},r))})}),a==="known"?e.jsx(pe,{onClose:s}):e.jsx(he,{onClose:s})]})})}function ge({provider:s,onClose:a}){const t=te(),[r,i]=x.useState(s.provider_type??""),[l,m]=x.useState(s.api_base??""),[g,u]=x.useState(!1),[p,c]=x.useState(""),j=()=>{if(t.isPending)return;const h={provider_type:r.trim()||null,api_base:l.trim()||null,expected_updated_at:s.updated_at};g&&p.trim()&&(h.api_key=p.trim()),t.mutate({instance:s.instance,body:h},{onSuccess:a})};return e.jsx(_,{children:e.jsxs(_.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsxs("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:["Edit ",e.jsx("code",{children:s.instance})]}),e.jsx(I,{error:t.error}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(S,{label:"Provider type",value:r,onChange:i,placeholder:"openai"}),e.jsx(S,{label:"API base",value:l,onChange:m,placeholder:"https://api.openai.com/v1"})]}),e.jsx("div",{className:"flex flex-col gap-2",children:g?e.jsxs(e.Fragment,{children:[e.jsx(R,{value:p,onChange:c,label:"New API key",description:"Stored encrypted. The old key is replaced when you save."}),e.jsx("button",{type:"button",className:"self-start text-xs font-medium text-[var(--otari-brand-dark)]",onClick:()=>{u(!1),c("")},children:"Keep the current key"})]}):e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"text-sm text-[var(--otari-muted)]",children:["API key: ",e.jsx("code",{children:s.last4?`••••${s.last4}`:"none set"})]}),e.jsx(f,{size:"sm",variant:"outline",onPress:()=>u(!0),children:"Replace key"})]})}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(f,{variant:"primary",isDisabled:t.isPending,onPress:j,children:t.isPending?"Saving…":"Save changes"}),e.jsx(f,{variant:"ghost",onPress:a,children:"Cancel"})]})]})})}function fe(s,a){const t=new Map((a??[]).map(l=>[l.instance,l])),r=new Map((s??[]).map(l=>[l.instance,l]));return[...new Set([...t.keys(),...r.keys()])].sort().map(l=>{const m=t.get(l);return{instance:l,source:m?"stored":"config",stored:m,meta:r.get(l)}})}function je({state:s}){return s?s.status==="pending"?e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-xs text-[var(--otari-muted)]",children:[e.jsx(me,{size:"sm"})," Testing…"]}):s.ok?e.jsxs("span",{className:"text-xs font-medium text-green-700",children:["Connected. ",s.model_count," model",s.model_count===1?"":"s"," available."]}):e.jsx("span",{className:"block max-w-xs break-words text-xs text-red-700",children:s.error??"Connection failed."}):null}function ye({health:s}){if(!s)return e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"—"});const a=s.ok?"border-green-200 bg-green-50 text-green-700":"border-red-200 bg-red-50 text-red-700",t=s.checked_at?`Last checked ${$(s.checked_at)}`:"Not checked yet",r=s.ok?t:`${s.error??"Unreachable"} · ${t}`;return e.jsxs("span",{title:r,className:`inline-flex items-center gap-1.5 rounded-full border px-2.5 py-0.5 text-xs font-medium ${a}`,children:[e.jsx("span",{"aria-hidden":!0,className:`h-1.5 w-1.5 rounded-full ${s.ok?"bg-green-500":"bg-red-500"}`}),s.ok?"Reachable":"Unreachable"]})}function be({healthy:s,total:a,checkedAt:t}){const r=s===a,i=se();return e.jsxs("div",{className:"flex flex-wrap items-center gap-3 rounded-xl border border-[var(--otari-line)] bg-[var(--otari-surface)] px-4 py-2.5 text-sm",children:[e.jsx("span",{"aria-hidden":!0,className:`h-2 w-2 rounded-full ${r?"bg-green-500":"bg-red-500"}`}),e.jsxs("span",{className:"font-medium text-[var(--otari-ink)]",children:[s," of ",a," provider",a===1?"":"s"," reachable"]}),t?e.jsxs("span",{className:"text-[var(--otari-muted)]",children:["Last checked ",$(t)]}):null,e.jsx(f,{size:"sm",variant:"ghost",className:"ml-auto",isDisabled:i.isPending,onPress:()=>i.mutate(),children:i.isPending?"Re-checking…":"Re-check all"})]})}function E({n:s,title:a,children:t}){return e.jsxs("li",{className:"flex gap-3",children:[e.jsx("span",{className:"flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-[var(--otari-brand-tint)] text-xs font-semibold text-[var(--otari-brand-dark)]",children:s}),e.jsxs("div",{className:"text-sm",children:[e.jsx("div",{className:"font-medium text-[var(--otari-ink)]",children:a}),e.jsx("div",{className:"text-[var(--otari-muted)]",children:t})]})]})}function ke({onAddProvider:s,needsPricing:a,onEnablePricing:t,enabling:r,secretKeyConfigured:i}){return e.jsx(_,{children:e.jsxs(_.Content,{className:"flex flex-col gap-4 p-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold text-[var(--otari-ink)]",children:"Welcome to Otari"}),e.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:"You are signed in. Add a provider to start serving models: three quick steps."})]}),e.jsxs("ol",{className:"flex flex-col gap-3",children:[e.jsxs(E,{n:1,title:"Add a provider",children:["Enter a provider name (like ",e.jsx("code",{children:"openai"}),") and its API key. Keys are encrypted at rest."]}),e.jsxs(E,{n:2,title:"Test the connection",children:["Use ",e.jsx("strong",{children:"Test"})," on the provider row to confirm the key works and see how many models it serves."]}),e.jsxs(E,{n:3,title:"Send your first request",children:["Point your app at ",e.jsx("code",{children:"/v1"})," on this gateway with the API key printed in the server logs (",e.jsx("code",{children:"gw-…"}),"). See the"," ",e.jsx("a",{href:"/welcome",className:"font-medium text-[var(--otari-brand-dark)]",children:"quickstart"}),"."]})]}),a?e.jsxs("p",{className:"text-sm text-[var(--otari-muted)]",children:["Tip: ",e.jsx("code",{children:"require_pricing"})," is on, so requests are rejected until pricing is set."," ",e.jsx("button",{type:"button",className:"font-medium text-[var(--otari-brand-dark)] disabled:opacity-50",disabled:r,onClick:t,children:"Enable default pricing"})," ","to meter new models with public rates."]}):null,e.jsx("div",{children:e.jsx(f,{variant:"primary",isDisabled:!i,onPress:s,children:"Add your first provider"})})]})})}function we(){var K,B,D,L;const s=Y(),a=V(),t=W(),r=G(),i=J(),l=X(),m=Z(),[g,u]=x.useState(!1),[p,c]=x.useState(null),[j,h]=x.useState({}),d=fe((K=s.data)==null?void 0:K.providers,a.data),k=new Map((((B=r.data)==null?void 0:B.providers)??[]).map(n=>[n.instance,n])),o=s.isLoading||a.isLoading,y=((D=a.data)==null?void 0:D.find(n=>n.instance===p))??null,N=((L=t.data)==null?void 0:L.require_pricing)===!0&&t.data.default_pricing===!1,P=t.data?t.data.secret_key_configured!==!1:!t.isError,A=!o&&d.length===0&&!g,w=n=>{h(v=>({...v,[n]:{status:"pending"}})),l.mutate(n,{onSuccess:v=>h(b=>({...b,[n]:{status:"done",...v}})),onError:v=>h(b=>({...b,[n]:{status:"done",ok:!1,model_count:0,error:q(v)}}))})},C=[{id:"provider",header:"Provider",isRowHeader:!0,cell:n=>e.jsx(M,{to:`/models?provider=${encodeURIComponent(n.instance)}`,className:"font-medium text-[var(--otari-ink)] hover:text-[var(--otari-brand-dark)] hover:underline",children:n.instance})},{id:"type",header:"Type",cell:n=>{var v,b;return e.jsx("span",{className:"text-[var(--otari-muted)]",children:((v=n.meta)==null?void 0:v.provider_type)??((b=n.stored)==null?void 0:b.provider_type)??n.instance})}},{id:"source",header:"Source",cell:n=>e.jsx(de,{size:"sm",color:n.source==="stored"?"accent":"default",children:n.source==="stored"?"stored":"config"})},{id:"api_key",header:"API key",cell:n=>{var v,b;return e.jsx("span",{className:"text-[var(--otari-muted)]",children:n.source==="stored"?n.stored&&!n.stored.decryptable?e.jsx("span",{className:"text-amber-700",title:"This key can't be decrypted with the current OTARI_SECRET_KEY. Replace the key, or restore the original OTARI_SECRET_KEY.",children:"⚠ key unreadable"}):e.jsx("code",{children:(v=n.stored)!=null&&v.last4?`••••${n.stored.last4}`:"none set"}):(b=n.meta)!=null&&b.env_key?e.jsxs("span",{children:["via ",e.jsx("code",{children:n.meta.env_key})]}):"config.yml"})}},{id:"status",header:"Status",cell:n=>e.jsx(ye,{health:k.get(n.instance)})},{id:"actions",header:"Actions",align:"end",cell:n=>{var v,b;return n.source==="stored"?e.jsxs("div",{className:"flex flex-col items-end gap-1.5",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(f,{size:"sm",variant:"outline",isDisabled:((v=j[n.instance])==null?void 0:v.status)==="pending"||((b=n.stored)==null?void 0:b.decryptable)===!1,onPress:()=>w(n.instance),children:"Test"}),e.jsx(f,{size:"sm",variant:"ghost",onPress:()=>{u(!1),c(n.instance)},children:"Edit"}),e.jsx(ae,{confirmLabel:"Delete",isPending:i.isPending,onConfirm:()=>i.mutate(n.instance),children:"Delete"})]}),e.jsx(je,{state:j[n.instance]})]}):e.jsx("span",{className:"block text-right text-xs text-[var(--otari-muted)]",children:"managed in config.yml"})}}];return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(Q,{title:"Providers",description:"Add provider API keys here to serve models without editing config.yml. Keys are encrypted at rest.",action:g||A?null:e.jsx(f,{variant:"primary",isDisabled:!P,onPress:()=>{c(null),u(!0)},children:"Add provider"})}),e.jsx(I,{error:s.error??a.error??t.error??r.error??m.error??i.error}),P?null:e.jsxs(ee,{tone:"warning",children:[e.jsx("code",{children:"OTARI_SECRET_KEY"})," is not set, so provider keys can't be encrypted at rest and adding providers from the dashboard is disabled. Set it on the server and restart to add providers here. Providers defined in"," ",e.jsx("code",{children:"config.yml"})," keep working without it."]}),A?e.jsx(ke,{onAddProvider:()=>{c(null),u(!0)},needsPricing:N,onEnablePricing:()=>m.mutate({default_pricing:!0}),enabling:m.isPending,secretKeyConfigured:P}):null,g&&P?e.jsx(ve,{onClose:()=>u(!1)}):null,y?e.jsx(ge,{provider:y,onClose:()=>c(null)}):null,!o&&d.length>0&&r.data&&r.data.total>0?e.jsx(be,{healthy:r.data.healthy,total:r.data.total,checkedAt:r.data.checked_at}):null,e.jsx(oe,{ariaLabel:"Providers",columns:C,rows:d,getRowKey:n=>n.instance,isLoading:o,emptyContent:"No providers yet. Add your first provider to start serving models."})]})}export{we as ProvidersPage}; diff --git a/src/gateway/static/dashboard/assets/ProvidersPage-ZF6ihggi.js b/src/gateway/static/dashboard/assets/ProvidersPage-ZF6ihggi.js deleted file mode 100644 index bd454ac0..00000000 --- a/src/gateway/static/dashboard/assets/ProvidersPage-ZF6ihggi.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as x,L as Q}from"./react-dgEcD0HR.js";import{J as X,R as Z,B as ee,K as se,T as te,U as ae,V as ne,P as re,E as R,I as ie,C as oe,W as de,X as le,Q as U,i as M,Y,Z as ce,_ as me,$ as ue}from"./index-d3Tp3DkF.js";import{F as A}from"./Field-HzRk1KDP.js";import{T as xe,a as pe,b as _,L as he,c as ve,d as ge,e as C}from"./Table-CLdjdyTx.js";import{B as g,f as z,d as T,S as fe,T as je,L as V,I as W,D as be,C as E,a as ye,b as ke}from"./heroui-BX6JwHY-.js";function B({value:t,onChange:a,label:s,placeholder:n,description:i}){return e.jsxs(je,{value:t,onChange:a,className:"flex max-w-md flex-col gap-1",children:[e.jsx(V,{className:"text-sm font-medium text-[var(--otari-ink)]",children:s}),e.jsx(W,{type:"password",placeholder:n??"sk-…",autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",spellCheck:!1,"data-1p-ignore":!0,"data-lpignore":"true"}),i?e.jsx(be,{className:"text-xs text-[var(--otari-muted)]",children:i}):null]})}function G({label:t,value:a,onChange:s,description:n,placeholder:i,extra:l=[],includeCatalog:m=!0}){var y;const v=me(),u=x.useMemo(()=>m?[...l,...(v.data??[]).map(o=>({id:o.id,name:o.name}))]:l,[v.data,l,m]),[p,c]=x.useState(()=>{var o;return((o=u.find(j=>j.id===a))==null?void 0:o.name)??""}),f=((y=u.find(o=>o.id===a))==null?void 0:y.name)??"",h=p.trim()===f.trim()?"":p.trim().toLowerCase(),d=u.filter(o=>!h||o.name.toLowerCase().includes(h)||o.id.toLowerCase().includes(h)).slice(0,50);return e.jsxs(E.Root,{allowsEmptyCollection:!0,menuTrigger:"focus",inputValue:p,onInputChange:c,onSelectionChange:o=>{var j;o!=null?(s(String(o)),c(((j=u.find(P=>P.id===String(o)))==null?void 0:j.name)??"")):(s(""),c(""))},className:"flex max-w-md flex-col gap-1",children:[e.jsx(V,{className:"text-sm font-medium text-[var(--otari-ink)]",children:t}),e.jsxs(E.InputGroup,{children:[e.jsx(W,{placeholder:i??"Search providers…",autoComplete:"off","data-1p-ignore":!0,"data-lpignore":"true",onFocus:o=>o.currentTarget.select()}),e.jsx(E.Trigger,{})]}),e.jsx(E.Popover,{children:e.jsx(ye,{items:d,className:"max-h-72 overflow-auto",children:o=>e.jsx(ke,{id:o.id,textValue:o.name,children:o.name})})}),n?e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:n}):null]})}function J({getPayload:t}){const a=ue(),s=t();return e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx(g,{variant:"outline",isDisabled:s===null||a.isPending,onPress:()=>{s&&a.mutate(s)},children:a.isPending?"Testing…":"Test connection"}),e.jsx("span",{role:"status","aria-live":"polite",children:a.isPending?null:a.error?e.jsx("span",{className:"text-xs text-red-700",children:M(a.error)}):a.data?a.data.ok?e.jsxs("span",{className:"text-xs font-medium text-green-700",children:["Connected. ",a.data.model_count," model",a.data.model_count===1?"":"s"," available."]}):e.jsx("span",{className:"block max-w-md break-words text-xs text-red-700",children:a.data.error??"Connection failed."}):null})]})}function Pe({onClose:t}){var I;const a=Y(),[s,n]=x.useState(""),[i,l]=x.useState(""),[m,v]=x.useState(!1),[u,p]=x.useState(""),[c,f]=x.useState(""),h=ce(s),d=((I=h.data)==null?void 0:I.id)===s?h.data:void 0;x.useEffect(()=>{d&&p(d.default_api_base??"")},[d]);const y=(d==null?void 0:d.env_key_present)??!1,o=((d==null?void 0:d.requires_api_key)??!0)&&!y,j=c.trim()!==""&&c.trim()!==s,P=/[:/]/.test(c),k=s!==""&&!P&&(!o||i.trim()!=="")&&!a.isPending,w=()=>{k&&a.mutate({instance:j?c.trim():s,provider_type:j?s:null,api_base:u.trim()||null,api_key:i.trim()||null},{onSuccess:t})};return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(R,{error:a.error}),e.jsx(G,{label:"Provider",value:s,onChange:N=>{n(N),f(""),p("")},description:"Its endpoint is built in."}),e.jsx(B,{value:i,onChange:l,label:d&&!o?"API key (optional)":"API key",description:d?o?`${d.name}'s endpoint is built in — just add your key.`:y?`${d.env_key} is set on the server, so a key is optional here. Paste one to override it.`:`${d.name} needs no API key.`:"Stored encrypted. Requires OTARI_SECRET_KEY on the server."}),e.jsx("button",{type:"button",className:"self-start text-xs font-medium text-[var(--otari-brand-dark)]",onClick:()=>v(N=>!N),children:m?"Hide advanced":"Advanced (API base, rename)"}),m?e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(A,{label:"API base",value:u,onChange:p,placeholder:(d==null?void 0:d.default_api_base)??"https://…/v1",description:"Only if you route through a proxy. Blank uses the built-in default."}),e.jsx(A,{label:"Name",value:c,onChange:f,placeholder:s||"instance name",description:P?e.jsx("span",{className:"text-red-700",children:"A name cannot contain “:” or “/”."}):"Rename to run two instances of the same provider."})]}):null,e.jsxs("div",{className:"flex flex-wrap items-start gap-2",children:[e.jsx(g,{variant:"primary",isDisabled:!k,onPress:w,children:a.isPending?"Adding…":"Add provider"}),e.jsx(g,{variant:"ghost",onPress:t,children:"Cancel"}),e.jsx(J,{getPayload:()=>s===""?null:{instance:j?c.trim():s,provider_type:j?s:null,api_base:u.trim()||null,api_key:i.trim()||null}})]})]})}function Ne({onClose:t}){const a=Y(),[s,n]=x.useState(""),[i,l]=x.useState("openai-compatible"),[m,v]=x.useState(""),[u,p]=x.useState(""),c=/[:/]/.test(s),f=s.trim()!==""&&!c&&m.trim()!==""&&!a.isPending,h=()=>{f&&a.mutate({instance:s.trim(),provider_type:i||"openai-compatible",api_base:m.trim(),api_key:u.trim()||null},{onSuccess:t})};return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(R,{error:a.error}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(A,{label:"Name",value:s,onChange:n,placeholder:"my-local-llm",isRequired:!0,autoFocus:!0,description:c?e.jsx("span",{className:"text-red-700",children:"A name cannot contain “:” or “/”."}):"Call it whatever you want."}),e.jsx(G,{label:"Compatible with",value:i,onChange:l,includeCatalog:!1,description:"The API this endpoint speaks.",extra:[{id:"openai-compatible",name:"OpenAI"},{id:"anthropic-compatible",name:"Anthropic"}]})]}),e.jsx(A,{label:"API base",value:m,onChange:v,placeholder:"http://localhost:8000/v1",isRequired:!0,description:"The endpoint URL of your server."}),e.jsx(B,{value:u,onChange:p,label:"API key (optional)",description:"Many local backends need none. Stored encrypted."}),e.jsxs("div",{className:"flex flex-wrap items-start gap-2",children:[e.jsx(g,{variant:"primary",isDisabled:!f,onPress:h,children:a.isPending?"Adding…":"Add provider"}),e.jsx(g,{variant:"ghost",onPress:t,children:"Cancel"}),e.jsx(J,{getPayload:()=>s.trim()===""||m.trim()===""?null:{instance:s.trim(),provider_type:i||"openai-compatible",api_base:m.trim(),api_key:u.trim()||null}})]})]})}function Se({onClose:t}){const[a,s]=x.useState("known");return e.jsx(T,{children:e.jsxs(T.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx("div",{className:"flex items-center gap-1 rounded-lg bg-[var(--otari-bg)] p-1",children:[["known","Known provider"],["custom","Custom endpoint"]].map(([n,i])=>e.jsx("button",{type:"button","aria-pressed":a===n,onClick:()=>s(n),className:a===n?"rounded-md bg-white px-3 py-1.5 text-sm font-medium text-[var(--otari-ink)] shadow-sm":"rounded-md px-3 py-1.5 text-sm text-[var(--otari-muted)] hover:text-[var(--otari-ink)]",children:i},n))})}),a==="known"?e.jsx(Pe,{onClose:t}):e.jsx(Ne,{onClose:t})]})})}function _e({provider:t,onClose:a}){const s=de(),[n,i]=x.useState(t.provider_type??""),[l,m]=x.useState(t.api_base??""),[v,u]=x.useState(!1),[p,c]=x.useState(""),f=()=>{if(s.isPending)return;const h={provider_type:n.trim()||null,api_base:l.trim()||null,expected_updated_at:t.updated_at};v&&p.trim()&&(h.api_key=p.trim()),s.mutate({instance:t.instance,body:h},{onSuccess:a})};return e.jsx(T,{children:e.jsxs(T.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsxs("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:["Edit ",e.jsx("code",{children:t.instance})]}),e.jsx(R,{error:s.error}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(A,{label:"Provider type",value:n,onChange:i,placeholder:"openai"}),e.jsx(A,{label:"API base",value:l,onChange:m,placeholder:"https://api.openai.com/v1"})]}),e.jsx("div",{className:"flex flex-col gap-2",children:v?e.jsxs(e.Fragment,{children:[e.jsx(B,{value:p,onChange:c,label:"New API key",description:"Stored encrypted. The old key is replaced when you save."}),e.jsx("button",{type:"button",className:"self-start text-xs font-medium text-[var(--otari-brand-dark)]",onClick:()=>{u(!1),c("")},children:"Keep the current key"})]}):e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"text-sm text-[var(--otari-muted)]",children:["API key: ",e.jsx("code",{children:t.last4?`••••${t.last4}`:"none set"})]}),e.jsx(g,{size:"sm",variant:"outline",onPress:()=>u(!0),children:"Replace key"})]})}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(g,{variant:"primary",isDisabled:s.isPending,onPress:f,children:s.isPending?"Saving…":"Save changes"}),e.jsx(g,{variant:"ghost",onPress:a,children:"Cancel"})]})]})})}function Ce(t,a){const s=new Map((a??[]).map(l=>[l.instance,l])),n=new Map((t??[]).map(l=>[l.instance,l]));return[...new Set([...s.keys(),...n.keys()])].sort().map(l=>{const m=s.get(l);return{instance:l,source:m?"stored":"config",stored:m,meta:n.get(l)}})}function Ae({state:t}){return t?t.status==="pending"?e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-xs text-[var(--otari-muted)]",children:[e.jsx(fe,{size:"sm"})," Testing…"]}):t.ok?e.jsxs("span",{className:"text-xs font-medium text-green-700",children:["Connected. ",t.model_count," model",t.model_count===1?"":"s"," available."]}):e.jsx("span",{className:"block max-w-xs break-words text-xs text-red-700",children:t.error??"Connection failed."}):null}function Te({health:t}){if(!t)return e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"—"});const a=t.ok?"border-green-200 bg-green-50 text-green-700":"border-red-200 bg-red-50 text-red-700",s=t.checked_at?`Last checked ${U(t.checked_at)}`:"Not checked yet",n=t.ok?s:`${t.error??"Unreachable"} · ${s}`;return e.jsxs("span",{title:n,className:`inline-flex items-center gap-1.5 rounded-full border px-2.5 py-0.5 text-xs font-medium ${a}`,children:[e.jsx("span",{"aria-hidden":!0,className:`h-1.5 w-1.5 rounded-full ${t.ok?"bg-green-500":"bg-red-500"}`}),t.ok?"Reachable":"Unreachable"]})}function we({healthy:t,total:a,checkedAt:s}){const n=t===a,i=le();return e.jsxs("div",{className:"flex flex-wrap items-center gap-3 rounded-xl border border-[var(--otari-line)] bg-[var(--otari-surface)] px-4 py-2.5 text-sm",children:[e.jsx("span",{"aria-hidden":!0,className:`h-2 w-2 rounded-full ${n?"bg-green-500":"bg-red-500"}`}),e.jsxs("span",{className:"font-medium text-[var(--otari-ink)]",children:[t," of ",a," provider",a===1?"":"s"," reachable"]}),s?e.jsxs("span",{className:"text-[var(--otari-muted)]",children:["Last checked ",U(s)]}):null,e.jsx(g,{size:"sm",variant:"ghost",className:"ml-auto",isDisabled:i.isPending,onPress:()=>i.mutate(),children:i.isPending?"Re-checking…":"Re-check all"})]})}function K({n:t,title:a,children:s}){return e.jsxs("li",{className:"flex gap-3",children:[e.jsx("span",{className:"flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-[var(--otari-brand-tint)] text-xs font-semibold text-[var(--otari-brand-dark)]",children:t}),e.jsxs("div",{className:"text-sm",children:[e.jsx("div",{className:"font-medium text-[var(--otari-ink)]",children:a}),e.jsx("div",{className:"text-[var(--otari-muted)]",children:s})]})]})}function Ie({onAddProvider:t,needsPricing:a,onEnablePricing:s,enabling:n,secretKeyConfigured:i}){return e.jsx(T,{children:e.jsxs(T.Content,{className:"flex flex-col gap-4 p-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold text-[var(--otari-ink)]",children:"Welcome to Otari"}),e.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:"You are signed in. Add a provider to start serving models: three quick steps."})]}),e.jsxs("ol",{className:"flex flex-col gap-3",children:[e.jsxs(K,{n:1,title:"Add a provider",children:["Enter a provider name (like ",e.jsx("code",{children:"openai"}),") and its API key. Keys are encrypted at rest."]}),e.jsxs(K,{n:2,title:"Test the connection",children:["Use ",e.jsx("strong",{children:"Test"})," on the provider row to confirm the key works and see how many models it serves."]}),e.jsxs(K,{n:3,title:"Send your first request",children:["Point your app at ",e.jsx("code",{children:"/v1"})," on this gateway with the API key printed in the server logs (",e.jsx("code",{children:"gw-…"}),"). See the"," ",e.jsx("a",{href:"/welcome",className:"font-medium text-[var(--otari-brand-dark)]",children:"quickstart"}),"."]})]}),a?e.jsxs("p",{className:"text-sm text-[var(--otari-muted)]",children:["Tip: ",e.jsx("code",{children:"require_pricing"})," is on, so requests are rejected until pricing is set."," ",e.jsx("button",{type:"button",className:"font-medium text-[var(--otari-brand-dark)] disabled:opacity-50",disabled:n,onClick:s,children:"Enable default pricing"})," ","to meter new models with public rates."]}):null,e.jsx("div",{children:e.jsx(g,{variant:"primary",isDisabled:!i,onPress:t,children:"Add your first provider"})})]})})}function $e(){var N,L,D,$;const t=X(),a=Z(),s=ee(),n=se(),i=te(),l=ae(),m=ne(),[v,u]=x.useState(!1),[p,c]=x.useState(null),[f,h]=x.useState({}),d=Ce((N=t.data)==null?void 0:N.providers,a.data),y=new Map((((L=n.data)==null?void 0:L.providers)??[]).map(r=>[r.instance,r])),o=t.isLoading||a.isLoading,j=((D=a.data)==null?void 0:D.find(r=>r.instance===p))??null,P=(($=s.data)==null?void 0:$.require_pricing)===!0&&s.data.default_pricing===!1,k=s.data?s.data.secret_key_configured!==!1:!s.isError,w=!o&&d.length===0&&!v,I=r=>{h(b=>({...b,[r]:{status:"pending"}})),l.mutate(r,{onSuccess:b=>h(S=>({...S,[r]:{status:"done",...b}})),onError:b=>h(S=>({...S,[r]:{status:"done",ok:!1,model_count:0,error:M(b)}}))})};return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(re,{title:"Providers",description:"Add provider API keys here to serve models without editing config.yml. Keys are encrypted at rest.",action:v||w?null:e.jsx(g,{variant:"primary",isDisabled:!k,onPress:()=>{c(null),u(!0)},children:"Add provider"})}),e.jsx(R,{error:t.error??a.error??s.error??n.error??m.error??i.error}),k?null:e.jsxs(ie,{tone:"warning",children:[e.jsx("code",{children:"OTARI_SECRET_KEY"})," is not set, so provider keys can't be encrypted at rest and adding providers from the dashboard is disabled. Set it on the server and restart to add providers here. Providers defined in"," ",e.jsx("code",{children:"config.yml"})," keep working without it."]}),w?e.jsx(Ie,{onAddProvider:()=>{c(null),u(!0)},needsPricing:P,onEnablePricing:()=>m.mutate({default_pricing:!0}),enabling:m.isPending,secretKeyConfigured:k}):null,v&&k?e.jsx(Se,{onClose:()=>u(!1)}):null,j?e.jsx(_e,{provider:j,onClose:()=>c(null)}):null,!o&&d.length>0&&n.data&&n.data.total>0?e.jsx(we,{healthy:n.data.healthy,total:n.data.total,checkedAt:n.data.checked_at}):null,e.jsxs(xe,{children:[e.jsx(pe,{children:e.jsxs("tr",{children:[e.jsx(_,{children:"Provider"}),e.jsx(_,{children:"Type"}),e.jsx(_,{children:"Source"}),e.jsx(_,{children:"API key"}),e.jsx(_,{children:"Status"}),e.jsx(_,{className:"text-right",children:"Actions"})]})}),e.jsx("tbody",{children:o?e.jsx(he,{colSpan:6}):d.length===0?e.jsx(ve,{colSpan:6,children:"No providers yet. Add your first provider to start serving models."}):d.map(r=>{var b,S,O,q,F,H;return e.jsxs(ge,{children:[e.jsx(C,{className:"font-medium",children:e.jsx(Q,{to:`/models?provider=${encodeURIComponent(r.instance)}`,className:"text-[var(--otari-ink)] hover:text-[var(--otari-brand-dark)] hover:underline",children:r.instance})}),e.jsx(C,{className:"text-[var(--otari-muted)]",children:((b=r.meta)==null?void 0:b.provider_type)??((S=r.stored)==null?void 0:S.provider_type)??r.instance}),e.jsx(C,{children:r.source==="stored"?e.jsx(z,{size:"sm",color:"accent",children:"stored"}):e.jsx(z,{size:"sm",color:"default",children:"config"})}),e.jsx(C,{className:"text-[var(--otari-muted)]",children:r.source==="stored"?r.stored&&!r.stored.decryptable?e.jsx("span",{className:"text-amber-700",title:"This key can't be decrypted with the current OTARI_SECRET_KEY. Replace the key, or restore the original OTARI_SECRET_KEY.",children:"⚠ key unreadable"}):e.jsx("code",{children:(O=r.stored)!=null&&O.last4?`••••${r.stored.last4}`:"none set"}):(q=r.meta)!=null&&q.env_key?e.jsxs("span",{children:["via ",e.jsx("code",{children:r.meta.env_key})]}):"config.yml"}),e.jsx(C,{children:e.jsx(Te,{health:y.get(r.instance)})}),e.jsx(C,{children:r.source==="stored"?e.jsxs("div",{className:"flex flex-col items-end gap-1.5",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(g,{size:"sm",variant:"outline",isDisabled:((F=f[r.instance])==null?void 0:F.status)==="pending"||((H=r.stored)==null?void 0:H.decryptable)===!1,onPress:()=>I(r.instance),children:"Test"}),e.jsx(g,{size:"sm",variant:"ghost",onPress:()=>{u(!1),c(r.instance)},children:"Edit"}),e.jsx(oe,{confirmLabel:"Delete",isPending:i.isPending,onConfirm:()=>i.mutate(r.instance),children:"Delete"})]}),e.jsx(Ae,{state:f[r.instance]})]}):e.jsx("span",{className:"block text-right text-xs text-[var(--otari-muted)]",children:"managed in config.yml"})})]},r.instance)})})]})]})}export{$e as ProvidersPage}; diff --git a/src/gateway/static/dashboard/assets/SettingsPage-CWqsNLqk.js b/src/gateway/static/dashboard/assets/SettingsPage-DPkAq-xL.js similarity index 96% rename from src/gateway/static/dashboard/assets/SettingsPage-CWqsNLqk.js rename to src/gateway/static/dashboard/assets/SettingsPage-DPkAq-xL.js index 2a212500..2652498c 100644 --- a/src/gateway/static/dashboard/assets/SettingsPage-CWqsNLqk.js +++ b/src/gateway/static/dashboard/assets/SettingsPage-DPkAq-xL.js @@ -1 +1 @@ -import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as u}from"./react-dgEcD0HR.js";import{B as R,V as C,P,E as y,a0 as E,a1 as T,a2 as _,F as D,a3 as A,R as O,a4 as F,I as w}from"./index-d3Tp3DkF.js";import{d as v,B as h,A as d,g as I,I as K}from"./heroui-BX6JwHY-.js";function b(t,r){return{[t]:r}}function z(t,r){let s=0;for(const a of r)if(a===t[s]&&(s+=1),s===t.length)return!0;return t.length===0}function M(t,r){const s=r.trim().toLowerCase();if(s==="")return!0;const a=`${t.key} ${t.description??""} ${t.group}`.toLowerCase(),n=t.key.toLowerCase().replace(/[^a-z0-9]/g,"");return s.split(/\s+/).every(i=>a.includes(i)||z(i,n))}function B({checked:t,onChange:r,label:s,disabled:a}){return e.jsx("button",{type:"button",role:"switch","aria-checked":t,"aria-label":s,disabled:a,onClick:()=>r(!t),className:`relative inline-flex h-6 w-11 shrink-0 items-center rounded-full transition-colors disabled:opacity-50 ${t?"bg-[var(--otari-brand)]":"bg-[var(--otari-line)]"}`,children:e.jsx("span",{className:`inline-block h-5 w-5 transform rounded-full bg-white shadow transition-transform ${t?"translate-x-5":"translate-x-0.5"}`})})}function L({field:t,onSave:r,disabled:s}){const a=typeof t.value=="number"?t.value:0,[n,i]=u.useState(String(a)),o=t.type==="float";u.useEffect(()=>{i(String(a))},[a]);const c=Number(n),p=n.trim()!==""&&Number.isFinite(c)&&(o||Number.isInteger(c)),m=t.minimum??void 0,x=t.exclusive_minimum??void 0,g=x!==void 0?c>x:m!==void 0?c>=m:c>=0,l=p&&g&&c!==a;return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(K,{type:"number",min:"0",step:o?"any":"1",inputMode:o?"decimal":"numeric","aria-label":t.key,value:n,disabled:s,onChange:f=>i(f.target.value),className:"w-28 rounded-md border border-[var(--otari-line)] bg-white px-2 py-1 text-right text-sm tabular-nums focus:border-[var(--otari-brand)] focus:outline-none disabled:opacity-50"}),e.jsx(h,{size:"sm",variant:"primary","aria-label":`Save ${t.key}`,isDisabled:s||!l,onPress:()=>r(c),children:"Save"})]})}function $({field:t,onSave:r,disabled:s}){const a=typeof t.value=="string"?t.value:"",[n,i]=u.useState(a);u.useEffect(()=>{i(a)},[a]);const o=n!==a;return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"text","aria-label":t.key,value:n,disabled:s,placeholder:"unset",onChange:c=>i(c.target.value),className:"w-56 rounded-md border border-[var(--otari-line)] bg-white px-2 py-1 text-sm focus:border-[var(--otari-brand)] focus:outline-none disabled:opacity-50"}),e.jsx(h,{size:"sm",variant:"primary","aria-label":`Save ${t.key}`,isDisabled:s||!o,onPress:()=>r(n.trim()===""?null:n),children:"Save"})]})}function H(t){const{value:r}=t;return r==null?"unset":typeof r=="boolean"?r?"on":"off":Array.isArray(r)?r.length?r.join(", "):"none":String(r)}function Y({field:t,patch:r,disabled:s}){return t.settable?t.type==="bool"?e.jsx(B,{checked:t.value===!0,onChange:a=>r(b(t.key,a)),label:t.key,disabled:s}):t.options&&t.options.length>0?e.jsx(D,{ariaLabel:t.key,value:String(t.value??""),onChange:a=>r(b(t.key,a)),options:t.options.map(a=>({value:a,label:a}))}):t.type==="int"||t.type==="float"?e.jsx(L,{field:t,onSave:a=>r(b(t.key,a)),disabled:s}):e.jsx($,{field:t,onSave:a=>r(b(t.key,a)),disabled:s}):e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm tabular-nums text-[var(--otari-ink)]",children:H(t)}),e.jsx("span",{className:"rounded-full border border-[var(--otari-line)] px-2 py-0.5 text-xs text-[var(--otari-muted)]",children:"startup-only"})]})}function q({field:t,patch:r,disabled:s}){return e.jsxs("div",{className:"flex items-start justify-between gap-6 py-4",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("code",{className:"text-sm font-medium text-[var(--otari-ink)]",children:t.key}),t.description?e.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:t.description}):null]}),e.jsx("div",{className:"shrink-0 pt-0.5",children:e.jsx(Y,{field:t,patch:r,disabled:s})})]})}function V({value:t,fieldRef:r}){const s=u.useRef(null),a=r??s,[n,i]=u.useState(!1),[o,c]=u.useState(!1),p=async()=>{var m,x,g;(m=a.current)==null||m.focus(),(x=a.current)==null||x.select();try{if((g=navigator.clipboard)!=null&&g.writeText){await navigator.clipboard.writeText(t),i(!0),c(!1),window.setTimeout(()=>i(!1),2e3);return}}catch{}c(!0)};return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-xs font-medium text-[var(--otari-muted)]",children:"New master key"}),e.jsx(h,{size:"sm",variant:"outline",onPress:p,children:n?"Copied":"Copy"})]}),e.jsx("input",{ref:a,readOnly:!0,value:t,onFocus:m=>m.currentTarget.select(),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",spellCheck:!1,"data-1p-ignore":!0,"data-lpignore":"true"}),e.jsx("span",{"aria-live":"polite",className:"text-xs text-[var(--otari-brand-dark)]",children:n?"Copied to clipboard.":""}),o?e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Selected. Press Ctrl/Cmd-C to copy."}):null]})}function U({masterKey:t,error:r,isPending:s,onRegenerate:a,onClose:n}){const i=u.useRef(null);return u.useEffect(()=>{var o,c;t!==void 0&&((o=i.current)==null||o.focus(),(c=i.current)==null||c.select())},[t]),e.jsx(d.Backdrop,{children:e.jsx(d.Container,{placement:"center",size:"lg",children:e.jsxs(d.Dialog,{children:[e.jsx(d.Header,{children:e.jsx(d.Heading,{children:t!==void 0?"Master key regenerated":"Regenerate master key?"})}),e.jsx(d.Body,{className:"flex flex-col gap-4",children:t!==void 0?e.jsxs(e.Fragment,{children:[e.jsx(w,{tone:"warning",children:"Copy this key now. It is shown once and cannot be retrieved again after you close this dialog."}),e.jsx("p",{className:"text-sm text-[var(--otari-muted)]",children:"The previous master key has stopped working. This browser tab now uses the new key."}),e.jsx(V,{value:t,fieldRef:i})]}):e.jsxs(e.Fragment,{children:[e.jsx(w,{tone:"warning",children:"This immediately invalidates the current dashboard master key. Other signed-in dashboard sessions will need the new key to continue."}),e.jsx("p",{className:"text-sm text-[var(--otari-muted)]",children:"The replacement key will be shown once. Save it before closing the next screen."}),e.jsx(y,{error:r})]})}),e.jsx(d.Footer,{children:t!==void 0?e.jsx(h,{variant:"primary",onPress:n,children:"I’ve saved this key"}):e.jsxs(e.Fragment,{children:[e.jsx(h,{variant:"ghost",isDisabled:s,onPress:n,children:"Cancel"}),e.jsx(h,{variant:"danger",isPending:s,onPress:a,children:"Regenerate key"})]})})]})})})}function G({source:t}){const r=A(),[s,a]=u.useState(!1),[n,i]=u.useState(),o=t==="generated",c=()=>r.mutate(void 0,{onSuccess:x=>{i(x.master_key)}}),p=()=>{a(!1),i(void 0),r.reset()},m=x=>{x?(r.reset(),a(!0)):n===void 0&&p()};return e.jsx("div",{className:"flex flex-col gap-4 py-4",children:e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("code",{className:"text-sm font-medium text-[var(--otari-ink)]",children:"master_key"}),e.jsx("p",{className:"mt-1 max-w-3xl text-sm text-[var(--otari-muted)]",children:o?"This gateway uses its first-run generated dashboard key. Regeneration invalidates the current key immediately.":"This gateway uses a key managed through OTARI_MASTER_KEY or config.yml. Rotate it in configuration, then restart the gateway."})]}),e.jsxs(d,{isOpen:s,onOpenChange:m,children:[o?e.jsx(d.Trigger,{className:I({size:"sm",variant:"danger-soft"}),children:"Regenerate"}):e.jsx(h,{size:"sm",variant:"danger-soft",isDisabled:!0,children:"Managed in configuration"}),s?e.jsx(U,{masterKey:n,error:r.error,isPending:r.isPending,onRegenerate:c,onClose:p}):null]})]})})}function X(){var o;const t=O(),r=F(),s=r.data,a=((o=t.data)==null?void 0:o.length)??0,n=(t.data??[]).filter(c=>!c.decryptable).length,i=a>0;return e.jsxs("div",{className:"flex flex-col gap-4 py-4",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("code",{className:"text-sm font-medium text-[var(--otari-ink)]",children:"OTARI_SECRET_KEY"}),e.jsxs("p",{className:"mt-1 max-w-3xl text-sm text-[var(--otari-muted)]",children:["Generate a new key with ",e.jsx("code",{children:"uv run otari gen-secret-key"}),", then restart with"," ",e.jsx("code",{children:"OTARI_SECRET_KEY=,"}),". Re-encrypt the stored provider keys, then restart with ",e.jsx("code",{children:"OTARI_SECRET_KEY="})," once none are unreadable."]})]}),e.jsx("div",{className:"shrink-0",children:e.jsx(h,{size:"sm",variant:"outline",isDisabled:!i||r.isPending,onPress:()=>r.mutate(),children:r.isPending?"Re-encrypting…":"Re-encrypt provider keys"})})]}),e.jsx(y,{error:t.error??r.error}),n>0?e.jsxs(w,{tone:"warning",children:[n," stored provider key",n===1?"":"s"," cannot be decrypted with the current"," ",e.jsx("code",{children:"OTARI_SECRET_KEY"}),". Restore the old secret key and re-encrypt, or edit each affected provider and replace its key."]}):null,s?e.jsxs("p",{className:"text-sm text-[var(--otari-muted)]",role:"status","aria-live":"polite",children:["Re-encrypted ",s.reencrypted," provider key",s.reencrypted===1?"":"s",".",s.unreadable>0?` ${s.unreadable} still need replacement.`:" All decryptable stored keys now use the primary secret key."]}):!t.isLoading&&!i?e.jsx("p",{className:"text-sm text-[var(--otari-muted)]",children:"No stored provider keys need re-encryption."}):null]})}function J({masterKeySource:t}){return e.jsxs("section",{className:"flex flex-col gap-2",children:[e.jsxs("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:["Credential security ",e.jsx("span",{className:"font-normal text-[var(--otari-muted)]",children:"(2)"})]}),e.jsx(v,{children:e.jsxs(v.Content,{className:"flex flex-col divide-y divide-[var(--otari-line)] px-5 py-1",children:[e.jsx(G,{source:t}),e.jsx(X,{})]})})]})}function Q({preview:t,error:r,isPending:s,onAccept:a,onReject:n}){return e.jsx(d.Backdrop,{children:e.jsx(d.Container,{placement:"center",size:"lg",children:e.jsxs(d.Dialog,{children:[e.jsx(d.Header,{children:e.jsx(d.Heading,{children:"Review default price updates"})}),e.jsxs(d.Body,{className:"flex flex-col gap-4",children:[e.jsxs("p",{className:"text-sm text-[var(--otari-muted)]",children:[t.added_count," added, ",t.changed_count," changed, and ",t.removed_count," removed upstream model prices. The accepted catalog is saved in the database with source ",e.jsx("code",{children:"genai-prices"})," and reloads after a restart. Your ",t.protected_model_count," custom model price",t.protected_model_count===1?"":"s"," remain unchanged."]}),t.changes.length>0?e.jsx("ul",{className:"max-h-60 list-disc overflow-auto pl-5 text-sm text-[var(--otari-ink)]",children:t.changes.map(i=>e.jsxs("li",{children:[i.model_key,": ",i.change]},i.model_key))}):null,t.changes_truncated?e.jsx("p",{className:"text-xs text-[var(--otari-muted)]",children:"Only the first 100 changes are shown."}):null,e.jsx(y,{error:r})]}),e.jsxs(d.Footer,{children:[e.jsx(h,{variant:"ghost",isDisabled:s,onPress:n,children:"Reject changes"}),e.jsx(h,{variant:"primary",isPending:s,onPress:a,children:"Accept price updates"})]})]})})})}function W(){const t=E(),r=T(),s=_(),a=t.data,n=r.isPending||s.isPending,i=()=>{a===void 0||n||s.mutate(void 0,{onSuccess:t.reset})};return e.jsxs("section",{className:"flex flex-col gap-2",children:[e.jsx("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:"Default pricing catalog"}),e.jsx(v,{children:e.jsxs(v.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-sm font-medium text-[var(--otari-ink)]",children:"genai-prices defaults"}),e.jsxs("p",{className:"mt-1 max-w-3xl text-sm text-[var(--otari-muted)]",children:["Fetch the latest upstream catalog, review the proposed change summary, then accept or reject it. Accepted data is stored as ",e.jsx("code",{children:"genai-prices"}),"; custom prices remain separate and always take precedence."]})]}),e.jsx(h,{size:"sm",variant:"outline",isDisabled:t.isPending||n,onPress:()=>t.mutate(),children:t.isPending?"Checking prices…":"Check for price updates"})]}),e.jsx(y,{error:t.error})]})}),e.jsxs(d,{isOpen:a!==void 0,onOpenChange:o=>o?void 0:i(),children:[e.jsx(d.Trigger,{className:"hidden",children:"Review price updates"}),a?e.jsx(Q,{preview:a,error:r.error??s.error,isPending:n,onAccept:()=>r.mutate(void 0,{onSuccess:t.reset}),onReject:i}):null]})]})}function Z(t){const r=[],s=new Map;for(const a of t){let n=s.get(a.group);n||(n={name:a.group,fields:[]},s.set(a.group,n),r.push(n)),n.fields.push(a)}return r}function ae(){const t=R(),r=C(),s=t.data,a=r.isPending,[n,i]=u.useState(""),[o,c]=u.useState(!1),p=u.useRef(null);u.useEffect(()=>{function l(f){var N;const j=f.target,S=j&&(j.tagName==="INPUT"||j.tagName==="TEXTAREA"||j.tagName==="SELECT");f.key==="/"&&!S&&(f.preventDefault(),(N=p.current)==null||N.focus())}return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[]);const m=l=>r.mutate(l),x=(s==null?void 0:s.config)??[],g=x.filter(l=>(o?l.settable:!0)&&M(l,n)),k=Z(g);return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(P,{title:"Settings",description:"Every effective gateway setting. Settable fields apply immediately and persist across restarts; startup-only fields are shown for reference and change only via config.yml or environment variables (then a restart)."}),e.jsx(y,{error:t.error??r.error}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("input",{ref:p,type:"search","aria-label":"Search settings",placeholder:"Search settings (press / to focus)…",value:n,onChange:l=>i(l.target.value),onKeyDown:l=>{l.key==="Escape"&&i("")},className:"min-w-0 flex-1 rounded-lg border border-[var(--otari-line)] bg-[var(--otari-bg)] px-3 py-2 text-sm text-[var(--otari-ink)] focus:border-[var(--otari-brand)] focus:outline-none"}),e.jsxs("label",{className:"flex items-center gap-2 text-sm text-[var(--otari-muted)]",children:[e.jsx("input",{type:"checkbox",checked:o,onChange:l=>c(l.target.checked),className:"h-4 w-4 accent-[var(--otari-brand)]"}),"Settable only"]})]}),s?e.jsxs("p",{className:"text-xs text-[var(--otari-muted)]",children:["Showing ",g.length," of ",x.length," settings"]}):null,s&&g.length===0?e.jsx("p",{className:"text-sm text-[var(--otari-muted)]",children:"No settings match your search."}):null,k.map(l=>e.jsxs("section",{className:"flex flex-col gap-2",children:[e.jsxs("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:[l.name," ",e.jsxs("span",{className:"font-normal text-[var(--otari-muted)]",children:["(",l.fields.length,")"]})]}),e.jsx(v,{children:e.jsx(v.Content,{className:"flex flex-col divide-y divide-[var(--otari-line)] px-5 py-1",children:l.fields.map(f=>e.jsx(q,{field:f,patch:m,disabled:!s||a},f.key))})})]},l.name)),s?e.jsx(W,{}):null,s?e.jsx(J,{masterKeySource:s.master_key_source}):null,s?e.jsxs("p",{className:"text-xs text-[var(--otari-muted)]",children:["Mode: ",s.mode," · Version ",s.version,s.require_pricing?" · require_pricing on":""]}):null]})}export{ae as SettingsPage,M as fieldMatches}; +import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as u}from"./react-dgEcD0HR.js";import{J as R,X as C,P,E as y,a2 as E,a3 as T,a4 as _,F as D,a5 as A,U as O,a6 as F,I as w}from"./index-D1O_nkKy.js";import{d as v,B as h,A as d,g as I,I as K}from"./heroui-DZj66Arc.js";function b(t,r){return{[t]:r}}function z(t,r){let s=0;for(const a of r)if(a===t[s]&&(s+=1),s===t.length)return!0;return t.length===0}function M(t,r){const s=r.trim().toLowerCase();if(s==="")return!0;const a=`${t.key} ${t.description??""} ${t.group}`.toLowerCase(),n=t.key.toLowerCase().replace(/[^a-z0-9]/g,"");return s.split(/\s+/).every(i=>a.includes(i)||z(i,n))}function B({checked:t,onChange:r,label:s,disabled:a}){return e.jsx("button",{type:"button",role:"switch","aria-checked":t,"aria-label":s,disabled:a,onClick:()=>r(!t),className:`relative inline-flex h-6 w-11 shrink-0 items-center rounded-full transition-colors disabled:opacity-50 ${t?"bg-[var(--otari-brand)]":"bg-[var(--otari-line)]"}`,children:e.jsx("span",{className:`inline-block h-5 w-5 transform rounded-full bg-white shadow transition-transform ${t?"translate-x-5":"translate-x-0.5"}`})})}function L({field:t,onSave:r,disabled:s}){const a=typeof t.value=="number"?t.value:0,[n,i]=u.useState(String(a)),o=t.type==="float";u.useEffect(()=>{i(String(a))},[a]);const c=Number(n),p=n.trim()!==""&&Number.isFinite(c)&&(o||Number.isInteger(c)),m=t.minimum??void 0,x=t.exclusive_minimum??void 0,g=x!==void 0?c>x:m!==void 0?c>=m:c>=0,l=p&&g&&c!==a;return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(K,{type:"number",min:"0",step:o?"any":"1",inputMode:o?"decimal":"numeric","aria-label":t.key,value:n,disabled:s,onChange:f=>i(f.target.value),className:"w-28 rounded-md border border-[var(--otari-line)] bg-white px-2 py-1 text-right text-sm tabular-nums focus:border-[var(--otari-brand)] focus:outline-none disabled:opacity-50"}),e.jsx(h,{size:"sm",variant:"primary","aria-label":`Save ${t.key}`,isDisabled:s||!l,onPress:()=>r(c),children:"Save"})]})}function $({field:t,onSave:r,disabled:s}){const a=typeof t.value=="string"?t.value:"",[n,i]=u.useState(a);u.useEffect(()=>{i(a)},[a]);const o=n!==a;return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"text","aria-label":t.key,value:n,disabled:s,placeholder:"unset",onChange:c=>i(c.target.value),className:"w-56 rounded-md border border-[var(--otari-line)] bg-white px-2 py-1 text-sm focus:border-[var(--otari-brand)] focus:outline-none disabled:opacity-50"}),e.jsx(h,{size:"sm",variant:"primary","aria-label":`Save ${t.key}`,isDisabled:s||!o,onPress:()=>r(n.trim()===""?null:n),children:"Save"})]})}function H(t){const{value:r}=t;return r==null?"unset":typeof r=="boolean"?r?"on":"off":Array.isArray(r)?r.length?r.join(", "):"none":String(r)}function Y({field:t,patch:r,disabled:s}){return t.settable?t.type==="bool"?e.jsx(B,{checked:t.value===!0,onChange:a=>r(b(t.key,a)),label:t.key,disabled:s}):t.options&&t.options.length>0?e.jsx(D,{ariaLabel:t.key,value:String(t.value??""),onChange:a=>r(b(t.key,a)),options:t.options.map(a=>({value:a,label:a}))}):t.type==="int"||t.type==="float"?e.jsx(L,{field:t,onSave:a=>r(b(t.key,a)),disabled:s}):e.jsx($,{field:t,onSave:a=>r(b(t.key,a)),disabled:s}):e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm tabular-nums text-[var(--otari-ink)]",children:H(t)}),e.jsx("span",{className:"rounded-full border border-[var(--otari-line)] px-2 py-0.5 text-xs text-[var(--otari-muted)]",children:"startup-only"})]})}function q({field:t,patch:r,disabled:s}){return e.jsxs("div",{className:"flex items-start justify-between gap-6 py-4",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("code",{className:"text-sm font-medium text-[var(--otari-ink)]",children:t.key}),t.description?e.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:t.description}):null]}),e.jsx("div",{className:"shrink-0 pt-0.5",children:e.jsx(Y,{field:t,patch:r,disabled:s})})]})}function U({value:t,fieldRef:r}){const s=u.useRef(null),a=r??s,[n,i]=u.useState(!1),[o,c]=u.useState(!1),p=async()=>{var m,x,g;(m=a.current)==null||m.focus(),(x=a.current)==null||x.select();try{if((g=navigator.clipboard)!=null&&g.writeText){await navigator.clipboard.writeText(t),i(!0),c(!1),window.setTimeout(()=>i(!1),2e3);return}}catch{}c(!0)};return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-xs font-medium text-[var(--otari-muted)]",children:"New master key"}),e.jsx(h,{size:"sm",variant:"outline",onPress:p,children:n?"Copied":"Copy"})]}),e.jsx("input",{ref:a,readOnly:!0,value:t,onFocus:m=>m.currentTarget.select(),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",spellCheck:!1,"data-1p-ignore":!0,"data-lpignore":"true"}),e.jsx("span",{"aria-live":"polite",className:"text-xs text-[var(--otari-brand-dark)]",children:n?"Copied to clipboard.":""}),o?e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"Selected. Press Ctrl/Cmd-C to copy."}):null]})}function V({masterKey:t,error:r,isPending:s,onRegenerate:a,onClose:n}){const i=u.useRef(null);return u.useEffect(()=>{var o,c;t!==void 0&&((o=i.current)==null||o.focus(),(c=i.current)==null||c.select())},[t]),e.jsx(d.Backdrop,{children:e.jsx(d.Container,{placement:"center",size:"lg",children:e.jsxs(d.Dialog,{children:[e.jsx(d.Header,{children:e.jsx(d.Heading,{children:t!==void 0?"Master key regenerated":"Regenerate master key?"})}),e.jsx(d.Body,{className:"flex flex-col gap-4",children:t!==void 0?e.jsxs(e.Fragment,{children:[e.jsx(w,{tone:"warning",children:"Copy this key now. It is shown once and cannot be retrieved again after you close this dialog."}),e.jsx("p",{className:"text-sm text-[var(--otari-muted)]",children:"The previous master key has stopped working. This browser tab now uses the new key."}),e.jsx(U,{value:t,fieldRef:i})]}):e.jsxs(e.Fragment,{children:[e.jsx(w,{tone:"warning",children:"This immediately invalidates the current dashboard master key. Other signed-in dashboard sessions will need the new key to continue."}),e.jsx("p",{className:"text-sm text-[var(--otari-muted)]",children:"The replacement key will be shown once. Save it before closing the next screen."}),e.jsx(y,{error:r})]})}),e.jsx(d.Footer,{children:t!==void 0?e.jsx(h,{variant:"primary",onPress:n,children:"I’ve saved this key"}):e.jsxs(e.Fragment,{children:[e.jsx(h,{variant:"ghost",isDisabled:s,onPress:n,children:"Cancel"}),e.jsx(h,{variant:"danger",isPending:s,onPress:a,children:"Regenerate key"})]})})]})})})}function G({source:t}){const r=A(),[s,a]=u.useState(!1),[n,i]=u.useState(),o=t==="generated",c=()=>r.mutate(void 0,{onSuccess:x=>{i(x.master_key)}}),p=()=>{a(!1),i(void 0),r.reset()},m=x=>{x?(r.reset(),a(!0)):n===void 0&&p()};return e.jsx("div",{className:"flex flex-col gap-4 py-4",children:e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("code",{className:"text-sm font-medium text-[var(--otari-ink)]",children:"master_key"}),e.jsx("p",{className:"mt-1 max-w-3xl text-sm text-[var(--otari-muted)]",children:o?"This gateway uses its first-run generated dashboard key. Regeneration invalidates the current key immediately.":"This gateway uses a key managed through OTARI_MASTER_KEY or config.yml. Rotate it in configuration, then restart the gateway."})]}),e.jsxs(d,{isOpen:s,onOpenChange:m,children:[o?e.jsx(d.Trigger,{className:I({size:"sm",variant:"danger-soft"}),children:"Regenerate"}):e.jsx(h,{size:"sm",variant:"danger-soft",isDisabled:!0,children:"Managed in configuration"}),s?e.jsx(V,{masterKey:n,error:r.error,isPending:r.isPending,onRegenerate:c,onClose:p}):null]})]})})}function X(){var o;const t=O(),r=F(),s=r.data,a=((o=t.data)==null?void 0:o.length)??0,n=(t.data??[]).filter(c=>!c.decryptable).length,i=a>0;return e.jsxs("div",{className:"flex flex-col gap-4 py-4",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("code",{className:"text-sm font-medium text-[var(--otari-ink)]",children:"OTARI_SECRET_KEY"}),e.jsxs("p",{className:"mt-1 max-w-3xl text-sm text-[var(--otari-muted)]",children:["Generate a new key with ",e.jsx("code",{children:"uv run otari gen-secret-key"}),", then restart with"," ",e.jsx("code",{children:"OTARI_SECRET_KEY=,"}),". Re-encrypt the stored provider keys, then restart with ",e.jsx("code",{children:"OTARI_SECRET_KEY="})," once none are unreadable."]})]}),e.jsx("div",{className:"shrink-0",children:e.jsx(h,{size:"sm",variant:"outline",isDisabled:!i||r.isPending,onPress:()=>r.mutate(),children:r.isPending?"Re-encrypting…":"Re-encrypt provider keys"})})]}),e.jsx(y,{error:t.error??r.error}),n>0?e.jsxs(w,{tone:"warning",children:[n," stored provider key",n===1?"":"s"," cannot be decrypted with the current"," ",e.jsx("code",{children:"OTARI_SECRET_KEY"}),". Restore the old secret key and re-encrypt, or edit each affected provider and replace its key."]}):null,s?e.jsxs("p",{className:"text-sm text-[var(--otari-muted)]",role:"status","aria-live":"polite",children:["Re-encrypted ",s.reencrypted," provider key",s.reencrypted===1?"":"s",".",s.unreadable>0?` ${s.unreadable} still need replacement.`:" All decryptable stored keys now use the primary secret key."]}):!t.isLoading&&!i?e.jsx("p",{className:"text-sm text-[var(--otari-muted)]",children:"No stored provider keys need re-encryption."}):null]})}function J({masterKeySource:t}){return e.jsxs("section",{className:"flex flex-col gap-2",children:[e.jsxs("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:["Credential security ",e.jsx("span",{className:"font-normal text-[var(--otari-muted)]",children:"(2)"})]}),e.jsx(v,{children:e.jsxs(v.Content,{className:"flex flex-col divide-y divide-[var(--otari-line)] px-5 py-1",children:[e.jsx(G,{source:t}),e.jsx(X,{})]})})]})}function Q({preview:t,error:r,isPending:s,onAccept:a,onReject:n}){return e.jsx(d.Backdrop,{children:e.jsx(d.Container,{placement:"center",size:"lg",children:e.jsxs(d.Dialog,{children:[e.jsx(d.Header,{children:e.jsx(d.Heading,{children:"Review default price updates"})}),e.jsxs(d.Body,{className:"flex flex-col gap-4",children:[e.jsxs("p",{className:"text-sm text-[var(--otari-muted)]",children:[t.added_count," added, ",t.changed_count," changed, and ",t.removed_count," removed upstream model prices. The accepted catalog is saved in the database with source ",e.jsx("code",{children:"genai-prices"})," and reloads after a restart. Your ",t.protected_model_count," custom model price",t.protected_model_count===1?"":"s"," remain unchanged."]}),t.changes.length>0?e.jsx("ul",{className:"max-h-60 list-disc overflow-auto pl-5 text-sm text-[var(--otari-ink)]",children:t.changes.map(i=>e.jsxs("li",{children:[i.model_key,": ",i.change]},i.model_key))}):null,t.changes_truncated?e.jsx("p",{className:"text-xs text-[var(--otari-muted)]",children:"Only the first 100 changes are shown."}):null,e.jsx(y,{error:r})]}),e.jsxs(d.Footer,{children:[e.jsx(h,{variant:"ghost",isDisabled:s,onPress:n,children:"Reject changes"}),e.jsx(h,{variant:"primary",isPending:s,onPress:a,children:"Accept price updates"})]})]})})})}function W(){const t=E(),r=T(),s=_(),a=t.data,n=r.isPending||s.isPending,i=()=>{a===void 0||n||s.mutate(void 0,{onSuccess:t.reset})};return e.jsxs("section",{className:"flex flex-col gap-2",children:[e.jsx("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:"Default pricing catalog"}),e.jsx(v,{children:e.jsxs(v.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-sm font-medium text-[var(--otari-ink)]",children:"genai-prices defaults"}),e.jsxs("p",{className:"mt-1 max-w-3xl text-sm text-[var(--otari-muted)]",children:["Fetch the latest upstream catalog, review the proposed change summary, then accept or reject it. Accepted data is stored as ",e.jsx("code",{children:"genai-prices"}),"; custom prices remain separate and always take precedence."]})]}),e.jsx(h,{size:"sm",variant:"outline",isDisabled:t.isPending||n,onPress:()=>t.mutate(),children:t.isPending?"Checking prices…":"Check for price updates"})]}),e.jsx(y,{error:t.error})]})}),e.jsxs(d,{isOpen:a!==void 0,onOpenChange:o=>o?void 0:i(),children:[e.jsx(d.Trigger,{className:"hidden",children:"Review price updates"}),a?e.jsx(Q,{preview:a,error:r.error??s.error,isPending:n,onAccept:()=>r.mutate(void 0,{onSuccess:t.reset}),onReject:i}):null]})]})}function Z(t){const r=[],s=new Map;for(const a of t){let n=s.get(a.group);n||(n={name:a.group,fields:[]},s.set(a.group,n),r.push(n)),n.fields.push(a)}return r}function ae(){const t=R(),r=C(),s=t.data,a=r.isPending,[n,i]=u.useState(""),[o,c]=u.useState(!1),p=u.useRef(null);u.useEffect(()=>{function l(f){var N;const j=f.target,S=j&&(j.tagName==="INPUT"||j.tagName==="TEXTAREA"||j.tagName==="SELECT");f.key==="/"&&!S&&(f.preventDefault(),(N=p.current)==null||N.focus())}return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[]);const m=l=>r.mutate(l),x=(s==null?void 0:s.config)??[],g=x.filter(l=>(o?l.settable:!0)&&M(l,n)),k=Z(g);return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(P,{title:"Settings",description:"Every effective gateway setting. Settable fields apply immediately and persist across restarts; startup-only fields are shown for reference and change only via config.yml or environment variables (then a restart)."}),e.jsx(y,{error:t.error??r.error}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("input",{ref:p,type:"search","aria-label":"Search settings",placeholder:"Search settings (press / to focus)…",value:n,onChange:l=>i(l.target.value),onKeyDown:l=>{l.key==="Escape"&&i("")},className:"min-w-0 flex-1 rounded-lg border border-[var(--otari-line)] bg-[var(--otari-bg)] px-3 py-2 text-sm text-[var(--otari-ink)] focus:border-[var(--otari-brand)] focus:outline-none"}),e.jsxs("label",{className:"flex items-center gap-2 text-sm text-[var(--otari-muted)]",children:[e.jsx("input",{type:"checkbox",checked:o,onChange:l=>c(l.target.checked),className:"h-4 w-4 accent-[var(--otari-brand)]"}),"Settable only"]})]}),s?e.jsxs("p",{className:"text-xs text-[var(--otari-muted)]",children:["Showing ",g.length," of ",x.length," settings"]}):null,s&&g.length===0?e.jsx("p",{className:"text-sm text-[var(--otari-muted)]",children:"No settings match your search."}):null,k.map(l=>e.jsxs("section",{className:"flex flex-col gap-2",children:[e.jsxs("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:[l.name," ",e.jsxs("span",{className:"font-normal text-[var(--otari-muted)]",children:["(",l.fields.length,")"]})]}),e.jsx(v,{children:e.jsx(v.Content,{className:"flex flex-col divide-y divide-[var(--otari-line)] px-5 py-1",children:l.fields.map(f=>e.jsx(q,{field:f,patch:m,disabled:!s||a},f.key))})})]},l.name)),s?e.jsx(W,{}):null,s?e.jsx(J,{masterKeySource:s.master_key_source}):null,s?e.jsxs("p",{className:"text-xs text-[var(--otari-muted)]",children:["Mode: ",s.mode," · Version ",s.version,s.require_pricing?" · require_pricing on":""]}):null]})}export{ae as SettingsPage,M as fieldMatches}; diff --git a/src/gateway/static/dashboard/assets/Table-CLdjdyTx.js b/src/gateway/static/dashboard/assets/Table-CLdjdyTx.js deleted file mode 100644 index 04d39f13..00000000 --- a/src/gateway/static/dashboard/assets/Table-CLdjdyTx.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./tanstack-query-1t81HyiD.js";import{r as c}from"./react-dgEcD0HR.js";import{S as f}from"./heroui-BX6JwHY-.js";const p=60,h=c.createContext(null);function w({children:n}){const[t,s]=c.useState(null),i=c.useCallback(e=>{s(o=>o||Array.from(e.cells,l=>Math.max(p,Math.round(l.getBoundingClientRect().width))))},[]),u=c.useCallback((e,o)=>{s(l=>{if(!l)return l;const d=l.slice();return d[e]=Math.max(p,Math.round(o)),d})},[]),x={widths:t,pinWidths:i,setColumnWidth:u},a=t?t.reduce((e,o)=>e+o,0):null;return r.jsx(h.Provider,{value:x,children:r.jsx("div",{className:"overflow-x-auto rounded-xl border border-[var(--otari-line)] bg-[var(--otari-surface)]",children:r.jsxs("table",{className:`border-collapse text-sm ${t?"table-fixed":"w-full"}`,style:a?{width:`${a}px`}:void 0,children:[t?r.jsx("colgroup",{children:t.map((e,o)=>r.jsx("col",{style:{width:`${e}px`}},o))}):null,n]})})})}function C({children:n}){return r.jsx("thead",{className:"border-b border-[var(--otari-line)] bg-[var(--otari-brand-tint)] text-left",children:n})}function b({resize:n}){const t=c.useRef(null),s=c.useRef(null),i=a=>{var l,d;const e=(l=t.current)==null?void 0:l.closest("th"),o=e==null?void 0:e.parentElement;!e||!(o instanceof HTMLTableRowElement)||(a.preventDefault(),a.stopPropagation(),n.pinWidths(o),(d=t.current)==null||d.setPointerCapture(a.pointerId),s.current={index:e.cellIndex,startX:a.clientX,startWidth:e.getBoundingClientRect().width})},u=a=>{var o;const e=s.current;!e||!((o=t.current)!=null&&o.hasPointerCapture(a.pointerId))||n.setColumnWidth(e.index,e.startWidth+(a.clientX-e.startX))},x=a=>{var e;(e=t.current)!=null&&e.hasPointerCapture(a.pointerId)&&t.current.releasePointerCapture(a.pointerId),s.current=null};return r.jsx("span",{ref:t,"aria-hidden":!0,title:"Drag to resize",onPointerDown:i,onPointerMove:u,onPointerUp:x,onPointerCancel:x,className:"group absolute top-0 right-0 z-10 flex h-full w-2 cursor-col-resize touch-none select-none justify-end",children:r.jsx("span",{className:"h-full w-px bg-[var(--otari-line)] transition-all group-hover:w-0.5 group-hover:bg-[var(--otari-brand)]"})})}function N({children:n,className:t="",ariaSort:s}){const i=c.useContext(h);return r.jsxs("th",{"aria-sort":s,className:`relative px-4 py-2.5 font-semibold text-[var(--otari-ink)] whitespace-nowrap ${t}`,children:[n,i?r.jsx(b,{resize:i}):null]})}function R({children:n,className:t=""}){return r.jsx("td",{className:`px-4 py-2.5 align-middle ${t}`,children:n})}function y({children:n,className:t="",onClick:s,selected:i}){return r.jsx("tr",{onClick:s,onKeyDown:s?u=>{(u.key==="Enter"||u.key===" ")&&(u.preventDefault(),s())}:void 0,tabIndex:s?0:void 0,"aria-selected":i,className:`border-b border-[var(--otari-line)] last:border-b-0 ${s?"cursor-pointer focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-[var(--otari-brand)]":""} ${i?"bg-[var(--otari-brand-tint)]":"hover:bg-[var(--otari-bg)]"} ${t}`,children:n})}function m({colSpan:n,children:t}){return r.jsx("tr",{children:r.jsx("td",{colSpan:n,className:"px-4 py-10 text-center text-[var(--otari-muted)]",children:t})})}function z({colSpan:n}){return r.jsx(m,{colSpan:n,children:r.jsxs("span",{className:"inline-flex items-center gap-2",children:[r.jsx(f,{size:"sm"})," Loading…"]})})}export{z as L,w as T,C as a,N as b,m as c,y as d,R as e}; diff --git a/src/gateway/static/dashboard/assets/TablePagination-CsvD577_.js b/src/gateway/static/dashboard/assets/TablePagination-CsvD577_.js new file mode 100644 index 00000000..fd0b355c --- /dev/null +++ b/src/gateway/static/dashboard/assets/TablePagination-CsvD577_.js @@ -0,0 +1 @@ +import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as u}from"./react-dgEcD0HR.js";import{I as w,E as M,F as D}from"./index-D1O_nkKy.js";import{A as o,B as x,T as F,L as $,I as T,S as y}from"./heroui-DZj66Arc.js";function _({label:t,value:r,onChange:a,isRequired:c,autoFocus:i}){return e.jsxs(F,{value:r,onChange:a,isRequired:c,className:"flex flex-col gap-1",children:[e.jsx($,{className:"text-sm font-medium text-[var(--otari-ink)]",children:t}),e.jsx(T,{inputMode:"decimal",placeholder:"0.00",autoFocus:i})]})}function R(t){const r=t.trim();if(r==="")return null;const a=Number(r);return Number.isFinite(a)&&a>=0?a:Number.NaN}const C=t=>`Recompute cost for ${t.toLocaleString()} imported ${t===1?"row":"rows"} from each row's own token counts at these per-1M rates. Enforced gateway rows are never affected.`;function W({isOpen:t,onOpenChange:r,targetCount:a,isPending:c,error:i,onSubmit:E,title:I="Set price",description:L=C}){const[j,p]=u.useState(""),[n,h]=u.useState(""),[b,N]=u.useState(""),[f,v]=u.useState("");u.useEffect(()=>{t&&(p(""),h(""),N(""),v(""))},[t]);const m=R(j),l=R(n),d=R(b),s=R(f),g=m===null||Number.isNaN(m)||l===null||Number.isNaN(l)||Number.isNaN(d??0)||Number.isNaN(s??0),S=()=>{g||m===null||l===null||E({input_price_per_million:m,output_price_per_million:l,...d!==null&&!Number.isNaN(d)?{cache_read_price_per_million:d}:{},...s!==null&&!Number.isNaN(s)?{cache_write_price_per_million:s}:{}})};return e.jsx(o,{isOpen:t,onOpenChange:r,children:t?e.jsx(o.Backdrop,{children:e.jsx(o.Container,{placement:"center",size:"lg",children:e.jsxs(o.Dialog,{children:[e.jsx(o.Header,{children:e.jsx(o.Heading,{children:I})}),e.jsxs(o.Body,{className:"flex flex-col gap-4",children:[e.jsx("p",{className:"text-sm text-[var(--otari-muted)]",children:L(a)}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsx(_,{label:"Input $ / 1M",value:j,onChange:p,isRequired:!0,autoFocus:!0}),e.jsx(_,{label:"Output $ / 1M",value:n,onChange:h,isRequired:!0}),e.jsx(_,{label:"Cache read $ / 1M",value:b,onChange:N}),e.jsx(_,{label:"Cache write $ / 1M",value:f,onChange:v})]}),e.jsx(w,{tone:"info",children:"Leave a cache rate blank to bill those tokens at the input rate."}),e.jsx(M,{error:i})]}),e.jsxs(o.Footer,{children:[e.jsx(x,{variant:"ghost",isDisabled:c,onPress:()=>r(!1),children:"Cancel"}),e.jsx(x,{variant:"primary",isDisabled:g,isPending:c,onPress:S,children:"Set price"})]})]})})}):null})}const k=[25,50,100,250,500];function q({page:t,pageSize:r,total:a,rowsOnPage:c,onPageChange:i,onPageSizeChange:E,pageSizeOptions:I=k,isFetching:L=!1,hasNextFallback:j=!1}){const p=u.useId(),n=a!=null?Math.max(1,Math.ceil(a/r)):null,h=t===0,b=n!=null?t>=n-1:!j,N=c>0?t*r+1:0,f=t*r+c,v=a!=null?a===0?"0 of 0":`${N.toLocaleString()}–${f.toLocaleString()} of ${a.toLocaleString()}`:c>0?`${N.toLocaleString()}–${f.toLocaleString()}`:"0",[m,l]=u.useState(String(t+1));u.useEffect(()=>{l(String(t+1))},[t]);const d=()=>{const s=Number.parseInt(m,10);if(Number.isNaN(s)){l(String(t+1));return}const g=n??Number.MAX_SAFE_INTEGER,S=Math.min(Math.max(s,1),g);S-1!==t?i(S-1):l(String(t+1))};return e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{htmlFor:p,className:"text-sm text-[var(--otari-muted)]",children:"Rows"}),e.jsx(D,{id:p,ariaLabel:"Rows per page",value:String(r),onChange:s=>E(Number.parseInt(s,10)),options:I.map(s=>({value:String(s),label:String(s)}))}),L?e.jsx(y,{size:"sm"}):null]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-sm text-[var(--otari-muted)] tabular-nums",children:v}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(x,{size:"sm",variant:"outline","aria-label":"First page",isDisabled:h,onPress:()=>i(0),children:"«"}),e.jsx(x,{size:"sm",variant:"outline","aria-label":"Previous page",isDisabled:h,onPress:()=>i(t-1),children:"‹"}),e.jsxs("span",{className:"inline-flex items-center gap-1 text-sm text-[var(--otari-muted)]",children:[e.jsx("input",{"aria-label":"Page number",inputMode:"numeric",value:m,onChange:s=>l(s.target.value.replace(/[^0-9]/g,"")),onKeyDown:s=>{s.key==="Enter"&&s.currentTarget.blur()},onBlur:d,className:"w-12 rounded-lg border border-[var(--otari-line)] bg-[var(--otari-bg)] px-2 py-1 text-center text-sm text-[var(--otari-ink)] tabular-nums focus:border-[var(--otari-brand)] focus:outline-none"}),n!=null?e.jsxs("span",{className:"tabular-nums",children:["/ ",n.toLocaleString()]}):null]}),e.jsx(x,{size:"sm",variant:"outline","aria-label":"Next page",isDisabled:b,onPress:()=>i(t+1),children:"›"}),e.jsx(x,{size:"sm",variant:"outline","aria-label":"Last page",isDisabled:n==null||b,onPress:()=>n!=null&&i(n-1),children:"»"})]})]})]})}export{W as S,q as T}; diff --git a/src/gateway/static/dashboard/assets/ToolsGuardrailsPage-CrPO-IWo.js b/src/gateway/static/dashboard/assets/ToolsGuardrailsPage-jvTZg2ew.js similarity index 97% rename from src/gateway/static/dashboard/assets/ToolsGuardrailsPage-CrPO-IWo.js rename to src/gateway/static/dashboard/assets/ToolsGuardrailsPage-jvTZg2ew.js index 2bccde93..4b7162c7 100644 --- a/src/gateway/static/dashboard/assets/ToolsGuardrailsPage-CrPO-IWo.js +++ b/src/gateway/static/dashboard/assets/ToolsGuardrailsPage-jvTZg2ew.js @@ -1 +1 @@ -import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as x}from"./react-dgEcD0HR.js";import{a5 as C,a6 as L,P as E,E as P,i as w,a7 as R,F as D}from"./index-d3Tp3DkF.js";import{d as N,B as b}from"./heroui-BX6JwHY-.js";function M(s,t){return{[s]:t}}const U=[{key:"web_search",label:"Web search",blurb:"Backend for otari_web_search tools (a SearXNG instance or a search adapter).",order:["web_search_url","web_search_engines","web_search_max_results","web_search_extract","web_search_purpose_hint"]},{key:"sandbox",label:"Code execution",blurb:"Backend for otari_code_execution tools (the sandbox that runs generated code).",order:["sandbox_url","sandbox_purpose_hint"]},{key:"guardrails",label:"Guardrails",blurb:"Default input-guardrails service used when a request does not pass its own guardrail URL.",order:["guardrails_url"]}];function B(){const[s,t]=x.useState(null),a=x.useRef(void 0),n=r=>{t(r),window.clearTimeout(a.current),a.current=window.setTimeout(()=>t(null),2500)};return x.useEffect(()=>()=>window.clearTimeout(a.current),[]),[s,n]}function $({message:s}){return s?e.jsxs("div",{role:"status","aria-live":"polite",className:"fixed right-4 bottom-4 z-50 flex items-center gap-2 rounded-lg border border-green-200 bg-green-50 px-4 py-3 text-sm font-medium text-green-700 shadow-lg",children:[e.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2","aria-hidden":!0,className:"h-5 w-5",children:e.jsx("path",{d:"M20 6 9 17l-5-5",strokeLinecap:"round",strokeLinejoin:"round"})}),s]}):null}const S="rounded-md border border-[var(--otari-line)] bg-[var(--otari-surface)] px-2 py-1 text-sm focus:border-[var(--otari-brand)] focus:outline-none disabled:opacity-50",g="grid gap-x-4 gap-y-1.5 py-4 sm:grid-cols-[minmax(0,1fr)_16rem_10rem] sm:items-start",_=`w-full sm:col-start-2 ${S}`,k="flex items-center gap-2 sm:col-start-3",f="flex flex-col gap-1 sm:col-span-2 sm:col-start-2";function j({message:s}){return s?e.jsx("span",{className:"break-words text-xs text-red-700",children:s}):null}function y({field:s,help:t}){return e.jsxs("div",{className:"min-w-0 sm:col-start-1",children:[e.jsx("code",{className:"text-sm font-medium text-[var(--otari-ink)]",children:s.key}),s.description?e.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:s.description}):null,t?e.jsx("p",{className:"mt-1 text-xs text-[var(--otari-muted)]",children:t}):null]})}function z({field:s,onSave:t,saveError:a,disabled:n}){const r=typeof s.value=="string"?s.value:"",[l,i]=x.useState(r),[m,p]=x.useState(null),c=R();x.useEffect(()=>{i(r)},[r]);const o=l.trim()!==r,d=l.trim(),h=m!==null&&m===d;return e.jsxs("div",{className:g,children:[e.jsx(y,{field:s,help:"Leave blank and Save to fall back to the configured default."}),e.jsx("input",{type:"text",inputMode:"url","aria-label":s.key,value:l,disabled:n,placeholder:"unset",onChange:v=>{i(v.target.value),c.reset()},className:_}),e.jsxs("div",{className:k,children:[e.jsx(b,{size:"sm",variant:"primary","aria-label":`Save ${s.key}`,isDisabled:n||!o,onPress:()=>t(d===""?null:d),children:"Save"}),e.jsx(b,{size:"sm",variant:"outline","aria-label":`Test ${s.service}`,isDisabled:d===""||c.isPending,onPress:()=>{p(d),c.mutate({service:s.service,url:d})},children:c.isPending?"Testing…":"Test"})]}),e.jsxs("div",{className:f,children:[e.jsx("span",{role:"status","aria-live":"polite",className:"block break-words text-xs",children:c.isPending||!h?null:c.error?e.jsx("span",{className:"text-red-700",children:w(c.error)}):c.data?e.jsx("span",{className:c.data.ok?"font-medium text-green-700":"text-red-700",children:c.data.reason}):null}),e.jsx(j,{message:a})]})]})}function G({field:s,onSave:t,saveError:a,disabled:n}){const r=typeof s.value=="string"?s.value:"",[l,i]=x.useState(r);x.useEffect(()=>{i(r)},[r]);const m=l!==r;return e.jsxs("div",{className:g,children:[e.jsx(y,{field:s}),e.jsx("input",{type:"text","aria-label":s.key,value:l,disabled:n,placeholder:"default",onChange:p=>i(p.target.value),className:_}),e.jsx("div",{className:k,children:e.jsx(b,{size:"sm",variant:"primary","aria-label":`Save ${s.key}`,isDisabled:n||!m,onPress:()=>t(l.trim()===""?null:l.trim()),children:"Save"})}),a?e.jsx("div",{className:f,children:e.jsx(j,{message:a})}):null]})}function I({field:s,onSave:t,saveError:a,disabled:n}){const r=typeof s.value=="number"?String(s.value):"",[l,i]=x.useState(r);x.useEffect(()=>{i(r)},[r]);const m=l.trim(),p=Number(m),o=(m===""||Number.isInteger(p)&&p>=1)&&m!==r;return e.jsxs("div",{className:g,children:[e.jsx(y,{field:s,help:"Leave blank to use the backend default."}),e.jsx("input",{type:"number",min:"1",step:"1",inputMode:"numeric","aria-label":s.key,value:l,disabled:n,placeholder:"default",onChange:d=>i(d.target.value),className:`w-full text-right tabular-nums sm:col-start-2 sm:w-28 sm:justify-self-end ${S}`}),e.jsx("div",{className:k,children:e.jsx(b,{size:"sm",variant:"primary","aria-label":`Save ${s.key}`,isDisabled:n||!o,onPress:()=>t(m===""?null:p),children:"Save"})}),a?e.jsx("div",{className:f,children:e.jsx(j,{message:a})}):null]})}function A({field:s,onSave:t,saveError:a,disabled:n}){const r=s.value===!0?"on":s.value===!1?"off":"default";return e.jsxs("div",{className:g,children:[e.jsx(y,{field:s}),e.jsx("div",{className:"sm:col-start-2 sm:justify-self-start",children:e.jsx(D,{ariaLabel:s.key,value:r,onChange:l=>t(l==="default"?null:l==="on"),options:[{value:"default",label:"Default"},{value:"on",label:"On"},{value:"off",label:"Off"}],disabled:n})}),a?e.jsx("div",{className:f,children:e.jsx(j,{message:a})}):null]})}function F({field:s,onSave:t,saveError:a,disabled:n}){return s.type==="url"?e.jsx(z,{field:s,onSave:t,saveError:a,disabled:n}):s.type==="int"?e.jsx(I,{field:s,onSave:t,saveError:a,disabled:n}):s.type==="bool"?e.jsx(A,{field:s,onSave:t,saveError:a,disabled:n}):e.jsx(G,{field:s,onSave:t,saveError:a,disabled:n})}function K(){const s=C(),t=L(),[a,n]=B(),[r,l]=x.useState({}),i=s.data,m=!i||t.isPending,p=new Map(((i==null?void 0:i.fields)??[]).map(o=>[o.key,o])),c=(o,d)=>{l(h=>{const{[o.key]:v,...u}=h;return u}),t.mutate(M(o.key,d),{onSuccess:()=>n(`${o.key} saved`),onError:h=>l(v=>({...v,[o.key]:w(h)}))})};return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(E,{title:"Tools & Guardrails",description:"Configure the built-in tool and guardrail service endpoints without a restart. Changes apply immediately and persist. URLs are validated for shape (http/https) and can be tested for reachability before saving; the network-safety gates for these services live on the Settings page."}),e.jsx(P,{error:s.error}),U.map(o=>{const d=o.order.map(u=>p.get(u)).filter(u=>u!==void 0),h=((i==null?void 0:i.fields)??[]).filter(u=>u.service===o.key&&!o.order.includes(u.key)),v=[...d,...h];return v.length===0?null:e.jsxs("section",{className:"flex flex-col gap-2",children:[e.jsx("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:o.label}),e.jsx("p",{className:"text-sm text-[var(--otari-muted)]",children:o.blurb}),e.jsx(N,{children:e.jsx(N.Content,{className:"flex flex-col divide-y divide-[var(--otari-line)] px-5 py-1",children:v.map(u=>e.jsx(F,{field:u,onSave:T=>c(u,T),saveError:r[u.key],disabled:m},u.key))})})]},o.key)}),e.jsx($,{message:a})]})}export{K as ToolsGuardrailsPage}; +import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as x}from"./react-dgEcD0HR.js";import{a7 as C,a8 as L,P as E,E as P,D as w,a9 as R,F as D}from"./index-D1O_nkKy.js";import{d as N,B as b}from"./heroui-DZj66Arc.js";function M(s,t){return{[s]:t}}const U=[{key:"web_search",label:"Web search",blurb:"Backend for otari_web_search tools (a SearXNG instance or a search adapter).",order:["web_search_url","web_search_engines","web_search_max_results","web_search_extract","web_search_purpose_hint"]},{key:"sandbox",label:"Code execution",blurb:"Backend for otari_code_execution tools (the sandbox that runs generated code).",order:["sandbox_url","sandbox_purpose_hint"]},{key:"guardrails",label:"Guardrails",blurb:"Default input-guardrails service used when a request does not pass its own guardrail URL.",order:["guardrails_url"]}];function B(){const[s,t]=x.useState(null),a=x.useRef(void 0),n=r=>{t(r),window.clearTimeout(a.current),a.current=window.setTimeout(()=>t(null),2500)};return x.useEffect(()=>()=>window.clearTimeout(a.current),[]),[s,n]}function $({message:s}){return s?e.jsxs("div",{role:"status","aria-live":"polite",className:"fixed right-4 bottom-4 z-50 flex items-center gap-2 rounded-lg border border-green-200 bg-green-50 px-4 py-3 text-sm font-medium text-green-700 shadow-lg",children:[e.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2","aria-hidden":!0,className:"h-5 w-5",children:e.jsx("path",{d:"M20 6 9 17l-5-5",strokeLinecap:"round",strokeLinejoin:"round"})}),s]}):null}const S="rounded-md border border-[var(--otari-line)] bg-[var(--otari-surface)] px-2 py-1 text-sm focus:border-[var(--otari-brand)] focus:outline-none disabled:opacity-50",g="grid gap-x-4 gap-y-1.5 py-4 sm:grid-cols-[minmax(0,1fr)_16rem_10rem] sm:items-start",_=`w-full sm:col-start-2 ${S}`,k="flex items-center gap-2 sm:col-start-3",f="flex flex-col gap-1 sm:col-span-2 sm:col-start-2";function j({message:s}){return s?e.jsx("span",{className:"break-words text-xs text-red-700",children:s}):null}function y({field:s,help:t}){return e.jsxs("div",{className:"min-w-0 sm:col-start-1",children:[e.jsx("code",{className:"text-sm font-medium text-[var(--otari-ink)]",children:s.key}),s.description?e.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:s.description}):null,t?e.jsx("p",{className:"mt-1 text-xs text-[var(--otari-muted)]",children:t}):null]})}function z({field:s,onSave:t,saveError:a,disabled:n}){const r=typeof s.value=="string"?s.value:"",[l,i]=x.useState(r),[m,p]=x.useState(null),c=R();x.useEffect(()=>{i(r)},[r]);const o=l.trim()!==r,d=l.trim(),h=m!==null&&m===d;return e.jsxs("div",{className:g,children:[e.jsx(y,{field:s,help:"Leave blank and Save to fall back to the configured default."}),e.jsx("input",{type:"text",inputMode:"url","aria-label":s.key,value:l,disabled:n,placeholder:"unset",onChange:v=>{i(v.target.value),c.reset()},className:_}),e.jsxs("div",{className:k,children:[e.jsx(b,{size:"sm",variant:"primary","aria-label":`Save ${s.key}`,isDisabled:n||!o,onPress:()=>t(d===""?null:d),children:"Save"}),e.jsx(b,{size:"sm",variant:"outline","aria-label":`Test ${s.service}`,isDisabled:d===""||c.isPending,onPress:()=>{p(d),c.mutate({service:s.service,url:d})},children:c.isPending?"Testing…":"Test"})]}),e.jsxs("div",{className:f,children:[e.jsx("span",{role:"status","aria-live":"polite",className:"block break-words text-xs",children:c.isPending||!h?null:c.error?e.jsx("span",{className:"text-red-700",children:w(c.error)}):c.data?e.jsx("span",{className:c.data.ok?"font-medium text-green-700":"text-red-700",children:c.data.reason}):null}),e.jsx(j,{message:a})]})]})}function G({field:s,onSave:t,saveError:a,disabled:n}){const r=typeof s.value=="string"?s.value:"",[l,i]=x.useState(r);x.useEffect(()=>{i(r)},[r]);const m=l!==r;return e.jsxs("div",{className:g,children:[e.jsx(y,{field:s}),e.jsx("input",{type:"text","aria-label":s.key,value:l,disabled:n,placeholder:"default",onChange:p=>i(p.target.value),className:_}),e.jsx("div",{className:k,children:e.jsx(b,{size:"sm",variant:"primary","aria-label":`Save ${s.key}`,isDisabled:n||!m,onPress:()=>t(l.trim()===""?null:l.trim()),children:"Save"})}),a?e.jsx("div",{className:f,children:e.jsx(j,{message:a})}):null]})}function I({field:s,onSave:t,saveError:a,disabled:n}){const r=typeof s.value=="number"?String(s.value):"",[l,i]=x.useState(r);x.useEffect(()=>{i(r)},[r]);const m=l.trim(),p=Number(m),o=(m===""||Number.isInteger(p)&&p>=1)&&m!==r;return e.jsxs("div",{className:g,children:[e.jsx(y,{field:s,help:"Leave blank to use the backend default."}),e.jsx("input",{type:"number",min:"1",step:"1",inputMode:"numeric","aria-label":s.key,value:l,disabled:n,placeholder:"default",onChange:d=>i(d.target.value),className:`w-full text-right tabular-nums sm:col-start-2 sm:w-28 sm:justify-self-end ${S}`}),e.jsx("div",{className:k,children:e.jsx(b,{size:"sm",variant:"primary","aria-label":`Save ${s.key}`,isDisabled:n||!o,onPress:()=>t(m===""?null:p),children:"Save"})}),a?e.jsx("div",{className:f,children:e.jsx(j,{message:a})}):null]})}function A({field:s,onSave:t,saveError:a,disabled:n}){const r=s.value===!0?"on":s.value===!1?"off":"default";return e.jsxs("div",{className:g,children:[e.jsx(y,{field:s}),e.jsx("div",{className:"sm:col-start-2 sm:justify-self-start",children:e.jsx(D,{ariaLabel:s.key,value:r,onChange:l=>t(l==="default"?null:l==="on"),options:[{value:"default",label:"Default"},{value:"on",label:"On"},{value:"off",label:"Off"}],disabled:n})}),a?e.jsx("div",{className:f,children:e.jsx(j,{message:a})}):null]})}function F({field:s,onSave:t,saveError:a,disabled:n}){return s.type==="url"?e.jsx(z,{field:s,onSave:t,saveError:a,disabled:n}):s.type==="int"?e.jsx(I,{field:s,onSave:t,saveError:a,disabled:n}):s.type==="bool"?e.jsx(A,{field:s,onSave:t,saveError:a,disabled:n}):e.jsx(G,{field:s,onSave:t,saveError:a,disabled:n})}function K(){const s=C(),t=L(),[a,n]=B(),[r,l]=x.useState({}),i=s.data,m=!i||t.isPending,p=new Map(((i==null?void 0:i.fields)??[]).map(o=>[o.key,o])),c=(o,d)=>{l(h=>{const{[o.key]:v,...u}=h;return u}),t.mutate(M(o.key,d),{onSuccess:()=>n(`${o.key} saved`),onError:h=>l(v=>({...v,[o.key]:w(h)}))})};return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(E,{title:"Tools & Guardrails",description:"Configure the built-in tool and guardrail service endpoints without a restart. Changes apply immediately and persist. URLs are validated for shape (http/https) and can be tested for reachability before saving; the network-safety gates for these services live on the Settings page."}),e.jsx(P,{error:s.error}),U.map(o=>{const d=o.order.map(u=>p.get(u)).filter(u=>u!==void 0),h=((i==null?void 0:i.fields)??[]).filter(u=>u.service===o.key&&!o.order.includes(u.key)),v=[...d,...h];return v.length===0?null:e.jsxs("section",{className:"flex flex-col gap-2",children:[e.jsx("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:o.label}),e.jsx("p",{className:"text-sm text-[var(--otari-muted)]",children:o.blurb}),e.jsx(N,{children:e.jsx(N.Content,{className:"flex flex-col divide-y divide-[var(--otari-line)] px-5 py-1",children:v.map(u=>e.jsx(F,{field:u,onSave:T=>c(u,T),saveError:r[u.key],disabled:m},u.key))})})]},o.key)}),e.jsx($,{message:a})]})}export{K as ToolsGuardrailsPage}; diff --git a/src/gateway/static/dashboard/assets/UsagePage-B6UkNWAG.js b/src/gateway/static/dashboard/assets/UsagePage-B6UkNWAG.js new file mode 100644 index 00000000..1788b557 --- /dev/null +++ b/src/gateway/static/dashboard/assets/UsagePage-B6UkNWAG.js @@ -0,0 +1 @@ +import{j as e}from"./tanstack-query-1t81HyiD.js";import{B as y,c as Me,S as xe}from"./heroui-DZj66Arc.js";import{i as Te,r as c}from"./react-dgEcD0HR.js";import{u as Fe,a as Le,d as X,M as q,P as qe,E as je,g as ee,S as D,O,N as Z,R as Oe,aa as K,e as Ee,f as Re,b as Ae,c as fe}from"./index-D1O_nkKy.js";import{u as Ue,r as $e,B as Be}from"./tableSelection-CLDlIlLU.js";import{S as te,B as Ke}from"./charts-CuOShutR.js";import{C as ze}from"./ConfirmDialog-CSBsET-p.js";import{D as Se}from"./DataTable-mgItq60H.js";import{T as Ie,S as He}from"./TablePagination-CsvD577_.js";import"./recharts-D7kuKp97.js";function Y(s){return s.toLocaleString()}function Ye(s){return s===null?"—":s<1e3?`${Math.round(s)} ms`:`${(s/1e3).toFixed(2)} s`}const Ze=3600,se=86400,H=[{label:"Last hour",seconds:Ze,bucket:"hour"},{label:"24h",seconds:se,bucket:"hour"},{label:"7d",seconds:7*se,bucket:"day"},{label:"30d",seconds:30*se,bucket:"day"},{label:"All",seconds:null,bucket:"day"}],ae=H[3],ne=15;function re(s){return new Date(Date.now()-s*1e3).toISOString()}const pe="__other__",ve="__unknown__";function be({title:s,rows:o,totalCost:m,emptyLabel:l,onDrill:f,loading:u}){const[d,h]=c.useState(!1),k=d?o:o.slice(0,ne),M=o.length-k.length,w=r=>r.is_other?pe:r.key??ve,T=[{id:"name",header:s.replace("Spend by ",""),isRowHeader:!0,cell:r=>{const g=m>0?r.cost/m:0;return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("span",{className:"truncate text-[var(--otari-ink)]",children:r.is_other?`Other (${r.requests.toLocaleString()} req)`:r.key===null?"(unknown)":r.key}),e.jsx("span",{className:"h-1 w-full overflow-hidden rounded-full bg-[var(--otari-line)]",children:e.jsx("span",{className:"block h-full rounded-full bg-[var(--otari-brand)]",style:{width:`${Math.min(100,g*100)}%`}})})]})}},{id:"requests",header:"Requests",align:"end",cell:r=>e.jsx("span",{className:"text-[var(--otari-muted)]",children:Y(r.requests)})},{id:"spend",header:"Spend",align:"end",cell:r=>e.jsx("span",{className:"text-[var(--otari-ink)]",children:Z(r.cost)})}];return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:s}),e.jsx(Se,{ariaLabel:s,columns:T,rows:k,getRowKey:w,isLoading:u,emptyContent:l,onRowAction:r=>{r!==pe&&r!==ve&&f(r)}}),!u&&M>0?e.jsxs(y,{size:"sm",variant:"ghost",onPress:()=>h(!0),children:["Show all ",o.length]}):null,!u&&d&&o.length>ne?e.jsxs(y,{size:"sm",variant:"ghost",onPress:()=>h(!1),children:["Show top ",ne]}):null]})}const Ve=[{key:"cost",label:"Cost"},{key:"tokens",label:"Tokens"},{key:"requests",label:"Requests"}];function Ge(s,o){return o==="cost"?s.cost:o==="tokens"?s.tokens:s.requests}function _e(s,o){return o==="cost"?Z(s):o==="tokens"?K(s):Y(s)}function Je(s,o){const m=new Date(s);return Number.isNaN(m.getTime())?s:o==="hour"?m.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",timeZone:"UTC"}):m.toLocaleDateString(void 0,{month:"short",day:"numeric",timeZone:"UTC"})}function Qe(s,o,m){const l=s.map(u=>({label:Je(u.bucket_start,m),value:Ge(u,o)})),f=l.length?Math.max(...l.map(u=>u.value)):0;return{points:l,peak:f,count:s.length}}const We=50;function Xe(s){const o=new Date(s).getTime();if(Number.isNaN(o))return s;const m=Math.max(0,Math.round((Date.now()-o)/1e3));if(m<60)return`${m}s ago`;const l=Math.round(m/60);if(l<60)return`${l}m ago`;const f=Math.round(l/60);return f<24?`${f}h ago`:`${Math.round(f/24)}d ago`}function et({status:s}){return e.jsx("span",{className:`inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium ${s==="error"?"border-red-200 bg-red-50 text-red-700":"border-[var(--otari-line)] bg-[var(--otari-brand-tint)] text-[var(--otari-brand-dark)]"}`,children:s})}function tt({filters:s,anyFilter:o}){var z,I;const[m,l]=c.useState(0),[f,u]=c.useState(We),d=Ue(),h=Ee(),k=Re(),[M,w]=c.useState(!1),[T,r]=c.useState(!1),g=JSON.stringify(s),E=c.useRef(g);c.useEffect(()=>{E.current!==g&&(E.current=g,l(0),d.clear())},[g,d]);const b=Ae(s,m,f),C=fe(s),p=b.data??[],P=C.isSuccess&&!C.isPlaceholderData?((z=C.data)==null?void 0:z.total)??0:null,R=p.filter(n=>!n.counts_toward_budget).map(n=>n.id),S=p.filter(n=>n.counts_toward_budget).map(n=>n.id),N=$e(d.selectedKeys,R),v=N.length,_=d.allMatching||v>0,A=c.useMemo(()=>({...s,counts_toward_budget:!1}),[s]),j=fe(A,_),F=j.isSuccess?((I=j.data)==null?void 0:I.total)??null:null,a=R.length>0&&v===R.length&&F!=null&&F>v,i=d.allMatching?F??v:v,U=()=>d.allMatching?{by_filter:!0,model:s.model,user_id:s.user_id,api_key_id:s.api_key_id,start_date:s.start_date,end_date:s.end_date,priced:s.priced}:{ids:N},G=()=>h.mutate(U(),{onSuccess:()=>{w(!1),d.clear()}}),oe=n=>k.mutate({...U(),...n},{onSuccess:()=>{r(!1),d.clear()}}),$=[{id:"time",header:"Time",isRowHeader:!0,cell:n=>e.jsx("span",{className:"text-[var(--otari-muted)]",title:new Date(n.timestamp).toLocaleString(),children:Xe(n.timestamp)})},{id:"model",header:"Model",cell:n=>e.jsx("span",{className:"text-[var(--otari-ink)]",children:n.model})},{id:"user",header:"User",cell:n=>e.jsx("span",{className:"text-[var(--otari-muted)]",children:n.user_id??"—"})},{id:"tokens",header:"Tokens",align:"end",cell:n=>n.total_tokens===null?"—":n.total_tokens.toLocaleString()},{id:"cost",header:"Cost",align:"end",cell:n=>n.cost===null?"—":Z(n.cost)},{id:"status",header:"Status",cell:n=>e.jsx(et,{status:n.status})}];return e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:"Individual requests"}),e.jsx(je,{error:b.error??C.error}),_?e.jsxs(Be,{selectedCount:i,allMatching:d.allMatching,matchingTotal:F,canSelectAllMatching:a,onSelectAllMatching:d.enableAllMatching,onClear:d.clear,children:[e.jsx(y,{size:"sm",variant:"primary",onPress:()=>r(!0),children:"Set price"}),e.jsx(y,{size:"sm",variant:"danger",onPress:()=>w(!0),children:"Delete"})]}):null,e.jsx(Se,{ariaLabel:"Individual requests",columns:$,rows:p,getRowKey:n=>n.id,isLoading:b.isLoading,emptyContent:o?"No requests match these filters.":"No requests recorded yet.",selectionMode:"multiple",selectedKeys:d.selectedKeys,onSelectionChange:d.onSelectionChange,disabledKeys:S}),e.jsx(Ie,{page:m,pageSize:f,total:P,rowsOnPage:p.length,onPageChange:l,onPageSizeChange:n=>{u(n),l(0)},isFetching:b.isFetching,hasNextFallback:p.length===f}),e.jsx(ze,{isOpen:M,onOpenChange:w,heading:"Delete usage rows",body:`Delete ${i.toLocaleString()} imported ${i===1?"row":"rows"}? Only imported rows are removed, and this cannot be undone.`,confirmLabel:"Delete",isPending:h.isPending,error:h.error,onConfirm:G}),e.jsx(He,{isOpen:T,onOpenChange:r,targetCount:i,isPending:k.isPending,error:k.error,onSubmit:oe})]})}function mt(){var ue,me,he;const s=Te(),o=Fe(),m=Le(),[l,f]=c.useState(ae),[u,d]=c.useState(()=>ae.seconds===null?void 0:re(ae.seconds)),[h,k]=c.useState(!1),[M,w]=c.useState(""),[T,r]=c.useState(""),[g,E]=c.useState(""),[b,C]=c.useState(""),[p,V]=c.useState(""),[P,R]=c.useState("cost"),S=h?M||void 0:u,N=h&&T||void 0,v=h?"day":l.bucket,_=c.useMemo(()=>({start_date:S,end_date:N,model:g.trim()||void 0,user_id:b||void 0,api_key_id:p||void 0}),[S,N,g,b,p]),A=c.useMemo(()=>{if(h){if(!S||!N)return null;const t=new Date(N).getTime()-new Date(S).getTime();return t>0?{..._,start_date:new Date(new Date(S).getTime()-t).toISOString(),end_date:S}:null}return l.seconds===null||!u?null:{..._,start_date:new Date(new Date(u).getTime()-l.seconds*1e3).toISOString(),end_date:u}},[h,S,N,_,l.seconds,u]),j=X(_,v),F=X(A??_,v,A!==null),x=j.data,a=x==null?void 0:x.totals,i=A!==null?(ue=F.data)==null?void 0:ue.totals:void 0,U=a?q(a.cost,i==null?void 0:i.cost):null,G=c.useMemo(()=>({..._,model:void 0}),[_]),$=((he=(me=X(G,v).data)==null?void 0:me.by_model)==null?void 0:he.filter(t=>!t.is_other&&t.key!==null).map(t=>t.key))??[],z=(o.data??[]).map(t=>({value:t.user_id,label:t.alias?`${t.alias} (${t.user_id})`:t.user_id})),I=(m.data??[]).map(t=>({value:t.id,label:t.key_name??`${t.id.slice(0,8)}…`})),n=(g&&!$.includes(g)?[g,...$]:$).map(t=>({value:t,label:t})),ye=h?!!(S||N):l.seconds!==null,B=!!(g.trim()||b||p||ye),[le,ke]=c.useState(!1),ie=[g.trim(),b,p].filter(Boolean).length,Ne=!!(x&&a&&a.request_count===0&&!B),ce=t=>{k(!1),f(t),d(t.seconds===null?void 0:re(t.seconds))},we=()=>{ce(H[H.length-1]),w(""),r(""),E(""),C(""),V("")},Ce=()=>{l.seconds!==null&&d(re(l.seconds)),j.refetch()},de=t=>{const W=new URLSearchParams;u&&W.set("start_date",u);for(const[De,ge]of Object.entries(t))ge&&W.set(De,ge);s(`/activity?${W.toString()}`)},Pe=a&&a.request_count>0?a.error_count/a.request_count:0,L=(x==null?void 0:x.series)??[],J=L.length>1,Q=Qe(L,P,v);return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(qe,{title:"Usage & analytics",description:"Aggregate spend, tokens, and request volume over time. Click a model or user to drill into the request log.",action:e.jsx(y,{variant:"outline",onPress:Ce,isDisabled:j.isFetching,children:"Refresh"})}),e.jsx(je,{error:j.error}),e.jsxs("div",{className:"flex flex-wrap items-end gap-3",children:[e.jsxs("div",{className:"flex flex-wrap gap-2",children:[H.map(t=>e.jsx(y,{size:"sm",variant:!h&&l.label===t.label?"primary":"outline",onPress:()=>ce(t),children:t.label},t.label)),e.jsx(y,{size:"sm",variant:h?"primary":"outline",onPress:()=>k(!0),children:"Custom…"})]}),h?e.jsxs("div",{className:"flex flex-wrap items-end gap-2",children:[e.jsxs("label",{className:"flex flex-col gap-1 text-xs font-medium text-[var(--otari-muted)]",children:["From",e.jsx("input",{type:"datetime-local",value:M,onChange:t=>w(t.target.value),className:"rounded-lg border border-[var(--otari-line)] bg-[var(--otari-bg)] px-3 py-2 text-sm text-[var(--otari-ink)] focus:border-[var(--otari-brand)] focus:outline-none"})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-xs font-medium text-[var(--otari-muted)]",children:["To",e.jsx("input",{type:"datetime-local",value:T,onChange:t=>r(t.target.value),className:"rounded-lg border border-[var(--otari-line)] bg-[var(--otari-bg)] px-3 py-2 text-sm text-[var(--otari-ink)] focus:border-[var(--otari-brand)] focus:outline-none"})]})]}):null,e.jsxs(y,{size:"sm",variant:"outline",className:"md:hidden",onPress:()=>ke(t=>!t),"aria-expanded":le,"aria-controls":"usage-filters",children:["Filters",ie?` (${ie})`:""]}),e.jsxs("div",{id:"usage-filters",className:Me("flex-wrap items-end gap-3 md:flex",le?"flex w-full md:w-auto":"hidden"),children:[e.jsx(ee,{label:"User",value:b,onChange:C,options:z,placeholder:"All users"}),e.jsx(ee,{label:"Model",value:g,onChange:E,options:n,placeholder:"All models"}),e.jsx(ee,{label:"API key",value:p,onChange:V,options:I,placeholder:"All keys"}),B?e.jsx(y,{size:"sm",variant:"ghost",onPress:we,children:"Clear filters"}):null]})]}),Ne?e.jsx("div",{className:"rounded-xl border border-[var(--otari-line)] bg-[var(--otari-surface)] px-4 py-10 text-center text-sm text-[var(--otari-muted)]",children:"No usage yet. Once the gateway serves requests, spend and volume appear here."}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-wrap gap-4",children:[e.jsx(D,{label:"Tracked cost",value:a?Z(a.cost):"—",hint:a?e.jsxs("span",{className:"text-[var(--otari-muted)]",children:[e.jsx(O,{fraction:U}),a.unpriced_requests?`${U!==null?" · ":""}${Y(a.unpriced_requests)} unpriced`:null]}):null,chart:J?e.jsx(te,{values:L.map(t=>t.cost),ariaLabel:"Spend trend over the selected window"}):void 0}),e.jsx(D,{label:"Requests",value:a?Y(a.request_count):"—",hint:a?e.jsxs("span",{className:"text-[var(--otari-muted)]",children:[Oe(Pe)," errors",i?e.jsxs(e.Fragment,{children:[" · ",e.jsx(O,{fraction:q(a.request_count,i.request_count)})]}):null]}):null,chart:J?e.jsx(te,{values:L.map(t=>t.requests),ariaLabel:"Request volume trend over the selected window"}):void 0}),e.jsx(D,{label:"Tokens",value:a?K(a.total_tokens):"—",hint:a?e.jsx(O,{fraction:q(a.total_tokens,i==null?void 0:i.total_tokens)}):null,chart:J?e.jsx(te,{values:L.map(t=>t.tokens),ariaLabel:"Token usage trend over the selected window"}):void 0}),e.jsx(D,{label:"Cache read",value:a?K(a.cache_read_tokens):"—",hint:a?e.jsx(O,{fraction:q(a.cache_read_tokens,i==null?void 0:i.cache_read_tokens)}):null}),e.jsx(D,{label:"Cache write",value:a?K(a.cache_write_tokens):"—",hint:a?e.jsx(O,{fraction:q(a.cache_write_tokens,i==null?void 0:i.cache_write_tokens)}):null}),e.jsx(D,{label:"1h cache write",value:a?K(a.cache_write_1h_tokens??0):"—",hint:a?e.jsx(O,{fraction:q(a.cache_write_1h_tokens??0,(i==null?void 0:i.cache_write_1h_tokens)??0)}):null}),e.jsx(D,{label:"Avg latency",value:a?Ye(a.avg_latency_ms):"—"})]}),e.jsxs("div",{className:"grid gap-6 lg:grid-cols-2",children:[e.jsx(be,{title:"Spend by model",rows:(x==null?void 0:x.by_model)??[],totalCost:(a==null?void 0:a.cost)??0,emptyLabel:B?"No usage matches these filters.":"No usage recorded yet.",onDrill:t=>de({model:t,user_id:b||void 0,api_key_id:p||void 0}),loading:j.isLoading}),e.jsx(be,{title:"Spend by user",rows:(x==null?void 0:x.by_user)??[],totalCost:(a==null?void 0:a.cost)??0,emptyLabel:B?"No usage matches these filters.":"No usage recorded yet.",onDrill:t=>de({user_id:t,model:g.trim()||void 0,api_key_id:p||void 0}),loading:j.isLoading})]}),e.jsx(tt,{filters:_,anyFilter:B}),e.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-[var(--otari-line)] bg-[var(--otari-surface)] p-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:"Over time"}),e.jsxs("div",{className:"inline-flex gap-1.5",children:[Ve.map(t=>e.jsx(y,{size:"sm",variant:P===t.key?"primary":"outline",onPress:()=>R(t.key),children:t.label},t.key)),j.isFetching?e.jsx(xe,{size:"sm"}):null]})]}),j.isLoading?e.jsx("div",{className:"flex h-48 items-center justify-center",children:e.jsx(xe,{size:"sm"})}):L.length===0?e.jsx("div",{className:"flex h-48 items-center justify-center text-sm text-[var(--otari-muted)]",children:"No data in this range."}):e.jsxs("figure",{className:"flex flex-col gap-2",children:[e.jsx(Ke,{data:Q.points,formatValue:t=>_e(t,P),ariaLabel:`${P} per ${v}`}),e.jsxs("figcaption",{className:"text-xs text-[var(--otari-muted)]",children:[_e(Q.peak,P)," peak · ",Q.count," ",v==="hour"?"hours":"days"," (times in UTC)"]})]})]})]})]})}export{mt as UsagePage}; diff --git a/src/gateway/static/dashboard/assets/UsagePage-B_5F4WNt.js b/src/gateway/static/dashboard/assets/UsagePage-B_5F4WNt.js deleted file mode 100644 index 72cadade..00000000 --- a/src/gateway/static/dashboard/assets/UsagePage-B_5F4WNt.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./tanstack-query-1t81HyiD.js";import{B as v,c as fe,S as te}from"./heroui-BX6JwHY-.js";import{i as pe,r as u}from"./react-dgEcD0HR.js";import{u as ve,a as je,d as M,L as k,P as be,E as ke,e as $,S as p,N as _,M as V,O as _e,a8 as L}from"./index-d3Tp3DkF.js";import{S as B,B as ye}from"./charts-Cr3Dij9t.js";import{T as Se,a as Ne,b as R,L as we,c as Le,d as qe,e as U}from"./Table-CLdjdyTx.js";import"./recharts-CR3TAEof.js";function T(a){return a.toLocaleString()}function Fe(a){return a===null?"—":a<1e3?`${Math.round(a)} ms`:`${(a/1e3).toFixed(2)} s`}const Te=3600,z=86400,F=[{label:"Last hour",seconds:Te,bucket:"hour"},{label:"24h",seconds:z,bucket:"hour"},{label:"7d",seconds:7*z,bucket:"day"},{label:"30d",seconds:30*z,bucket:"day"},{label:"All",seconds:null,bucket:"day"}],I=F[3],H=15;function K(a){return new Date(Date.now()-a*1e3).toISOString()}function ae({title:a,rows:n,totalCost:m,emptyLabel:l,onDrill:y,loading:r}){const[S,d]=u.useState(!1),N=S?n:n.slice(0,H),x=n.length-N.length;return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:a}),e.jsxs(Se,{children:[e.jsx(Ne,{children:e.jsxs("tr",{children:[e.jsx(R,{children:a.replace("Spend by ","")}),e.jsx(R,{className:"text-right",children:"Requests"}),e.jsx(R,{className:"text-right",children:"Spend"})]})}),e.jsx("tbody",{children:r?e.jsx(we,{colSpan:3}):n.length===0?e.jsx(Le,{colSpan:3,children:l}):N.map((o,h)=>{const w=o.is_other,f=!w&&o.key!==null,C=m>0?o.cost/m:0;return e.jsxs(qe,{onClick:f?()=>y(o.key):void 0,children:[e.jsx(U,{className:"text-[var(--otari-ink)]",children:e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("span",{className:"truncate",children:w?`Other (${o.requests.toLocaleString()} req)`:o.key===null?"(unknown)":o.key}),e.jsx("span",{className:"h-1 w-full overflow-hidden rounded-full bg-[var(--otari-line)]",children:e.jsx("span",{className:"block h-full rounded-full bg-[var(--otari-brand)]",style:{width:`${Math.min(100,C*100)}%`}})})]})}),e.jsx(U,{className:"text-right tabular-nums text-[var(--otari-muted)]",children:T(o.requests)}),e.jsx(U,{className:"text-right tabular-nums text-[var(--otari-ink)]",children:V(o.cost)})]},o.key??`__null_${h}`)})})]}),!r&&x>0?e.jsxs(v,{size:"sm",variant:"ghost",onPress:()=>d(!0),children:["Show all ",n.length]}):null,!r&&S&&n.length>H?e.jsxs(v,{size:"sm",variant:"ghost",onPress:()=>d(!1),children:["Show top ",H]}):null]})}const Ce=[{key:"cost",label:"Cost"},{key:"tokens",label:"Tokens"},{key:"requests",label:"Requests"}];function Pe(a,n){return n==="cost"?a.cost:n==="tokens"?a.tokens:a.requests}function le(a,n){return n==="cost"?V(a):n==="tokens"?L(a):T(a)}function De(a,n){const m=new Date(a);return Number.isNaN(m.getTime())?a:n==="hour"?m.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",timeZone:"UTC"}):m.toLocaleDateString(void 0,{month:"short",day:"numeric",timeZone:"UTC"})}function Oe(a,n,m){const l=a.map(r=>({label:De(r.bucket_start,m),value:Pe(r,n)})),y=l.length?Math.max(...l.map(r=>r.value)):0;return{points:l,peak:y,count:a.length}}function Ie(){var W,X,ee;const a=pe(),n=ve(),m=je(),[l,y]=u.useState(I),[r,S]=u.useState(()=>I.seconds===null?void 0:K(I.seconds)),[d,N]=u.useState(""),[x,o]=u.useState(""),[h,w]=u.useState(""),[f,C]=u.useState("cost"),[Z,ne]=u.useState(!1),j=u.useMemo(()=>({start_date:r,model:d.trim()||void 0,user_id:x||void 0,api_key_id:h||void 0}),[r,d,x,h]),P=u.useMemo(()=>l.seconds===null||!r?null:{...j,start_date:new Date(new Date(r).getTime()-l.seconds*1e3).toISOString(),end_date:r},[j,l.seconds,r]),g=M(j,l.bucket),re=M(P??j,l.bucket,P!==null),c=g.data,t=c==null?void 0:c.totals,i=P!==null?(W=re.data)==null?void 0:W.totals:void 0,Y=t?k(t.cost,i==null?void 0:i.cost):null,ie=u.useMemo(()=>({...j,model:void 0}),[j]),D=((ee=(X=M(ie,l.bucket).data)==null?void 0:X.by_model)==null?void 0:ee.filter(s=>!s.is_other&&s.key!==null).map(s=>s.key))??[],oe=(n.data??[]).map(s=>({value:s.user_id,label:s.alias?`${s.alias} (${s.user_id})`:s.user_id})),ce=(m.data??[]).map(s=>({value:s.id,label:s.key_name??`${s.id.slice(0,8)}…`})),de=(d&&!D.includes(d)?[d,...D]:D).map(s=>({value:s,label:s})),q=!!(d.trim()||x||h||l.seconds!==null),G=[d.trim(),x,h].filter(Boolean).length,ue=!!(c&&t&&t.request_count===0&&!q),J=s=>{y(s),S(s.seconds===null?void 0:K(s.seconds))},me=()=>{J(F[F.length-1]),N(""),o(""),w("")},he=()=>{l.seconds!==null&&S(K(l.seconds)),g.refetch()},Q=s=>{const E=new URLSearchParams;r&&E.set("start_date",r);for(const[ge,se]of Object.entries(s))se&&E.set(ge,se);a(`/activity?${E.toString()}`)},xe=t&&t.request_count>0?t.error_count/t.request_count:0,b=(c==null?void 0:c.series)??[],O=b.length>1,A=Oe(b,f,l.bucket);return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(be,{title:"Usage & analytics",description:"Aggregate spend, tokens, and request volume over time. Click a model or user to drill into the request log.",action:e.jsx(v,{variant:"outline",onPress:he,isDisabled:g.isFetching,children:"Refresh"})}),e.jsx(ke,{error:g.error}),e.jsxs("div",{className:"flex flex-wrap items-end gap-3",children:[e.jsx("div",{className:"flex flex-wrap gap-2",children:F.map(s=>e.jsx(v,{size:"sm",variant:l.label===s.label?"primary":"outline",onPress:()=>J(s),children:s.label},s.label))}),e.jsxs(v,{size:"sm",variant:"outline",className:"md:hidden",onPress:()=>ne(s=>!s),"aria-expanded":Z,"aria-controls":"usage-filters",children:["Filters",G?` (${G})`:""]}),e.jsxs("div",{id:"usage-filters",className:fe("flex-wrap items-end gap-3 md:flex",Z?"flex w-full md:w-auto":"hidden"),children:[e.jsx($,{label:"User",value:x,onChange:o,options:oe,placeholder:"All users"}),e.jsx($,{label:"Model",value:d,onChange:N,options:de,placeholder:"All models"}),e.jsx($,{label:"API key",value:h,onChange:w,options:ce,placeholder:"All keys"}),q?e.jsx(v,{size:"sm",variant:"ghost",onPress:me,children:"Clear filters"}):null]})]}),ue?e.jsx("div",{className:"rounded-xl border border-[var(--otari-line)] bg-[var(--otari-surface)] px-4 py-10 text-center text-sm text-[var(--otari-muted)]",children:"No usage yet. Once the gateway serves requests, spend and volume appear here."}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 sm:grid-cols-3 xl:grid-cols-4",children:[e.jsx(p,{label:"Tracked cost",value:t?V(t.cost):"—",hint:t?e.jsxs("span",{className:"text-[var(--otari-muted)]",children:[e.jsx(_,{fraction:Y}),t.unpriced_requests?`${Y!==null?" · ":""}${T(t.unpriced_requests)} unpriced`:null]}):null,chart:O?e.jsx(B,{values:b.map(s=>s.cost),ariaLabel:"Spend trend over the selected window"}):void 0}),e.jsx(p,{label:"Requests",value:t?T(t.request_count):"—",hint:t?e.jsxs("span",{className:"text-[var(--otari-muted)]",children:[_e(xe)," errors",i?e.jsxs(e.Fragment,{children:[" · ",e.jsx(_,{fraction:k(t.request_count,i.request_count)})]}):null]}):null,chart:O?e.jsx(B,{values:b.map(s=>s.requests),ariaLabel:"Request volume trend over the selected window"}):void 0}),e.jsx(p,{label:"Tokens",value:t?L(t.total_tokens):"—",hint:t?e.jsx(_,{fraction:k(t.total_tokens,i==null?void 0:i.total_tokens)}):null,chart:O?e.jsx(B,{values:b.map(s=>s.tokens),ariaLabel:"Token usage trend over the selected window"}):void 0}),e.jsx(p,{label:"Cache read",value:t?L(t.cache_read_tokens):"—",hint:t?e.jsx(_,{fraction:k(t.cache_read_tokens,i==null?void 0:i.cache_read_tokens)}):null}),e.jsx(p,{label:"Cache write",value:t?L(t.cache_write_tokens):"—",hint:t?e.jsx(_,{fraction:k(t.cache_write_tokens,i==null?void 0:i.cache_write_tokens)}):null}),e.jsx(p,{label:"1h cache write",value:t?L(t.cache_write_1h_tokens??0):"—",hint:t?e.jsx(_,{fraction:k(t.cache_write_1h_tokens??0,(i==null?void 0:i.cache_write_1h_tokens)??0)}):null}),e.jsx(p,{label:"Avg latency",value:t?Fe(t.avg_latency_ms):"—"})]}),e.jsxs("div",{className:"grid gap-6 lg:grid-cols-2",children:[e.jsx(ae,{title:"Spend by model",rows:(c==null?void 0:c.by_model)??[],totalCost:(t==null?void 0:t.cost)??0,emptyLabel:q?"No usage matches these filters.":"No usage recorded yet.",onDrill:s=>Q({model:s,user_id:x||void 0,api_key_id:h||void 0}),loading:g.isLoading}),e.jsx(ae,{title:"Spend by user",rows:(c==null?void 0:c.by_user)??[],totalCost:(t==null?void 0:t.cost)??0,emptyLabel:q?"No usage matches these filters.":"No usage recorded yet.",onDrill:s=>Q({user_id:s,model:d.trim()||void 0,api_key_id:h||void 0}),loading:g.isLoading})]}),e.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-[var(--otari-line)] bg-[var(--otari-surface)] p-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("h2",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:"Over time"}),e.jsxs("div",{className:"inline-flex gap-1.5",children:[Ce.map(s=>e.jsx(v,{size:"sm",variant:f===s.key?"primary":"outline",onPress:()=>C(s.key),children:s.label},s.key)),g.isFetching?e.jsx(te,{size:"sm"}):null]})]}),g.isLoading?e.jsx("div",{className:"flex h-48 items-center justify-center",children:e.jsx(te,{size:"sm"})}):b.length===0?e.jsx("div",{className:"flex h-48 items-center justify-center text-sm text-[var(--otari-muted)]",children:"No data in this range."}):e.jsxs("figure",{className:"flex flex-col gap-2",children:[e.jsx(ye,{data:A.points,formatValue:s=>le(s,f),ariaLabel:`${f} per ${l.bucket}`}),e.jsxs("figcaption",{className:"text-xs text-[var(--otari-muted)]",children:[le(A.peak,f)," peak · ",A.count," ",l.bucket==="hour"?"hours":"days"," (times in UTC)"]})]})]})]})]})}export{Ie as UsagePage}; diff --git a/src/gateway/static/dashboard/assets/UsersPage-28zvfI6e.js b/src/gateway/static/dashboard/assets/UsersPage-28zvfI6e.js deleted file mode 100644 index fa2765b9..00000000 --- a/src/gateway/static/dashboard/assets/UsersPage-28zvfI6e.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as n}from"./react-dgEcD0HR.js";import{u as E,k as w,o as I,a9 as V,P as L,E as A,aa as O}from"./index-d3Tp3DkF.js";import{F as N}from"./Field-HzRk1KDP.js";import{M as B,a as R}from"./ModelScopeControl-yafJYqc3.js";import{T as H,a as $,b as f,L as q,c as W,d as G,e as b}from"./Table-CLdjdyTx.js";import{B as o,f as P,d as v}from"./heroui-BX6JwHY-.js";const J=new Intl.NumberFormat(void 0,{style:"currency",currency:"USD",maximumFractionDigits:4});function S(t){return J.format(t)}const _=t=>t.startsWith("apikey-");function D(t){return t.split("-")[0]}function M(t){return t.name??D(t.budget_id)}function T({value:t,onChange:i,budgets:r}){return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("label",{htmlFor:"user-budget",className:"text-sm font-medium text-[var(--otari-ink)]",children:"Budget"}),e.jsxs("select",{id:"user-budget",value:t??"",onChange:a=>i(a.target.value||null),className:"w-full rounded-lg border border-[var(--otari-line)] bg-[var(--otari-bg)] px-3 py-2 text-sm text-[var(--otari-ink)]",children:[e.jsx("option",{value:"",children:"No budget (unlimited)"}),r.map(a=>e.jsxs("option",{value:a.budget_id,children:[M(a),a.max_budget===null?" · no limit":` · ${S(a.max_budget)}`]},a.budget_id))]}),e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"The spending limit this user is held to. Manage budgets on the Budgets page."})]})}function K({onClose:t}){const i=O(),r=w(),[a,l]=n.useState(""),[d,c]=n.useState(""),[u,j]=n.useState(null),[y,x]=n.useState(null),[g,p]=n.useState(!0),m=()=>{if(i.isPending||!g||a.trim()==="")return;const h={user_id:a.trim(),alias:d.trim()||null,budget_id:u,allowed_models:y};i.mutate(h,{onSuccess:t})};return e.jsx(v,{children:e.jsxs(v.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsx("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:"Create user"}),e.jsx(A,{error:i.error}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(N,{label:"User ID",value:a,onChange:l,placeholder:"alice@example.com",isRequired:!0,autoFocus:!0,description:"The identifier callers send as the `user` field; spend and budgets track against it."}),e.jsx(N,{label:"Alias (optional)",value:d,onChange:c,placeholder:"Alice"})]}),e.jsx(T,{value:u,onChange:j,budgets:r.data??[]}),e.jsx(B,{title:"Model access (default for this user's keys)",description:"The models this user's keys may list and call by default. A key can narrow this, but never exceed it.",initial:null,onChange:(h,C)=>{x(h),p(C)}}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(o,{variant:"primary",isDisabled:i.isPending||!g||a.trim()==="",onPress:m,children:i.isPending?"Creating…":"Create user"}),e.jsx(o,{variant:"ghost",onPress:t,children:"Cancel"})]})]})})}function Q({user:t,onClose:i}){const r=I(),a=w(),[l,d]=n.useState(t.alias??""),[c,u]=n.useState(t.budget_id),[j,y]=n.useState(t.allowed_models),[x,g]=n.useState(!0),p=()=>{if(r.isPending||!x)return;const m={alias:l.trim()||null,budget_id:c,allowed_models:j};r.mutate({id:t.user_id,body:m},{onSuccess:i})};return e.jsx(v,{children:e.jsxs(v.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsxs("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:["Edit ",e.jsx("code",{children:t.user_id})]}),e.jsx(A,{error:r.error}),e.jsx(N,{label:"Alias",value:l,onChange:d,placeholder:"Alice"}),e.jsx(T,{value:c,onChange:u,budgets:a.data??[]}),e.jsx(B,{title:"Model access (default for this user's keys)",description:"The models this user's keys may list and call by default. A key can narrow this, but never exceed it.",initial:t.allowed_models,onChange:(m,h)=>{y(m),g(h)}}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(o,{variant:"primary",isDisabled:r.isPending||!x,onPress:p,children:r.isPending?"Saving…":"Save changes"}),e.jsx(o,{variant:"ghost",onPress:i,children:"Cancel"})]})]})})}function X({trigger:t,message:i,confirmLabel:r,isPending:a,onConfirm:l}){const[d,c]=n.useState(!1);return d?e.jsxs("div",{className:"flex flex-col items-end gap-1.5 rounded-lg border border-amber-200 bg-amber-50 p-2 text-right",children:[e.jsx("span",{className:"max-w-xs text-xs text-amber-800",children:i}),e.jsxs("span",{className:"inline-flex gap-1",children:[e.jsx(o,{size:"sm",variant:"danger",isDisabled:a,onPress:l,children:r}),e.jsx(o,{size:"sm",variant:"ghost",isDisabled:a,onPress:()=>c(!1),children:"Cancel"})]})]}):e.jsx(o,{size:"sm",variant:"danger-soft",onPress:()=>c(!0),children:t})}function Y({user:t}){return t.blocked?e.jsx(P,{size:"sm",color:"warning",children:"Blocked"}):e.jsx(P,{size:"sm",color:"accent",children:"Active"})}function Z({allowed:t}){const{text:i,tone:r}=R(t),a=r==="danger"?"text-red-700 font-medium":r==="muted"?"text-[var(--otari-muted)]":"text-[var(--otari-brand-dark)] font-medium",l=t&&t.length>0?t.join(", "):void 0;return e.jsx("span",{className:`text-xs ${a}`,title:l,children:i})}function ee({onCreate:t}){return e.jsx(v,{children:e.jsxs(v.Content,{className:"flex flex-col gap-4 p-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold text-[var(--otari-ink)]",children:"No users yet"}),e.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:"A user owns API keys and carries the budget and default model access those keys inherit. Create a user here, then issue its keys on the API keys page."})]}),e.jsx("div",{children:e.jsx(o,{variant:"primary",onPress:t,children:"Create your first user"})})]})})}function de(){const t=E(),i=w(),r=I(),a=V(),[l,d]=n.useState(!1),[c,u]=n.useState(null),[j,y]=n.useState(!1),x=t.data??[],g=t.isLoading,p=x.filter(s=>_(s.user_id)).length,m=j?x:x.filter(s=>!_(s.user_id)),h=x.find(s=>s.user_id===c)??null,C=!g&&m.length===0&&!l,z=new Map((i.data??[]).map(s=>[s.budget_id,s])),U=(s,k)=>r.mutate({id:s.user_id,body:{blocked:k}});return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(L,{title:"Users",description:"People and teams that own API keys. Set each one's budget and default model access here; issue their keys on the API keys page.",action:l?null:e.jsx(o,{variant:"primary",onPress:()=>{u(null),d(!0)},children:"Create user"})}),e.jsx(A,{error:t.error??r.error??a.error}),C?e.jsx(ee,{onCreate:()=>{u(null),d(!0)}}):null,p>0?e.jsxs("label",{className:"flex w-fit items-center gap-2 text-xs text-[var(--otari-muted)]",children:[e.jsx("input",{type:"checkbox",checked:j,onChange:s=>y(s.target.checked)}),"Show auto-created (virtual) users (",p,")"]}):null,l?e.jsx(K,{onClose:()=>d(!1)}):null,h?e.jsx(Q,{user:h,onClose:()=>u(null)},h.user_id):null,e.jsxs(H,{children:[e.jsx($,{children:e.jsxs("tr",{children:[e.jsx(f,{children:"User"}),e.jsx(f,{children:"Status"}),e.jsx(f,{children:"Budget"}),e.jsx(f,{children:"Spend"}),e.jsx(f,{children:"Model access"}),e.jsx(f,{className:"text-right",children:"Actions"})]})}),e.jsx("tbody",{children:g?e.jsx(q,{colSpan:6}):m.length===0?e.jsx(W,{colSpan:6,children:"No users yet. Create one, or create an API key to auto-create one."}):m.map(s=>{const k=s.budget_id?z.get(s.budget_id):void 0;return e.jsxs(G,{selected:c===s.user_id,onClick:()=>{d(!1),u(s.user_id)},children:[e.jsx(b,{className:"font-medium text-[var(--otari-ink)]",children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx("code",{className:"text-xs",children:s.user_id}),_(s.user_id)?e.jsx(P,{size:"sm",color:"default",children:"virtual"}):null]}),s.alias?e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:s.alias}):null]})}),e.jsx(b,{children:e.jsx(Y,{user:s})}),e.jsx(b,{className:"text-[var(--otari-muted)]",children:s.budget_id?e.jsx("span",{title:s.budget_id,children:k?M(k):D(s.budget_id)}):"—"}),e.jsxs(b,{className:"text-[var(--otari-muted)]",children:[S(s.spend),s.reserved>0?e.jsxs("span",{className:"text-[var(--otari-muted)]",children:[" (+",S(s.reserved)," held)"]}):null]}),e.jsx(b,{children:e.jsx(Z,{allowed:s.allowed_models})}),e.jsx(b,{children:e.jsxs("div",{className:"flex items-center justify-end gap-1.5",onClick:F=>F.stopPropagation(),children:[s.blocked?e.jsx(o,{size:"sm",variant:"outline",isDisabled:r.isPending,onPress:()=>U(s,!1),children:"Unblock"}):e.jsx(o,{size:"sm",variant:"outline",isDisabled:r.isPending,onPress:()=>U(s,!0),children:"Block"}),e.jsx(o,{size:"sm",variant:"ghost",onPress:()=>{d(!1),u(s.user_id)},children:"Edit"}),e.jsx(X,{trigger:"Delete",confirmLabel:"Delete user",isPending:a.isPending,message:e.jsxs(e.Fragment,{children:["Delete ",e.jsx("strong",{children:s.user_id}),"? This deactivates its API keys and hides the user; usage history is preserved."]}),onConfirm:()=>a.mutate(s.user_id)})]})})]},s.user_id)})})]})]})}export{de as UsersPage}; diff --git a/src/gateway/static/dashboard/assets/UsersPage-Cz68J9bP.js b/src/gateway/static/dashboard/assets/UsersPage-Cz68J9bP.js new file mode 100644 index 00000000..d225edfe --- /dev/null +++ b/src/gateway/static/dashboard/assets/UsersPage-Cz68J9bP.js @@ -0,0 +1 @@ +import{j as e}from"./tanstack-query-1t81HyiD.js";import{r as l}from"./react-dgEcD0HR.js";import{u as Q,l as U,p as V,ab as X,P as Y,E as S,ac as Z,F as ee}from"./index-D1O_nkKy.js";import{u as se,r as te,B as ae}from"./tableSelection-CLDlIlLU.js";import{C as ne}from"./ConfirmDialog-CSBsET-p.js";import{D as re}from"./DataTable-mgItq60H.js";import{F as w}from"./Field-DEJ6Wjg9.js";import{M as K,a as le}from"./ModelScopeControl-DPtZaEWl.js";import{B as d,d as y,f as B,A as f}from"./heroui-DZj66Arc.js";const ie=new Intl.NumberFormat(void 0,{style:"currency",currency:"USD",maximumFractionDigits:4});function I(t){return ie.format(t)}const D=t=>t.startsWith("apikey-");function R(t){return t.split("-")[0]}function M(t){return t.name??R(t.budget_id)}function H({value:t,onChange:r,budgets:n}){return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("label",{htmlFor:"user-budget",className:"text-sm font-medium text-[var(--otari-ink)]",children:"Budget"}),e.jsxs("select",{id:"user-budget",value:t??"",onChange:a=>r(a.target.value||null),className:"w-full rounded-lg border border-[var(--otari-line)] bg-[var(--otari-bg)] px-3 py-2 text-sm text-[var(--otari-ink)]",children:[e.jsx("option",{value:"",children:"No budget (unlimited)"}),n.map(a=>e.jsxs("option",{value:a.budget_id,children:[M(a),a.max_budget===null?" · no limit":` · ${I(a.max_budget)}`]},a.budget_id))]}),e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:"The spending limit this user is held to. Manage budgets on the Budgets page."})]})}function de({onClose:t}){const r=Z(),n=U(),[a,i]=l.useState(""),[o,u]=l.useState(""),[c,m]=l.useState(null),[p,g]=l.useState(null),[j,b]=l.useState(!0),x=()=>{if(r.isPending||!j||a.trim()==="")return;const h={user_id:a.trim(),alias:o.trim()||null,budget_id:c,allowed_models:p};r.mutate(h,{onSuccess:t})};return e.jsx(y,{children:e.jsxs(y.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsx("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:"Create user"}),e.jsx(S,{error:r.error}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(w,{label:"User ID",value:a,onChange:i,placeholder:"alice@example.com",isRequired:!0,autoFocus:!0,description:"The identifier callers send as the `user` field; spend and budgets track against it."}),e.jsx(w,{label:"Alias (optional)",value:o,onChange:u,placeholder:"Alice"})]}),e.jsx(H,{value:c,onChange:m,budgets:n.data??[]}),e.jsx(K,{title:"Model access (default for this user's keys)",description:"The models this user's keys may list and call by default. A key can narrow this, but never exceed it.",initial:null,onChange:(h,P)=>{g(h),b(P)}}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(d,{variant:"primary",isDisabled:r.isPending||!j||a.trim()==="",onPress:x,children:r.isPending?"Creating…":"Create user"}),e.jsx(d,{variant:"ghost",onPress:t,children:"Cancel"})]})]})})}function oe({user:t,onClose:r}){const n=V(),a=U(),[i,o]=l.useState(t.alias??""),[u,c]=l.useState(t.budget_id),[m,p]=l.useState(t.allowed_models),[g,j]=l.useState(!0),b=()=>{if(n.isPending||!g)return;const x={alias:i.trim()||null,budget_id:u,allowed_models:m};n.mutate({id:t.user_id,body:x},{onSuccess:r})};return e.jsx(y,{children:e.jsxs(y.Content,{className:"flex flex-col gap-4 p-5",children:[e.jsxs("div",{className:"text-sm font-semibold text-[var(--otari-ink)]",children:["Edit ",e.jsx("code",{children:t.user_id})]}),e.jsx(S,{error:n.error}),e.jsx(w,{label:"Alias",value:i,onChange:o,placeholder:"Alice"}),e.jsx(H,{value:u,onChange:c,budgets:a.data??[]}),e.jsx(K,{title:"Model access (default for this user's keys)",description:"The models this user's keys may list and call by default. A key can narrow this, but never exceed it.",initial:t.allowed_models,onChange:(x,h)=>{p(x),j(h)}}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(d,{variant:"primary",isDisabled:n.isPending||!g,onPress:b,children:n.isPending?"Saving…":"Save changes"}),e.jsx(d,{variant:"ghost",onPress:r,children:"Cancel"})]})]})})}function ce({trigger:t,message:r,confirmLabel:n,isPending:a,onConfirm:i}){const[o,u]=l.useState(!1);return o?e.jsxs("div",{className:"flex flex-col items-end gap-1.5 rounded-lg border border-amber-200 bg-amber-50 p-2 text-right",children:[e.jsx("span",{className:"max-w-xs text-xs text-amber-800",children:r}),e.jsxs("span",{className:"inline-flex gap-1",children:[e.jsx(d,{size:"sm",variant:"danger",isDisabled:a,onPress:i,children:n}),e.jsx(d,{size:"sm",variant:"ghost",isDisabled:a,onPress:()=>u(!1),children:"Cancel"})]})]}):e.jsx(d,{size:"sm",variant:"danger-soft",onPress:()=>u(!0),children:t})}function ue({user:t}){return t.blocked?e.jsx(B,{size:"sm",color:"warning",children:"Blocked"}):e.jsx(B,{size:"sm",color:"accent",children:"Active"})}function me({allowed:t}){const{text:r,tone:n}=le(t),a=n==="danger"?"text-red-700 font-medium":n==="muted"?"text-[var(--otari-muted)]":"text-[var(--otari-brand-dark)] font-medium",i=t&&t.length>0?t.join(", "):void 0;return e.jsx("span",{className:`text-xs ${a}`,title:i,children:r})}function ge({onCreate:t}){return e.jsx(y,{children:e.jsxs(y.Content,{className:"flex flex-col gap-4 p-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold text-[var(--otari-ink)]",children:"No users yet"}),e.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:"A user owns API keys and carries the budget and default model access those keys inherit. Create a user here, then issue its keys on the API keys page."})]}),e.jsx("div",{children:e.jsx(d,{variant:"primary",onPress:t,children:"Create your first user"})})]})})}function xe({isOpen:t,onOpenChange:r,budgets:n,count:a,isPending:i,error:o,onAssign:u}){const[c,m]=l.useState("");return l.useEffect(()=>{t&&m("")},[t]),e.jsx(f,{isOpen:t,onOpenChange:r,children:t?e.jsx(f.Backdrop,{children:e.jsx(f.Container,{placement:"center",size:"md",children:e.jsxs(f.Dialog,{children:[e.jsx(f.Header,{children:e.jsx(f.Heading,{children:"Assign budget"})}),e.jsxs(f.Body,{className:"flex flex-col gap-4",children:[e.jsxs("p",{className:"text-sm text-[var(--otari-muted)]",children:["Assign a budget to ",a," selected ",a===1?"user":"users","."]}),e.jsx(ee,{label:"Budget",value:c,onChange:m,options:[{value:"",label:"Select a budget…"},...n.map(p=>({value:p.budget_id,label:M(p)}))]}),e.jsx(S,{error:o})]}),e.jsxs(f.Footer,{children:[e.jsx(d,{variant:"ghost",isDisabled:i,onPress:()=>r(!1),children:"Cancel"}),e.jsx(d,{variant:"primary",isDisabled:!c,isPending:i,onPress:()=>u(c),children:"Assign"})]})]})})}):null})}function Se(){const t=Q(),r=U(),n=V(),a=X(),[i,o]=l.useState(!1),[u,c]=l.useState(null),[m,p]=l.useState(!1),g=t.data??[],j=t.isLoading,b=g.filter(s=>D(s.user_id)).length,x=m?g:g.filter(s=>!D(s.user_id)),h=g.find(s=>s.user_id===u)??null,P=!j&&x.length===0&&!i,F=new Map((r.data??[]).map(s=>[s.budget_id,s])),C=se(),[$,A]=l.useState(!1),[q,_]=l.useState(!1),[z,E]=l.useState(void 0),[T,O]=l.useState(!1),W=x.map(s=>s.user_id),v=te(C.selectedKeys,W),G=(s,k)=>n.mutate({id:s.user_id,body:{blocked:k}}),L=async(s,k)=>{O(!0),E(void 0);try{for(const N of v)await s(N);C.clear(),k()}catch(N){E(N)}finally{O(!1)}},J=[{id:"user",header:"User",isRowHeader:!0,cell:s=>e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx("code",{className:"text-xs font-medium text-[var(--otari-ink)]",children:s.user_id}),D(s.user_id)?e.jsx(B,{size:"sm",color:"default",children:"virtual"}):null]}),s.alias?e.jsx("span",{className:"text-xs text-[var(--otari-muted)]",children:s.alias}):null]})},{id:"status",header:"Status",cell:s=>e.jsx(ue,{user:s})},{id:"budget",header:"Budget",cell:s=>s.budget_id?e.jsx("span",{className:"text-[var(--otari-muted)]",title:s.budget_id,children:F.get(s.budget_id)?M(F.get(s.budget_id)):R(s.budget_id)}):e.jsx("span",{className:"text-[var(--otari-muted)]",children:"—"})},{id:"spend",header:"Spend",cell:s=>e.jsxs("span",{className:"text-[var(--otari-muted)]",children:[I(s.spend),s.reserved>0?e.jsxs("span",{children:[" (+",I(s.reserved)," held)"]}):null]})},{id:"access",header:"Model access",cell:s=>e.jsx(me,{allowed:s.allowed_models})},{id:"actions",header:"Actions",align:"end",cell:s=>e.jsxs("div",{className:"flex items-center justify-end gap-1.5",children:[e.jsx(d,{size:"sm",variant:"outline",isDisabled:n.isPending,onPress:()=>G(s,!s.blocked),children:s.blocked?"Unblock":"Block"}),e.jsx(d,{size:"sm",variant:"ghost",onPress:()=>{o(!1),c(s.user_id)},children:"Edit"}),e.jsx(ce,{trigger:"Delete",confirmLabel:"Delete user",isPending:a.isPending,message:e.jsxs(e.Fragment,{children:["Delete ",e.jsx("strong",{children:s.user_id}),"? This deactivates its API keys and hides the user; usage history is preserved."]}),onConfirm:()=>a.mutate(s.user_id)})]})}];return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(Y,{title:"Users",description:"People and teams that own API keys. Set each one's budget and default model access here; issue their keys on the API keys page.",action:i?null:e.jsx(d,{variant:"primary",onPress:()=>{c(null),o(!0)},children:"Create user"})}),e.jsx(S,{error:t.error??n.error??a.error}),P?e.jsx(ge,{onCreate:()=>{c(null),o(!0)}}):null,b>0?e.jsxs("label",{className:"flex w-fit items-center gap-2 text-xs text-[var(--otari-muted)]",children:[e.jsx("input",{type:"checkbox",checked:m,onChange:s=>p(s.target.checked)}),"Show auto-created (virtual) users (",b,")"]}):null,i?e.jsx(de,{onClose:()=>o(!1)}):null,h?e.jsx(oe,{user:h,onClose:()=>c(null)},h.user_id):null,v.length>0?e.jsxs(ae,{selectedCount:v.length,allMatching:!1,matchingTotal:null,canSelectAllMatching:!1,onSelectAllMatching:()=>{},onClear:C.clear,children:[e.jsx(d,{size:"sm",variant:"primary",onPress:()=>_(!0),children:"Assign budget"}),e.jsx(d,{size:"sm",variant:"danger",onPress:()=>A(!0),children:"Delete"})]}):null,e.jsx(re,{ariaLabel:"Users",columns:J,rows:x,getRowKey:s=>s.user_id,isLoading:j,emptyContent:"No users yet. Create one, or create an API key to auto-create one.",selectionMode:"multiple",selectedKeys:C.selectedKeys,onSelectionChange:C.onSelectionChange}),e.jsx(ne,{isOpen:$,onOpenChange:A,heading:"Delete users",body:`Delete ${v.length} ${v.length===1?"user":"users"}? This deactivates their API keys and hides them; usage history is preserved.`,confirmLabel:"Delete",isPending:T,error:z,onConfirm:()=>L(s=>a.mutateAsync(s),()=>A(!1))}),e.jsx(xe,{isOpen:q,onOpenChange:_,budgets:r.data??[],count:v.length,isPending:T,error:z,onAssign:s=>L(k=>n.mutateAsync({id:k,body:{budget_id:s}}),()=>_(!1))})]})}export{Se as UsersPage}; diff --git a/src/gateway/static/dashboard/assets/charts-Cr3Dij9t.js b/src/gateway/static/dashboard/assets/charts-CuOShutR.js similarity index 91% rename from src/gateway/static/dashboard/assets/charts-Cr3Dij9t.js rename to src/gateway/static/dashboard/assets/charts-CuOShutR.js index f4c6f9a0..c50d5aba 100644 --- a/src/gateway/static/dashboard/assets/charts-Cr3Dij9t.js +++ b/src/gateway/static/dashboard/assets/charts-CuOShutR.js @@ -1 +1 @@ -import{j as a}from"./tanstack-query-1t81HyiD.js";import{R as l,L as d,a as c,B as m,X as u,T as x,b as f}from"./recharts-CR3TAEof.js";const o="var(--otari-brand)";function v({active:e,label:i,payload:t,formatValue:r}){var n;const s=(n=t==null?void 0:t[0])==null?void 0:n.value;return!e||typeof s!="number"?null:a.jsxs("div",{className:"rounded-md border border-[var(--otari-line)] bg-[var(--otari-surface)] px-2 py-1 text-xs shadow-sm",children:[a.jsx("div",{className:"text-[var(--otari-muted)]",children:i}),a.jsx("div",{className:"font-medium tabular-nums text-[var(--otari-ink)]",children:r(s)})]})}function p({data:e,formatValue:i,ariaLabel:t,height:r=200}){return a.jsx("div",{role:"img","aria-label":t,className:"w-full",children:a.jsx(l,{width:"100%",height:r,children:a.jsxs(m,{data:e,margin:{top:4,right:4,left:4,bottom:0},children:[a.jsx(u,{dataKey:"label",tickLine:!1,axisLine:!1,interval:"preserveStartEnd",minTickGap:24,tick:{fontSize:10,fill:"var(--otari-muted)"}}),a.jsx(x,{cursor:{fill:"var(--otari-line)",opacity:.35},content:a.jsx(v,{formatValue:i})}),a.jsx(f,{dataKey:"value",fill:o,radius:[2,2,0,0],isAnimationActive:!1})]})})})}function b({values:e,ariaLabel:i,height:t=32}){const r=e.map((s,n)=>({index:n,value:s}));return a.jsx("div",{role:"img","aria-label":i,className:"w-full",children:a.jsx(l,{width:"100%",height:t,children:a.jsx(d,{data:r,margin:{top:2,right:2,left:2,bottom:2},children:a.jsx(c,{type:"monotone",dataKey:"value",stroke:o,strokeWidth:1.5,dot:!1,isAnimationActive:!1})})})})}export{p as B,b as S}; +import{j as a}from"./tanstack-query-1t81HyiD.js";import{R as l,L as d,a as c,B as m,X as u,T as x,b as f}from"./recharts-D7kuKp97.js";const o="var(--otari-brand)";function v({active:e,label:i,payload:t,formatValue:r}){var n;const s=(n=t==null?void 0:t[0])==null?void 0:n.value;return!e||typeof s!="number"?null:a.jsxs("div",{className:"rounded-md border border-[var(--otari-line)] bg-[var(--otari-surface)] px-2 py-1 text-xs shadow-sm",children:[a.jsx("div",{className:"text-[var(--otari-muted)]",children:i}),a.jsx("div",{className:"font-medium tabular-nums text-[var(--otari-ink)]",children:r(s)})]})}function p({data:e,formatValue:i,ariaLabel:t,height:r=200}){return a.jsx("div",{role:"img","aria-label":t,className:"w-full",children:a.jsx(l,{width:"100%",height:r,children:a.jsxs(m,{data:e,margin:{top:4,right:4,left:4,bottom:0},children:[a.jsx(u,{dataKey:"label",tickLine:!1,axisLine:!1,interval:"preserveStartEnd",minTickGap:24,tick:{fontSize:10,fill:"var(--otari-muted)"}}),a.jsx(x,{cursor:{fill:"var(--otari-line)",opacity:.35},content:a.jsx(v,{formatValue:i})}),a.jsx(f,{dataKey:"value",fill:o,radius:[2,2,0,0],isAnimationActive:!1})]})})})}function b({values:e,ariaLabel:i,height:t=32}){const r=e.map((s,n)=>({index:n,value:s}));return a.jsx("div",{role:"img","aria-label":i,className:"w-full",children:a.jsx(l,{width:"100%",height:t,children:a.jsx(d,{data:r,margin:{top:2,right:2,left:2,bottom:2},children:a.jsx(c,{type:"monotone",dataKey:"value",stroke:o,strokeWidth:1.5,dot:!1,isAnimationActive:!1})})})})}export{p as B,b as S}; diff --git a/src/gateway/static/dashboard/assets/heroui-BX6JwHY-.js b/src/gateway/static/dashboard/assets/heroui-BX6JwHY-.js deleted file mode 100644 index b4b0b743..00000000 --- a/src/gateway/static/dashboard/assets/heroui-BX6JwHY-.js +++ /dev/null @@ -1,20 +0,0 @@ -var ho=t=>{throw TypeError(t)};var mo=(t,e,n)=>e.has(t)||ho("Cannot "+n);var go=(t,e,n)=>(mo(t,e,"read from private field"),n?n.call(t):e.get(t)),$o=(t,e,n)=>e.has(t)?ho("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),Nn=(t,e,n,r)=>(mo(t,e,"write to private field"),r?r.call(t,n):e.set(t,n),n);import{r as a,$ as y,a as Lr,b as Tu,c as ku}from"./react-dgEcD0HR.js";import{j as A}from"./tanstack-query-1t81HyiD.js";const Du="react-aria-clear-focus",Mu="react-aria-focus";function xn(t){var n;if(typeof window>"u"||window.navigator==null)return!1;let e=(n=window.navigator.userAgentData)==null?void 0:n.brands;return Array.isArray(e)&&e.some(r=>t.test(r.brand))||t.test(window.navigator.userAgent)}function Kr(t){var e;return typeof window<"u"&&window.navigator!=null?t.test(((e=window.navigator.userAgentData)==null?void 0:e.platform)||window.navigator.platform):!1}function je(t){let e=null;return()=>(e==null&&(e=t()),e)}const Xe=je(function(){return Kr(/^Mac/i)}),Au=je(function(){return Kr(/^iPhone/i)}),Vl=je(function(){return Kr(/^iPad/i)||Xe()&&navigator.maxTouchPoints>1}),Ze=je(function(){return Au()||Vl()}),ln=je(function(){return Xe()||Ze()}),_l=je(function(){return xn(/AppleWebKit/i)&&!jl()}),jl=je(function(){return xn(/Chrome/i)}),Rr=je(function(){return xn(/Android/i)}),Lu=je(function(){return xn(/Firefox/i)});function Ke(t){if(Ku())t.focus({preventScroll:!0});else{let e=Ru(t);t.focus(),Fu(e)}}let Xt=null;function Ku(){if(Xt==null){Xt=!1;try{document.createElement("div").focus({get preventScroll(){return Xt=!0,!0}})}catch{}}return Xt}function Ru(t){let e=t.parentNode,n=[],r=document.scrollingElement||document.documentElement;for(;e instanceof HTMLElement&&e!==r;)(e.offsetHeightt});function zt(){return a.useContext(Iu)}function Bu(t,e){let n=t.getAttribute("target");return(!n||n==="_self")&&t.origin===location.origin&&!t.hasAttribute("download")&&!e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey}function _e(t,e,n=!0){var u,c;let{metaKey:r,ctrlKey:o,altKey:l,shiftKey:i}=e;Lu()&&((c=(u=window.event)==null?void 0:u.type)!=null&&c.startsWith("key"))&&t.target==="_blank"&&(Xe()?r=!0:o=!0);let s=_l()&&Xe()&&!Vl()?new KeyboardEvent("keydown",{keyIdentifier:"Enter",metaKey:r,ctrlKey:o,altKey:l,shiftKey:i}):new MouseEvent("click",{metaKey:r,ctrlKey:o,altKey:l,shiftKey:i,detail:1,bubbles:!0,cancelable:!0});_e.isOpening=n,Ke(t),t.dispatchEvent(s),_e.isOpening=!1}_e.isOpening=!1;function Nu(t,e){if(t instanceof HTMLAnchorElement)e(t);else if(t.hasAttribute("data-href")){let n=document.createElement("a");n.href=t.getAttribute("data-href"),t.hasAttribute("data-target")&&(n.target=t.getAttribute("data-target")),t.hasAttribute("data-rel")&&(n.rel=t.getAttribute("data-rel")),t.hasAttribute("data-download")&&(n.download=t.getAttribute("data-download")),t.hasAttribute("data-ping")&&(n.ping=t.getAttribute("data-ping")),t.hasAttribute("data-referrer-policy")&&(n.referrerPolicy=t.getAttribute("data-referrer-policy")),t.appendChild(n),e(n),t.removeChild(n)}}function Ou(t,e){Nu(t,n=>_e(n,e))}function zl(t){const n=zt().useHref((t==null?void 0:t.href)??"");let r={};if(t)for(let o of["href","target","rel","download","ping","referrerPolicy"])o in t&&(r[o]=o==="href"?n:t[o]);return r}function Vu(t,e,n,r){!e.isNative&&t.currentTarget instanceof HTMLAnchorElement&&t.currentTarget.href&&!t.isDefaultPrevented()&&Bu(t.currentTarget,t)&&n&&(t.preventDefault(),e.open(t.currentTarget,t,n,r))}const ne=typeof document<"u"?y.useLayoutEffect:()=>{},Hl={prefix:String(Math.round(Math.random()*1e10)),current:0},Wl=y.createContext(Hl),_u=y.createContext(!1);let On=new WeakMap;function ju(t=!1){var r,o;let e=a.useContext(Wl),n=a.useRef(null);if(n.current===null&&!t){let l=(o=(r=y.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED)==null?void 0:r.ReactCurrentOwner)==null?void 0:o.current;if(l){let i=On.get(l);i==null?On.set(l,{id:e.current,state:l.memoizedState}):l.memoizedState!==i.state&&(e.current=i.id,On.delete(l))}n.current=++e.current}return n.current}function zu(t){let e=a.useContext(Wl),n=ju(!!t),r=`react-aria${e.prefix}`;return t||`${r}-${n}`}function Hu(t){let e=y.useId(),[n]=a.useState(et()),r=n?"react-aria":`react-aria${Hl.prefix}`;return t||`${r}-${e}`}const Wu=typeof y.useId=="function"?Hu:zu;function Gu(){return!1}function Uu(){return!0}function qu(t){return()=>{}}function et(){return typeof y.useSyncExternalStore=="function"?y.useSyncExternalStore(qu,Gu,Uu):a.useContext(_u)}function Yu(t){let[e,n]=a.useState(t),r=a.useRef(e),o=a.useRef(null),l=a.useRef(()=>{if(!o.current)return;let s=o.current.next();if(s.done){o.current=null;return}r.current===s.value?l.current():n(s.value)});ne(()=>{r.current=e,o.current&&l.current()});let i=a.useCallback(s=>{o.current=s(r.current),l.current()},[l]);return[e,i]}let Xu=!!(typeof window<"u"&&window.document&&window.document.createElement),dt=new Map,Pt;typeof FinalizationRegistry<"u"&&(Pt=new FinalizationRegistry(t=>{dt.delete(t)}));function ve(t){let[e,n]=a.useState(t),r=a.useRef(null),o=Wu(e),l=a.useRef(null);if(Pt&&Pt.register(l,o),Xu){const i=dt.get(o);i&&!i.includes(r)?i.push(r):dt.set(o,[r])}return ne(()=>{let i=o;return()=>{Pt&&Pt.unregister(l),dt.delete(i)}},[o]),a.useEffect(()=>{let i=r.current;return i&&n(i),()=>{i&&(r.current=null)}}),o}function Zu(t,e){if(t===e)return t;let n=dt.get(t);if(n)return n.forEach(o=>o.current=e),e;let r=dt.get(e);return r?(r.forEach(o=>o.current=t),t):e}function Ft(t=[]){let e=ve(),[n,r]=Yu(e),o=a.useCallback(()=>{r(function*(){yield e,yield document.getElementById(e)?e:void 0})},[e,r]);return ne(o,[e,o,...t]),n}function tt(...t){return(...e)=>{for(let n of t)typeof n=="function"&&n(...e)}}const ee=t=>(t==null?void 0:t.ownerDocument)??document,xe=t=>t&&"window"in t&&t.window===t?t:ee(t).defaultView||window;function Ju(t){return t!==null&&typeof t=="object"&&"nodeType"in t&&typeof t.nodeType=="number"}function Qu(t){return Ju(t)&&t.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&"host"in t}let ec=!1;function Ne(){return ec}function te(t,e){if(!Ne())return e&&t?t.contains(e):!1;if(!t||!e)return!1;let n=e;for(;n!==null;){if(n===t)return!0;n.tagName==="SLOT"&&n.assignedSlot?n=n.assignedSlot.parentNode:Qu(n)?n=n.host:n=n.parentNode}return!1}const re=(t=document)=>{var n;if(!Ne())return t.activeElement;let e=t.activeElement;for(;e&&"shadowRoot"in e&&((n=e.shadowRoot)!=null&&n.activeElement);)e=e.shadowRoot.activeElement;return e};function j(t){if(Ne()&&t.target instanceof Element&&t.target.shadowRoot){if("composedPath"in t)return t.composedPath()[0]??null;if("composedPath"in t.nativeEvent)return t.nativeEvent.composedPath()[0]??null}return t.target}function It(t){if(!t)return!1;let e=t.getRootNode(),n=xe(t);if(!(e instanceof n.Document||e instanceof n.ShadowRoot))return!1;let r=e.activeElement;return r!=null&&t.contains(r)}class tc{constructor(e,n,r,o){this._walkerStack=[],this._currentSetFor=new Set,this._acceptNode=i=>{var s;if(i.nodeType===Node.ELEMENT_NODE){const u=i.shadowRoot;if(u){const c=this._doc.createTreeWalker(u,this.whatToShow,{acceptNode:this._acceptNode});return this._walkerStack.unshift(c),NodeFilter.FILTER_ACCEPT}else{if(typeof this.filter=="function")return this.filter(i);if((s=this.filter)!=null&&s.acceptNode)return this.filter.acceptNode(i);if(this.filter===null)return NodeFilter.FILTER_ACCEPT}}return NodeFilter.FILTER_SKIP},this._doc=e,this.root=n,this.filter=o??null,this.whatToShow=r??NodeFilter.SHOW_ALL,this._currentNode=n,this._walkerStack.unshift(e.createTreeWalker(n,r,this._acceptNode));const l=n.shadowRoot;if(l){const i=this._doc.createTreeWalker(l,this.whatToShow,{acceptNode:this._acceptNode});this._walkerStack.unshift(i)}}get currentNode(){return this._currentNode}set currentNode(e){if(!te(this.root,e))throw new Error("Cannot set currentNode to a node that is not contained by the root node.");const n=[];let r=e,o=e;for(this._currentNode=e;r&&r!==this.root;)if(r.nodeType===Node.DOCUMENT_FRAGMENT_NODE){const i=r,s=this._doc.createTreeWalker(i,this.whatToShow,{acceptNode:this._acceptNode});n.push(s),s.currentNode=o,this._currentSetFor.add(s),r=o=i.host}else r=r.parentNode;const l=this._doc.createTreeWalker(this.root,this.whatToShow,{acceptNode:this._acceptNode});n.push(l),l.currentNode=o,this._currentSetFor.add(l),this._walkerStack=n}get doc(){return this._doc}firstChild(){let e=this.currentNode,n=this.nextNode();return te(e,n)?(n&&(this.currentNode=n),n):(this.currentNode=e,null)}lastChild(){let n=this._walkerStack[0].lastChild();return n&&(this.currentNode=n),n}nextNode(){var n;const e=this._walkerStack[0].nextNode();if(e){if(e.shadowRoot){let o;if(typeof this.filter=="function"?o=this.filter(e):(n=this.filter)!=null&&n.acceptNode&&(o=this.filter.acceptNode(e)),o===NodeFilter.FILTER_ACCEPT)return this.currentNode=e,e;let l=this.nextNode();return l&&(this.currentNode=l),l}return e&&(this.currentNode=e),e}else if(this._walkerStack.length>1){this._walkerStack.shift();let r=this.nextNode();return r&&(this.currentNode=r),r}else return null}previousNode(){var r;const e=this._walkerStack[0];if(e.currentNode===e.root){if(this._currentSetFor.has(e))if(this._currentSetFor.delete(e),this._walkerStack.length>1){this._walkerStack.shift();let o=this.previousNode();return o&&(this.currentNode=o),o}else return null;return null}const n=e.previousNode();if(n){if(n.shadowRoot){let l;if(typeof this.filter=="function"?l=this.filter(n):(r=this.filter)!=null&&r.acceptNode&&(l=this.filter.acceptNode(n)),l===NodeFilter.FILTER_ACCEPT)return n&&(this.currentNode=n),n;let i=this.lastChild();return i&&(this.currentNode=i),i}return n&&(this.currentNode=n),n}else if(this._walkerStack.length>1){this._walkerStack.shift();let o=this.previousNode();return o&&(this.currentNode=o),o}else return null}nextSibling(){return null}previousSibling(){return null}parentNode(){return null}}function Gl(t,e,n,r){return Ne()?new tc(t,e,n,r):t.createTreeWalker(e,n,r)}function ht(...t){return t.length===1&&t[0]?t[0]:e=>{let n=!1;const r=t.map(o=>{const l=yo(o,e);return n||(n=typeof l=="function"),l});if(n)return()=>{r.forEach((o,l)=>{typeof o=="function"?o():yo(t[l],null)})}}}function yo(t,e){if(typeof t=="function")return t(e);t!=null&&(t.current=e)}function Ul(t){var e,n,r="";if(typeof t=="string"||typeof t=="number")r+=t;else if(typeof t=="object")if(Array.isArray(t)){var o=t.length;for(e=0;e=65&&o.charCodeAt(2)<=90?e[o]=tt(l,i):(o==="className"||o==="UNSAFE_className")&&typeof l=="string"&&typeof i=="string"?e[o]=nc(l,i):o==="id"&&l&&i?e.id=Zu(l,i):o==="ref"&&l&&i?e.ref=ht(l,i):e[o]=i!==void 0?i:l}}return e}const rc=new Set(["id"]),oc=new Set(["aria-label","aria-labelledby","aria-describedby","aria-details"]),lc=new Set(["href","hrefLang","target","rel","download","ping","referrerPolicy"]),ic=new Set(["dir","lang","hidden","inert","translate"]),vo=new Set(["onClick","onAuxClick","onContextMenu","onDoubleClick","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onTouchCancel","onTouchEnd","onTouchMove","onTouchStart","onPointerDown","onPointerMove","onPointerUp","onPointerCancel","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onGotPointerCapture","onLostPointerCapture","onScroll","onWheel","onAnimationStart","onAnimationEnd","onAnimationIteration","onTransitionCancel","onTransitionEnd","onTransitionRun","onTransitionStart"]),sc=/^(data-.*)$/;function pe(t,e={}){let{labelable:n,isLink:r,global:o,events:l=o,propNames:i}=e,s={};for(const u in t)Object.prototype.hasOwnProperty.call(t,u)&&(rc.has(u)||n&&oc.has(u)||r&&lc.has(u)||o&&ic.has(u)||l&&(vo.has(u)||u.endsWith("Capture")&&vo.has(u.slice(0,-7)))||i!=null&&i.has(u)||sc.test(u))&&(s[u]=t[u]);return s}let He=new Map,rr=new Set;function xo(){if(typeof window>"u")return;function t(r){return"propertyName"in r}let e=r=>{let o=j(r);if(!t(r)||!o)return;let l=He.get(o);l||(l=new Set,He.set(o,l),o.addEventListener("transitioncancel",n,{once:!0})),l.add(r.propertyName)},n=r=>{let o=j(r);if(!t(r)||!o)return;let l=He.get(o);if(l&&(l.delete(r.propertyName),l.size===0&&(o.removeEventListener("transitioncancel",n),He.delete(o)),He.size===0)){for(let i of rr)i();rr.clear()}};document.body.addEventListener("transitionrun",e),document.body.addEventListener("transitionend",n)}typeof document<"u"&&(document.readyState!=="loading"?xo():document.addEventListener("DOMContentLoaded",xo));function ac(){for(const[t]of He)"isConnected"in t&&!t.isConnected&&He.delete(t)}function ql(t){requestAnimationFrame(()=>{ac(),He.size===0?t():rr.add(t)})}function Cn(){let t=a.useRef(new Map),e=a.useCallback((o,l,i,s)=>{let u=s!=null&&s.once?(...c)=>{t.current.delete(i),i(...c)}:i;t.current.set(i,{type:l,eventTarget:o,fn:u,options:s}),o.addEventListener(l,u,s)},[]),n=a.useCallback((o,l,i,s)=>{var c;let u=((c=t.current.get(i))==null?void 0:c.fn)||i;o.removeEventListener(l,u,s),t.current.delete(i)},[]),r=a.useCallback(()=>{t.current.forEach((o,l)=>{n(o.eventTarget,o.type,l,o.options)})},[n]);return a.useEffect(()=>r,[r]),{addGlobalListener:e,removeGlobalListener:n,removeAllGlobalListeners:r}}function dn(t,e){let{id:n,"aria-label":r,"aria-labelledby":o}=t;return n=ve(n),o&&r?o=[...new Set([n,...o.trim().split(/\s+/)])].join(" "):o&&(o=o.trim().split(/\s+/).join(" ")),!r&&!o&&e&&(r=e),{id:n,"aria-label":r,"aria-labelledby":o}}function nt(t){const e=a.useRef(null),n=a.useRef(void 0),r=a.useCallback(o=>{if(typeof t=="function"){const l=t,i=l(o);return()=>{typeof i=="function"?i():l(null)}}else if(t)return t.current=o,()=>{t.current=null}},[t]);return a.useMemo(()=>({get current(){return e.current},set current(o){e.current=o,n.current&&(n.current(),n.current=void 0),o!=null&&(n.current=r(o))}}),[r])}const uc=y.useInsertionEffect??ne;function Pe(t){const e=a.useRef(null);return uc(()=>{e.current=t},[t]),a.useCallback((...n)=>{const r=e.current;return r==null?void 0:r(...n)},[])}function cc(t,e){const n=a.useRef(!0),r=a.useRef(null);let o=Pe(t);a.useEffect(()=>(n.current=!0,()=>{n.current=!1}),[]),a.useEffect(()=>{let l=r.current;n.current?n.current=!1:(!l||e.some((i,s)=>!Object.is(i,l[s])))&&o(),r.current=e},e)}function Co(t,e){const n=a.useRef(!0),r=a.useRef(null);ne(()=>(n.current=!0,()=>{n.current=!1}),[]),ne(()=>{n.current?n.current=!1:(!r.current||e.some((o,l)=>!Object.is(o,r[l])))&&t(),r.current=e},e)}function dc(){return typeof window.ResizeObserver<"u"}function fn(t){const{ref:e,box:n,onResize:r}=t;let o=Pe(r);a.useEffect(()=>{let l=e==null?void 0:e.current;if(l)if(dc()){const i=new window.ResizeObserver(s=>{s.length&&o()});return i.observe(l,{box:n}),()=>{l&&i.unobserve(l)}}else return window.addEventListener("resize",o,!1),()=>{window.removeEventListener("resize",o,!1)}},[e,n])}function Fr(t,e){ne(()=>{if(t&&t.ref&&e)return t.ref.current=e.current,()=>{t.ref&&(t.ref.current=null)}})}function Je(t,e){if(!t)return!1;let n=window.getComputedStyle(t),r=document.scrollingElement||document.documentElement,o=/(auto|scroll)/.test(n.overflow+n.overflowX+n.overflowY);return t===r&&n.overflow!=="hidden"&&(o=!0),o&&e&&(o=t.scrollHeight!==t.clientHeight||t.scrollWidth!==t.clientWidth),o}function Ir(t,e){let n=t;for(Je(n,e)&&(n=n.parentElement);n&&!Je(n,e);)n=n.parentElement;return n||document.scrollingElement||document.documentElement}function Vn(t,e){let n=[],r=document.scrollingElement||document.documentElement;for(;t&&(Je(t,e)&&n.push(t),t!==r);)t=t.parentElement;return n}function ut(t){return Xe()?t.metaKey:t.ctrlKey}const fc=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function At(t){return t instanceof HTMLInputElement&&!fc.has(t.type)||t instanceof HTMLTextAreaElement||t instanceof HTMLElement&&t.isContentEditable}let ye=typeof document<"u"&&window.visualViewport;function pc(){let t=et(),[e,n]=a.useState(()=>t?{width:0,height:0}:_n());return a.useEffect(()=>{let r=s=>{n(u=>s.width===u.width&&s.height===u.height?u:s)},o=()=>{ye&&ye.scale>1||r(_n())},l,i=s=>{ye&&ye.scale>1||At(j(s))&&(l=requestAnimationFrame(()=>{let u=re();(!u||!At(u))&&r({width:document.documentElement.clientWidth,height:document.documentElement.clientHeight})}))};return r(_n()),Ze()&&window.addEventListener("blur",i,!0),ye?ye.addEventListener("resize",o):window.addEventListener("resize",o),()=>{cancelAnimationFrame(l),Ze()&&window.removeEventListener("blur",i,!0),ye?ye.removeEventListener("resize",o):window.removeEventListener("resize",o)}},[]),e}function _n(){return{width:ye?Math.min(ye.width*ye.scale,document.documentElement.clientWidth):document.documentElement.clientWidth,height:ye?ye.height*ye.scale:document.documentElement.clientHeight}}let bc=0;const jn=new Map;function hc(t){let[e,n]=a.useState();return ne(()=>{if(!t)return;let r=jn.get(t);if(r)n(r.element.id);else{let o=`react-aria-description-${bc++}`;n(o);let l=document.createElement("div");l.id=o,l.style.display="none",l.textContent=t,document.body.appendChild(l),r={refCount:0,element:l},jn.set(t,r)}return r.refCount++,()=>{r&&--r.refCount===0&&(r.element.remove(),jn.delete(t))}},[t]),{"aria-describedby":t?e:void 0}}function Tt(t,e,n,r){let o=Pe(n),l=n==null;a.useEffect(()=>{if(l||!t.current)return;let i=t.current;return i.addEventListener(e,o,r),()=>{i.removeEventListener(e,o,r)}},[t,e,r,l])}function sn(t,e,n={}){let{block:r="nearest",inline:o="nearest"}=n;if(t===e)return;let l=t.scrollTop,i=t.scrollLeft,s=e.getBoundingClientRect(),u=t.getBoundingClientRect(),c=window.getComputedStyle(e),d=window.getComputedStyle(t),f=document.scrollingElement||document.documentElement,b=t===f,p=t===f?0:u.top,m=t===f?t.clientHeight:u.bottom,v=t===f?0:u.left,g=t===f?t.clientWidth:u.right,x=parseFloat(c.scrollMarginTop)||0,$=parseFloat(c.scrollMarginBottom)||0,D=parseFloat(c.scrollMarginLeft)||0,P=parseFloat(c.scrollMarginRight)||0,F=parseFloat(d.scrollPaddingTop)||0,R=parseFloat(d.scrollPaddingBottom)||0,I=parseFloat(d.scrollPaddingLeft)||0,k=parseFloat(d.scrollPaddingRight)||0,B=parseFloat(d.borderTopWidth)||0,K=parseFloat(d.borderBottomWidth)||0,_=parseFloat(d.borderLeftWidth)||0,U=parseFloat(d.borderRightWidth)||0,z=s.top-x,h=s.bottom+$,C=s.left-D,M=s.right+P,E=t===f?0:_+U,w=t===f?0:B+K,T=t===f?0:t.offsetWidth-t.clientWidth-E,S=t===f?0:t.offsetHeight-t.clientHeight-w,N=p+(b?0:B)+F,q=m-(b?0:K)-R-S,W=v+(b?0:_)+I,X=g-(b?0:U)-k;d.direction==="rtl"&&!Ze()?W+=T:X-=T;let Q=zq,le=CX;if(Q&&r==="start")l+=z-N;else if(Q&&r==="center")l+=(z+h)/2-(N+q)/2;else if(Q&&r==="end")l+=h-q;else if(Q&&r==="nearest"){let Z=z-N,be=h-q;l+=Math.abs(Z)<=Math.abs(be)?Z:be}if(le&&o==="start")i+=C-W;else if(le&&o==="center")i+=(C+M)/2-(W+X)/2;else if(le&&o==="end")i+=M-X;else if(le&&o==="nearest"){let Z=C-W,be=M-X;i+=Math.abs(Z)<=Math.abs(be)?Z:be}t.scrollTo({left:i,top:l})}function Eo(t,e={}){var r,o,l;let{containingElement:n}=e;if(t&&t.isConnected){let i=document.scrollingElement||document.documentElement;if(window.getComputedStyle(i).overflow==="hidden"){let{left:u,top:c}=t.getBoundingClientRect(),d=Vn(t,!0);for(let p of d)sn(p,t);let{left:f,top:b}=t.getBoundingClientRect();if(Math.abs(u-f)>1||Math.abs(c-b)>1){d=n?Vn(n,!0):[];for(let p of d)sn(p,n,{block:"center",inline:"center"});for(let p of Vn(t,!0))sn(p,t)}}else{let{left:u,top:c}=t.getBoundingClientRect();(r=t==null?void 0:t.scrollIntoView)==null||r.call(t,{block:"nearest"});let{left:d,top:f}=t.getBoundingClientRect();(Math.abs(u-d)>1||Math.abs(c-f)>1)&&((o=n==null?void 0:n.scrollIntoView)==null||o.call(n,{block:"center",inline:"center"}),(l=t.scrollIntoView)==null||l.call(t,{block:"nearest"}))}}}function Yl(t){return t.pointerType===""&&t.isTrusted?!0:Rr()&&t.pointerType?t.type==="click"&&t.buttons===1:t.detail===0&&!t.pointerType}function mc(t){return!Rr()&&t.width===0&&t.height===0||t.width===1&&t.height===1&&t.pressure===0&&t.detail===0&&t.pointerType==="mouse"}function Xl(t,e,n){let r=Pe(o=>{n&&!o.defaultPrevented&&n(e)});a.useEffect(()=>{var l;let o=(l=t==null?void 0:t.current)==null?void 0:l.form;return o==null||o.addEventListener("reset",r),()=>{o==null||o.removeEventListener("reset",r)}},[t])}function gc(t,e){let{collection:n,onLoadMore:r,scrollOffset:o=1}=t,l=a.useRef(null),i=Pe(s=>{for(let u of s)u.isIntersecting&&r&&r()});ne(()=>(e.current&&(l.current=new IntersectionObserver(i,{root:Ir(e==null?void 0:e.current),rootMargin:`0px ${100*o}% ${100*o}% ${100*o}%`}),l.current.observe(e.current)),()=>{l.current&&l.current.disconnect()}),[n,e,o])}function $c(t){const e=a.version.split(".");return parseInt(e[0],10)>=19?t:t?"true":void 0}function Br(t,e=!0){let[n,r]=a.useState(!0),o=n&&e;return ne(()=>{if(o&&t.current&&"getAnimations"in t.current)for(let l of t.current.getAnimations())l instanceof CSSTransition&&l.cancel()},[t,o]),Zl(t,o,a.useCallback(()=>r(!1),[])),o}function or(t,e){let[n,r]=a.useState(e?"open":"closed");switch(n){case"open":e||r("exiting");break;case"closed":case"exiting":e&&r("open");break}let o=n==="exiting";return Zl(t,o,a.useCallback(()=>{r(l=>l==="exiting"?"closed":l)},[])),o}function Zl(t,e,n){ne(()=>{if(e&&t.current){if(!("getAnimations"in t.current)){n();return}let r=t.current.getAnimations();if(r.length===0){n();return}let o=!1;return Promise.allSettled(r.map(l=>l.finished)).then(()=>{o||Lr.flushSync(()=>{n()})}),()=>{o=!0}}},[t,e,n])}const yc=typeof Element<"u"&&"checkVisibility"in Element.prototype;function vc(t){const e=xe(t);if(!(t instanceof e.HTMLElement)&&!(t instanceof e.SVGElement))return!1;let{display:n,visibility:r}=t.style,o=n!=="none"&&r!=="hidden"&&r!=="collapse";if(o){const{getComputedStyle:l}=t.ownerDocument.defaultView;let{display:i,visibility:s}=l(t);o=i!=="none"&&s!=="hidden"&&s!=="collapse"}return o}function xc(t,e){return!t.hasAttribute("hidden")&&!t.hasAttribute("data-react-aria-prevent-focus")&&(t.nodeName==="DETAILS"&&e&&e.nodeName!=="SUMMARY"?t.hasAttribute("open"):!0)}function Nr(t,e){return yc?t.checkVisibility({visibilityProperty:!0})&&!t.closest("[data-react-aria-prevent-focus]"):t.nodeName!=="#comment"&&vc(t)&&xc(t,e)&&(!t.parentElement||Nr(t.parentElement,t))}const Or=["input:not([disabled]):not([type=hidden])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable^="false"])',"permission"],Cc=Or.join(":not([hidden]),")+",[tabindex]:not([disabled]):not([hidden])";Or.push('[tabindex]:not([tabindex="-1"]):not([disabled])');const Ec=Or.join(':not([hidden]):not([tabindex="-1"]),');function Jl(t,e){return t.matches(Cc)&&!ei(t)&&((e==null?void 0:e.skipVisibilityCheck)||Nr(t))}function Ql(t){return t.matches(Ec)&&Nr(t)&&!ei(t)}function ei(t){let e=t;for(;e!=null;){if(e instanceof e.ownerDocument.defaultView.HTMLElement&&e.inert)return!0;e=e.parentElement}return!1}function wo(t){let e=t==null?void 0:t.defaultView;return(e==null?void 0:e.__webpack_nonce__)||globalThis.__webpack_nonce__||void 0}let zn=new WeakMap;function ti(t){let e=t??(typeof document<"u"?document:void 0);if(!e)return wo(e);if(zn.has(e))return zn.get(e);let n=e.querySelector('meta[property="csp-nonce"]'),r=n&&n instanceof xe(n).HTMLMetaElement&&(n.nonce||n.content)||wo(e)||void 0;return r!==void 0&&zn.set(e,r),r}function wc(t,e,n){const{render:r,...o}=e,l=a.useRef(null),i=a.useMemo(()=>ht(n,l),[n,l]);ne(()=>{},[t,r]);const s={...o,ref:i};return r?r(s,void 0):A.jsx(t,{...s})}const So={},Ae=new Proxy({},{get(t,e){if(typeof e!="string")return;let n=So[e];return n||(n=a.forwardRef(wc.bind(null,e)),So[e]=n),n}});var Sc=/\s+/g,Pc=t=>typeof t!="string"||!t?t:t.replace(Sc," ").trim(),Bt=(...t)=>{const e=[],n=r=>{if(!r&&r!==0&&r!==0n)return;if(Array.isArray(r)){for(let l=0,i=r.length;l0?Pc(e.join(" ")):void 0},Po=t=>t===!1?"false":t===!0?"true":t===0?"0":t,ge=t=>{if(!t||typeof t!="object")return!0;for(const e in t)return!1;return!0},Tc=(t,e)=>{if(t===e)return!0;if(!t||!e)return!1;const n=Object.keys(t),r=Object.keys(e);if(n.length!==r.length)return!1;for(let o=0;o{for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)){const r=e[n];n in t?t[n]=Bt(t[n],r):t[n]=r}return t},ni=(t,e)=>{for(let n=0;n{const e=[];ni(t,e);const n=[];for(let r=0;r{const n={};for(const r in t){const o=t[r];if(r in e){const l=e[r];Array.isArray(o)||Array.isArray(l)?n[r]=ri(l,o):typeof o=="object"&&typeof l=="object"&&o&&l?n[r]=lr(o,l):n[r]=l+" "+o}else n[r]=o}for(const r in e)r in t||(n[r]=e[r]);return n},Dc={twMerge:!0,twMergeConfig:{}};function Mc(){let t=null,e={},n=!1;return{get cachedTwMerge(){return t},set cachedTwMerge(r){t=r},get cachedTwMergeConfig(){return e},set cachedTwMergeConfig(r){e=r},get didTwMergeConfigChange(){return n},set didTwMergeConfigChange(r){n=r},reset(){t=null,e={},n=!1}}}var Be=Mc(),Ac=t=>{const e=(r,o)=>{const{extend:l=null,slots:i={},variants:s={},compoundVariants:u=[],compoundSlots:c=[],defaultVariants:d={}}=r,f={...Dc,...o},b=l!=null&&l.base?Bt(l.base,r==null?void 0:r.base):r==null?void 0:r.base,p=l!=null&&l.variants&&!ge(l.variants)?lr(s,l.variants):s,m=l!=null&&l.defaultVariants&&!ge(l.defaultVariants)?{...l.defaultVariants,...d}:d;!ge(f.twMergeConfig)&&!Tc(f.twMergeConfig,Be.cachedTwMergeConfig)&&(Be.didTwMergeConfigChange=!0,Be.cachedTwMergeConfig=f.twMergeConfig);const v=ge(l==null?void 0:l.slots),g=ge(i)?{}:{base:Bt(r==null?void 0:r.base,v&&(l==null?void 0:l.base)),...i},x=v?g:kc({...l==null?void 0:l.slots},ge(g)?{base:r==null?void 0:r.base}:g),$=ge(l==null?void 0:l.compoundVariants)?u:ri(l==null?void 0:l.compoundVariants,u),D=F=>{if(ge(p)&&ge(i)&&v)return t(b,F==null?void 0:F.class,F==null?void 0:F.className)(f);if($&&!Array.isArray($))throw new TypeError(`The "compoundVariants" prop must be an array. Received: ${typeof $}`);if(c&&!Array.isArray(c))throw new TypeError(`The "compoundSlots" prop must be an array. Received: ${typeof c}`);const R=(h,C=p,M=null,E=null)=>{const w=C[h];if(!w||ge(w))return null;const T=(E==null?void 0:E[h])??(F==null?void 0:F[h]);if(T===null)return null;const S=Po(T);if(typeof S=="object")return null;const N=m==null?void 0:m[h],q=S??Po(N);return w[q||"false"]},I=()=>{if(!p)return null;const h=Object.keys(p),C=[];for(let M=0;M{if(!p||typeof p!="object")return null;const M=[];for(const E in p){const w=R(E,p,h,C),T=h==="base"&&typeof w=="string"?w:w&&w[h];T&&M.push(T)}return M},B={};for(const h in F){const C=F[h];C!==void 0&&(B[h]=C)}const K=(h,C)=>{var E;const M=typeof(F==null?void 0:F[h])=="object"?{[h]:(E=F[h])==null?void 0:E.initial}:{};return{...m,...B,...M,...C}},_=(h=[],C)=>{const M=[],E=h.length;for(let w=0;w{const C=_($,h);if(!Array.isArray(C))return C;const M={},E=t;for(let w=0;w{if(c.length<1)return null;const C={},M=K(null,h);for(let E=0;E{const w=U(E),T=z(E);return C(x[M],k(M,E),w?w[M]:void 0,T?T[M]:void 0,E==null?void 0:E.class,E==null?void 0:E.className)(f)}}return h}return t(b,I(),_($),F==null?void 0:F.class,F==null?void 0:F.className)(f)},P=()=>{if(!(!p||typeof p!="object"))return Object.keys(p)};return D.variantKeys=P(),D.extend=l,D.base=b,D.slots=x,D.variants=p,D.defaultVariants=m,D.compoundSlots=c,D.compoundVariants=$,D};return{tv:e,createTV:r=>(o,l)=>e(o,l?lr(r,l):r)}};const Lc=(t,e)=>{const n=new Array(t.length+e.length);for(let r=0;r({classGroupId:t,validator:e}),oi=(t=new Map,e=null,n)=>({nextPart:t,validators:e,classGroupId:n}),pn="-",To=[],Rc="arbitrary..",Fc=t=>{const e=Bc(t),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=t;return{getClassGroupId:i=>{if(i.startsWith("[")&&i.endsWith("]"))return Ic(i);const s=i.split(pn),u=s[0]===""&&s.length>1?1:0;return li(s,u,e)},getConflictingClassGroupIds:(i,s)=>{if(s){const u=r[i],c=n[i];return u?c?Lc(c,u):u:c||To}return n[i]||To}}},li=(t,e,n)=>{if(t.length-e===0)return n.classGroupId;const o=t[e],l=n.nextPart.get(o);if(l){const c=li(t,e+1,l);if(c)return c}const i=n.validators;if(i===null)return;const s=e===0?t.join(pn):t.slice(e).join(pn),u=i.length;for(let c=0;ct.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const e=t.slice(1,-1),n=e.indexOf(":"),r=e.slice(0,n);return r?Rc+r:void 0})(),Bc=t=>{const{theme:e,classGroups:n}=t;return Nc(n,e)},Nc=(t,e)=>{const n=oi();for(const r in t){const o=t[r];Vr(o,n,r,e)}return n},Vr=(t,e,n,r)=>{const o=t.length;for(let l=0;l{if(typeof t=="string"){Vc(t,e,n);return}if(typeof t=="function"){_c(t,e,n,r);return}jc(t,e,n,r)},Vc=(t,e,n)=>{const r=t===""?e:ii(e,t);r.classGroupId=n},_c=(t,e,n,r)=>{if(zc(t)){Vr(t(r),e,n,r);return}e.validators===null&&(e.validators=[]),e.validators.push(Kc(n,t))},jc=(t,e,n,r)=>{const o=Object.entries(t),l=o.length;for(let i=0;i{let n=t;const r=e.split(pn),o=r.length;for(let l=0;l"isThemeGetter"in t&&t.isThemeGetter===!0,Hc=t=>{if(t<1)return{get:()=>{},set:()=>{}};let e=0,n=Object.create(null),r=Object.create(null);const o=(l,i)=>{n[l]=i,e++,e>t&&(e=0,r=n,n=Object.create(null))};return{get(l){let i=n[l];if(i!==void 0)return i;if((i=r[l])!==void 0)return o(l,i),i},set(l,i){l in n?n[l]=i:o(l,i)}}},ir="!",ko=":",Wc=[],Do=(t,e,n,r,o)=>({modifiers:t,hasImportantModifier:e,baseClassName:n,maybePostfixModifierPosition:r,isExternal:o}),Gc=t=>{const{prefix:e,experimentalParseClassName:n}=t;let r=o=>{const l=[];let i=0,s=0,u=0,c;const d=o.length;for(let v=0;vu?c-u:void 0;return Do(l,p,b,m)};if(e){const o=e+ko,l=r;r=i=>i.startsWith(o)?l(i.slice(o.length)):Do(Wc,!1,i,void 0,!0)}if(n){const o=r;r=l=>n({className:l,parseClassName:o})}return r},Uc=t=>{const e=new Map;return t.orderSensitiveModifiers.forEach((n,r)=>{e.set(n,1e6+r)}),n=>{const r=[];let o=[];for(let l=0;l0&&(o.sort(),r.push(...o),o=[]),r.push(i)):o.push(i)}return o.length>0&&(o.sort(),r.push(...o)),r}},qc=t=>({cache:Hc(t.cacheSize),parseClassName:Gc(t),sortModifiers:Uc(t),...Fc(t)}),Yc=/\s+/,Xc=(t,e)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:o,sortModifiers:l}=e,i=[],s=t.trim().split(Yc);let u="";for(let c=s.length-1;c>=0;c-=1){const d=s[c],{isExternal:f,modifiers:b,hasImportantModifier:p,baseClassName:m,maybePostfixModifierPosition:v}=n(d);if(f){u=d+(u.length>0?" "+u:u);continue}let g=!!v,x=r(g?m.substring(0,v):m);if(!x){if(!g){u=d+(u.length>0?" "+u:u);continue}if(x=r(m),!x){u=d+(u.length>0?" "+u:u);continue}g=!1}const $=b.length===0?"":b.length===1?b[0]:l(b).join(":"),D=p?$+ir:$,P=D+x;if(i.indexOf(P)>-1)continue;i.push(P);const F=o(x,g);for(let R=0;R0?" "+u:u)}return u},Zc=(...t)=>{let e=0,n,r,o="";for(;e{if(typeof t=="string")return t;let e,n="";for(let r=0;r{let n,r,o,l;const i=u=>{const c=e.reduce((d,f)=>f(d),t());return n=qc(c),r=n.cache.get,o=n.cache.set,l=s,s(u)},s=u=>{const c=r(u);if(c)return c;const d=Xc(u,n);return o(u,d),d};return l=i,(...u)=>l(Zc(...u))},Jc=[],de=t=>{const e=n=>n[t]||Jc;return e.isThemeGetter=!0,e},ai=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,ui=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Qc=/^\d+\/\d+$/,ed=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,td=/\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$/,nd=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,rd=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,od=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,st=t=>Qc.test(t),Y=t=>!!t&&!Number.isNaN(Number(t)),ze=t=>!!t&&Number.isInteger(Number(t)),Hn=t=>t.endsWith("%")&&Y(t.slice(0,-1)),Ie=t=>ed.test(t),ld=()=>!0,id=t=>td.test(t)&&!nd.test(t),ci=()=>!1,sd=t=>rd.test(t),ad=t=>od.test(t),ud=t=>!O(t)&&!V(t),cd=t=>mt(t,pi,ci),O=t=>ai.test(t),Ue=t=>mt(t,bi,id),Wn=t=>mt(t,hd,Y),Mo=t=>mt(t,di,ci),dd=t=>mt(t,fi,ad),Zt=t=>mt(t,hi,sd),V=t=>ui.test(t),Ct=t=>gt(t,bi),fd=t=>gt(t,md),Ao=t=>gt(t,di),pd=t=>gt(t,pi),bd=t=>gt(t,fi),Jt=t=>gt(t,hi,!0),mt=(t,e,n)=>{const r=ai.exec(t);return r?r[1]?e(r[1]):n(r[2]):!1},gt=(t,e,n=!1)=>{const r=ui.exec(t);return r?r[1]?e(r[1]):n:!1},di=t=>t==="position"||t==="percentage",fi=t=>t==="image"||t==="url",pi=t=>t==="length"||t==="size"||t==="bg-size",bi=t=>t==="length",hd=t=>t==="number",md=t=>t==="family-name",hi=t=>t==="shadow",ar=()=>{const t=de("color"),e=de("font"),n=de("text"),r=de("font-weight"),o=de("tracking"),l=de("leading"),i=de("breakpoint"),s=de("container"),u=de("spacing"),c=de("radius"),d=de("shadow"),f=de("inset-shadow"),b=de("text-shadow"),p=de("drop-shadow"),m=de("blur"),v=de("perspective"),g=de("aspect"),x=de("ease"),$=de("animate"),D=()=>["auto","avoid","all","avoid-page","page","left","right","column"],P=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],F=()=>[...P(),V,O],R=()=>["auto","hidden","clip","visible","scroll"],I=()=>["auto","contain","none"],k=()=>[V,O,u],B=()=>[st,"full","auto",...k()],K=()=>[ze,"none","subgrid",V,O],_=()=>["auto",{span:["full",ze,V,O]},ze,V,O],U=()=>[ze,"auto",V,O],z=()=>["auto","min","max","fr",V,O],h=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],C=()=>["start","end","center","stretch","center-safe","end-safe"],M=()=>["auto",...k()],E=()=>[st,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...k()],w=()=>[t,V,O],T=()=>[...P(),Ao,Mo,{position:[V,O]}],S=()=>["no-repeat",{repeat:["","x","y","space","round"]}],N=()=>["auto","cover","contain",pd,cd,{size:[V,O]}],q=()=>[Hn,Ct,Ue],W=()=>["","none","full",c,V,O],X=()=>["",Y,Ct,Ue],Q=()=>["solid","dashed","dotted","double"],le=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],Z=()=>[Y,Hn,Ao,Mo],be=()=>["","none",m,V,O],we=()=>["none",Y,V,O],L=()=>["none",Y,V,O],H=()=>[Y,V,O],oe=()=>[st,"full",...k()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[Ie],breakpoint:[Ie],color:[ld],container:[Ie],"drop-shadow":[Ie],ease:["in","out","in-out"],font:[ud],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[Ie],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[Ie],shadow:[Ie],spacing:["px",Y],text:[Ie],"text-shadow":[Ie],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",st,O,V,g]}],container:["container"],columns:[{columns:[Y,O,V,s]}],"break-after":[{"break-after":D()}],"break-before":[{"break-before":D()}],"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:F()}],overflow:[{overflow:R()}],"overflow-x":[{"overflow-x":R()}],"overflow-y":[{"overflow-y":R()}],overscroll:[{overscroll:I()}],"overscroll-x":[{"overscroll-x":I()}],"overscroll-y":[{"overscroll-y":I()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:B()}],"inset-x":[{"inset-x":B()}],"inset-y":[{"inset-y":B()}],start:[{start:B()}],end:[{end:B()}],top:[{top:B()}],right:[{right:B()}],bottom:[{bottom:B()}],left:[{left:B()}],visibility:["visible","invisible","collapse"],z:[{z:[ze,"auto",V,O]}],basis:[{basis:[st,"full","auto",s,...k()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[Y,st,"auto","initial","none",O]}],grow:[{grow:["",Y,V,O]}],shrink:[{shrink:["",Y,V,O]}],order:[{order:[ze,"first","last","none",V,O]}],"grid-cols":[{"grid-cols":K()}],"col-start-end":[{col:_()}],"col-start":[{"col-start":U()}],"col-end":[{"col-end":U()}],"grid-rows":[{"grid-rows":K()}],"row-start-end":[{row:_()}],"row-start":[{"row-start":U()}],"row-end":[{"row-end":U()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":z()}],"auto-rows":[{"auto-rows":z()}],gap:[{gap:k()}],"gap-x":[{"gap-x":k()}],"gap-y":[{"gap-y":k()}],"justify-content":[{justify:[...h(),"normal"]}],"justify-items":[{"justify-items":[...C(),"normal"]}],"justify-self":[{"justify-self":["auto",...C()]}],"align-content":[{content:["normal",...h()]}],"align-items":[{items:[...C(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...C(),{baseline:["","last"]}]}],"place-content":[{"place-content":h()}],"place-items":[{"place-items":[...C(),"baseline"]}],"place-self":[{"place-self":["auto",...C()]}],p:[{p:k()}],px:[{px:k()}],py:[{py:k()}],ps:[{ps:k()}],pe:[{pe:k()}],pt:[{pt:k()}],pr:[{pr:k()}],pb:[{pb:k()}],pl:[{pl:k()}],m:[{m:M()}],mx:[{mx:M()}],my:[{my:M()}],ms:[{ms:M()}],me:[{me:M()}],mt:[{mt:M()}],mr:[{mr:M()}],mb:[{mb:M()}],ml:[{ml:M()}],"space-x":[{"space-x":k()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":k()}],"space-y-reverse":["space-y-reverse"],size:[{size:E()}],w:[{w:[s,"screen",...E()]}],"min-w":[{"min-w":[s,"screen","none",...E()]}],"max-w":[{"max-w":[s,"screen","none","prose",{screen:[i]},...E()]}],h:[{h:["screen","lh",...E()]}],"min-h":[{"min-h":["screen","lh","none",...E()]}],"max-h":[{"max-h":["screen","lh",...E()]}],"font-size":[{text:["base",n,Ct,Ue]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,V,Wn]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Hn,O]}],"font-family":[{font:[fd,O,e]}],"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:[o,V,O]}],"line-clamp":[{"line-clamp":[Y,"none",V,Wn]}],leading:[{leading:[l,...k()]}],"list-image":[{"list-image":["none",V,O]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",V,O]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:w()}],"text-color":[{text:w()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...Q(),"wavy"]}],"text-decoration-thickness":[{decoration:[Y,"from-font","auto",V,Ue]}],"text-decoration-color":[{decoration:w()}],"underline-offset":[{"underline-offset":[Y,"auto",V,O]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:k()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",V,O]}],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",V,O]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:T()}],"bg-repeat":[{bg:S()}],"bg-size":[{bg:N()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},ze,V,O],radial:["",V,O],conic:[ze,V,O]},bd,dd]}],"bg-color":[{bg:w()}],"gradient-from-pos":[{from:q()}],"gradient-via-pos":[{via:q()}],"gradient-to-pos":[{to:q()}],"gradient-from":[{from:w()}],"gradient-via":[{via:w()}],"gradient-to":[{to:w()}],rounded:[{rounded:W()}],"rounded-s":[{"rounded-s":W()}],"rounded-e":[{"rounded-e":W()}],"rounded-t":[{"rounded-t":W()}],"rounded-r":[{"rounded-r":W()}],"rounded-b":[{"rounded-b":W()}],"rounded-l":[{"rounded-l":W()}],"rounded-ss":[{"rounded-ss":W()}],"rounded-se":[{"rounded-se":W()}],"rounded-ee":[{"rounded-ee":W()}],"rounded-es":[{"rounded-es":W()}],"rounded-tl":[{"rounded-tl":W()}],"rounded-tr":[{"rounded-tr":W()}],"rounded-br":[{"rounded-br":W()}],"rounded-bl":[{"rounded-bl":W()}],"border-w":[{border:X()}],"border-w-x":[{"border-x":X()}],"border-w-y":[{"border-y":X()}],"border-w-s":[{"border-s":X()}],"border-w-e":[{"border-e":X()}],"border-w-t":[{"border-t":X()}],"border-w-r":[{"border-r":X()}],"border-w-b":[{"border-b":X()}],"border-w-l":[{"border-l":X()}],"divide-x":[{"divide-x":X()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":X()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...Q(),"hidden","none"]}],"divide-style":[{divide:[...Q(),"hidden","none"]}],"border-color":[{border:w()}],"border-color-x":[{"border-x":w()}],"border-color-y":[{"border-y":w()}],"border-color-s":[{"border-s":w()}],"border-color-e":[{"border-e":w()}],"border-color-t":[{"border-t":w()}],"border-color-r":[{"border-r":w()}],"border-color-b":[{"border-b":w()}],"border-color-l":[{"border-l":w()}],"divide-color":[{divide:w()}],"outline-style":[{outline:[...Q(),"none","hidden"]}],"outline-offset":[{"outline-offset":[Y,V,O]}],"outline-w":[{outline:["",Y,Ct,Ue]}],"outline-color":[{outline:w()}],shadow:[{shadow:["","none",d,Jt,Zt]}],"shadow-color":[{shadow:w()}],"inset-shadow":[{"inset-shadow":["none",f,Jt,Zt]}],"inset-shadow-color":[{"inset-shadow":w()}],"ring-w":[{ring:X()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:w()}],"ring-offset-w":[{"ring-offset":[Y,Ue]}],"ring-offset-color":[{"ring-offset":w()}],"inset-ring-w":[{"inset-ring":X()}],"inset-ring-color":[{"inset-ring":w()}],"text-shadow":[{"text-shadow":["none",b,Jt,Zt]}],"text-shadow-color":[{"text-shadow":w()}],opacity:[{opacity:[Y,V,O]}],"mix-blend":[{"mix-blend":[...le(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":le()}],"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":[Y]}],"mask-image-linear-from-pos":[{"mask-linear-from":Z()}],"mask-image-linear-to-pos":[{"mask-linear-to":Z()}],"mask-image-linear-from-color":[{"mask-linear-from":w()}],"mask-image-linear-to-color":[{"mask-linear-to":w()}],"mask-image-t-from-pos":[{"mask-t-from":Z()}],"mask-image-t-to-pos":[{"mask-t-to":Z()}],"mask-image-t-from-color":[{"mask-t-from":w()}],"mask-image-t-to-color":[{"mask-t-to":w()}],"mask-image-r-from-pos":[{"mask-r-from":Z()}],"mask-image-r-to-pos":[{"mask-r-to":Z()}],"mask-image-r-from-color":[{"mask-r-from":w()}],"mask-image-r-to-color":[{"mask-r-to":w()}],"mask-image-b-from-pos":[{"mask-b-from":Z()}],"mask-image-b-to-pos":[{"mask-b-to":Z()}],"mask-image-b-from-color":[{"mask-b-from":w()}],"mask-image-b-to-color":[{"mask-b-to":w()}],"mask-image-l-from-pos":[{"mask-l-from":Z()}],"mask-image-l-to-pos":[{"mask-l-to":Z()}],"mask-image-l-from-color":[{"mask-l-from":w()}],"mask-image-l-to-color":[{"mask-l-to":w()}],"mask-image-x-from-pos":[{"mask-x-from":Z()}],"mask-image-x-to-pos":[{"mask-x-to":Z()}],"mask-image-x-from-color":[{"mask-x-from":w()}],"mask-image-x-to-color":[{"mask-x-to":w()}],"mask-image-y-from-pos":[{"mask-y-from":Z()}],"mask-image-y-to-pos":[{"mask-y-to":Z()}],"mask-image-y-from-color":[{"mask-y-from":w()}],"mask-image-y-to-color":[{"mask-y-to":w()}],"mask-image-radial":[{"mask-radial":[V,O]}],"mask-image-radial-from-pos":[{"mask-radial-from":Z()}],"mask-image-radial-to-pos":[{"mask-radial-to":Z()}],"mask-image-radial-from-color":[{"mask-radial-from":w()}],"mask-image-radial-to-color":[{"mask-radial-to":w()}],"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":P()}],"mask-image-conic-pos":[{"mask-conic":[Y]}],"mask-image-conic-from-pos":[{"mask-conic-from":Z()}],"mask-image-conic-to-pos":[{"mask-conic-to":Z()}],"mask-image-conic-from-color":[{"mask-conic-from":w()}],"mask-image-conic-to-color":[{"mask-conic-to":w()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:T()}],"mask-repeat":[{mask:S()}],"mask-size":[{mask:N()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",V,O]}],filter:[{filter:["","none",V,O]}],blur:[{blur:be()}],brightness:[{brightness:[Y,V,O]}],contrast:[{contrast:[Y,V,O]}],"drop-shadow":[{"drop-shadow":["","none",p,Jt,Zt]}],"drop-shadow-color":[{"drop-shadow":w()}],grayscale:[{grayscale:["",Y,V,O]}],"hue-rotate":[{"hue-rotate":[Y,V,O]}],invert:[{invert:["",Y,V,O]}],saturate:[{saturate:[Y,V,O]}],sepia:[{sepia:["",Y,V,O]}],"backdrop-filter":[{"backdrop-filter":["","none",V,O]}],"backdrop-blur":[{"backdrop-blur":be()}],"backdrop-brightness":[{"backdrop-brightness":[Y,V,O]}],"backdrop-contrast":[{"backdrop-contrast":[Y,V,O]}],"backdrop-grayscale":[{"backdrop-grayscale":["",Y,V,O]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Y,V,O]}],"backdrop-invert":[{"backdrop-invert":["",Y,V,O]}],"backdrop-opacity":[{"backdrop-opacity":[Y,V,O]}],"backdrop-saturate":[{"backdrop-saturate":[Y,V,O]}],"backdrop-sepia":[{"backdrop-sepia":["",Y,V,O]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":k()}],"border-spacing-x":[{"border-spacing-x":k()}],"border-spacing-y":[{"border-spacing-y":k()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",V,O]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[Y,"initial",V,O]}],ease:[{ease:["linear","initial",x,V,O]}],delay:[{delay:[Y,V,O]}],animate:[{animate:["none",$,V,O]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[v,V,O]}],"perspective-origin":[{"perspective-origin":F()}],rotate:[{rotate:we()}],"rotate-x":[{"rotate-x":we()}],"rotate-y":[{"rotate-y":we()}],"rotate-z":[{"rotate-z":we()}],scale:[{scale:L()}],"scale-x":[{"scale-x":L()}],"scale-y":[{"scale-y":L()}],"scale-z":[{"scale-z":L()}],"scale-3d":["scale-3d"],skew:[{skew:H()}],"skew-x":[{"skew-x":H()}],"skew-y":[{"skew-y":H()}],transform:[{transform:[V,O,"","none","gpu","cpu"]}],"transform-origin":[{origin:F()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:oe()}],"translate-x":[{"translate-x":oe()}],"translate-y":[{"translate-y":oe()}],"translate-z":[{"translate-z":oe()}],"translate-none":["translate-none"],accent:[{accent:w()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:w()}],"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",V,O]}],"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":k()}],"scroll-mx":[{"scroll-mx":k()}],"scroll-my":[{"scroll-my":k()}],"scroll-ms":[{"scroll-ms":k()}],"scroll-me":[{"scroll-me":k()}],"scroll-mt":[{"scroll-mt":k()}],"scroll-mr":[{"scroll-mr":k()}],"scroll-mb":[{"scroll-mb":k()}],"scroll-ml":[{"scroll-ml":k()}],"scroll-p":[{"scroll-p":k()}],"scroll-px":[{"scroll-px":k()}],"scroll-py":[{"scroll-py":k()}],"scroll-ps":[{"scroll-ps":k()}],"scroll-pe":[{"scroll-pe":k()}],"scroll-pt":[{"scroll-pt":k()}],"scroll-pr":[{"scroll-pr":k()}],"scroll-pb":[{"scroll-pb":k()}],"scroll-pl":[{"scroll-pl":k()}],"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",V,O]}],fill:[{fill:["none",...w()]}],"stroke-w":[{stroke:[Y,Ct,Ue,Wn]}],stroke:[{stroke:["none",...w()]}],"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"]}},gd=(t,{cacheSize:e,prefix:n,experimentalParseClassName:r,extend:o={},override:l={}})=>(kt(t,"cacheSize",e),kt(t,"prefix",n),kt(t,"experimentalParseClassName",r),Qt(t.theme,l.theme),Qt(t.classGroups,l.classGroups),Qt(t.conflictingClassGroups,l.conflictingClassGroups),Qt(t.conflictingClassGroupModifiers,l.conflictingClassGroupModifiers),kt(t,"orderSensitiveModifiers",l.orderSensitiveModifiers),en(t.theme,o.theme),en(t.classGroups,o.classGroups),en(t.conflictingClassGroups,o.conflictingClassGroups),en(t.conflictingClassGroupModifiers,o.conflictingClassGroupModifiers),mi(t,o,"orderSensitiveModifiers"),t),kt=(t,e,n)=>{n!==void 0&&(t[e]=n)},Qt=(t,e)=>{if(e)for(const n in e)kt(t,n,e[n])},en=(t,e)=>{if(e)for(const n in e)mi(t,e,n)},mi=(t,e,n)=>{const r=e[n];r!==void 0&&(t[n]=t[n]?t[n].concat(r):r)},$d=(t,...e)=>typeof t=="function"?sr(ar,t,...e):sr(()=>gd(ar(),t),...e),yd=sr(ar);var vd=t=>ge(t)?yd:$d({...t,extend:{theme:t.theme,classGroups:t.classGroups,conflictingClassGroupModifiers:t.conflictingClassGroupModifiers,conflictingClassGroups:t.conflictingClassGroups,...t.extend}}),xd=(t,e)=>{const n=Bt(t);return!n||!((e==null?void 0:e.twMerge)??!0)?n:((!Be.cachedTwMerge||Be.didTwMergeConfigChange)&&(Be.didTwMergeConfigChange=!1,Be.cachedTwMerge=vd(Be.cachedTwMergeConfig)),Be.cachedTwMerge(n)||void 0)},Cd=(...t)=>e=>xd(t,e),{tv:me}=Ac(Cd);const En=me({defaultVariants:{size:"md",status:"danger",variant:"opaque"},slots:{backdrop:"alert-dialog__backdrop",body:"alert-dialog__body",closeTrigger:"alert-dialog__close-trigger",container:"alert-dialog__container",dialog:"alert-dialog__dialog",footer:"alert-dialog__footer",header:"alert-dialog__header",heading:"alert-dialog__heading",icon:"alert-dialog__icon",trigger:"alert-dialog__trigger"},variants:{size:{cover:{dialog:"alert-dialog__dialog--cover"},lg:{dialog:"alert-dialog__dialog--lg"},md:{dialog:"alert-dialog__dialog--md"},sm:{dialog:"alert-dialog__dialog--sm"},xs:{dialog:"alert-dialog__dialog--xs"}},status:{accent:{icon:"alert-dialog__icon--accent"},danger:{icon:"alert-dialog__icon--danger"},default:{icon:"alert-dialog__icon--default"},success:{icon:"alert-dialog__icon--success"},warning:{icon:"alert-dialog__icon--warning"}},variant:{blur:{backdrop:"alert-dialog__backdrop--blur"},opaque:{backdrop:"alert-dialog__backdrop--opaque"},transparent:{backdrop:"alert-dialog__backdrop--transparent"}}}}),Ed=me({base:"button",defaultVariants:{fullWidth:!1,isIconOnly:!1,size:"md",variant:"primary"},variants:{fullWidth:{false:"",true:"button--full-width"},isIconOnly:{true:"button--icon-only"},size:{lg:"button--lg",md:"button--md",sm:"button--sm"},variant:{danger:"button--danger","danger-soft":"button--danger-soft",ghost:"button--ghost",outline:"button--outline",primary:"button--primary",secondary:"button--secondary",tertiary:"button--tertiary"}}}),wd=me({defaultVariants:{variant:"default"},slots:{base:"card",content:"card__content",description:"card__description",footer:"card__footer",header:"card__header",title:"card__title"},variants:{variant:{default:{base:"card--default"},secondary:{base:"card--secondary"},tertiary:{base:"card--tertiary"},transparent:{base:"card--transparent"}}}}),Sd=me({defaultVariants:{color:"default",variant:"secondary"},slots:{base:"chip",label:"chip__label"},variants:{color:{accent:{base:"chip--accent"},danger:{base:"chip--danger"},default:{base:"chip--default"},success:{base:"chip--success"},warning:{base:"chip--warning"}},size:{lg:{base:"chip--lg"},md:{base:"chip--md"},sm:{base:"chip--sm"}},variant:{primary:{base:"chip--primary"},secondary:{base:"chip--secondary"},soft:{base:"chip--soft"},tertiary:{base:"chip--tertiary"}}}}),Pd=me({base:"close-button",defaultVariants:{variant:"default"},variants:{variant:{default:"close-button--default"}}}),Td=me({defaultVariants:{fullWidth:!1},slots:{base:"combo-box",inputGroup:"combo-box__input-group",popover:"combo-box__popover",trigger:"combo-box__trigger"},variants:{fullWidth:{false:{},true:{base:"combo-box--full-width",inputGroup:"combo-box__input-group--full-width"}}}}),kd=me({base:"description"}),Dd=me({base:"input",defaultVariants:{fullWidth:!1,variant:"primary"},variants:{fullWidth:{false:"",true:"input--full-width"},variant:{primary:"input--primary",secondary:"input--secondary"}}}),Md=me({base:"label",defaultVariants:{isDisabled:!1,isInvalid:!1,isRequired:!1},variants:{isDisabled:{true:"label--disabled"},isInvalid:{true:"label--invalid"},isRequired:{true:"label--required"}}}),Ad=me({slots:{base:"link",icon:"link__icon"}}),Ld=me({base:"list-box",defaultVariants:{variant:"default"},variants:{variant:{danger:"list-box--danger",default:"list-box--default"}}}),Kd=me({defaultVariants:{variant:"default"},slots:{indicator:"list-box-item__indicator",item:"list-box-item"},variants:{variant:{danger:{item:"list-box-item--danger"},default:{item:"list-box-item--default"}}}}),Rd=me({base:"list-box-section"}),Fd=me({base:"spinner",defaultVariants:{color:"accent",size:"md"},variants:{color:{accent:"spinner--accent",current:"spinner--current",danger:"spinner--danger",success:"spinner--success",warning:"spinner--warning"},size:{lg:"spinner--lg",md:"spinner--md",sm:"spinner--sm",xl:"spinner--xl"}}}),Id=me({base:"textfield",defaultVariants:{fullWidth:!1},variants:{fullWidth:{false:"",true:"textfield--full-width"}}}),bn=Symbol("default");function rt({values:t,children:e}){for(let[n,r]of t)e=y.createElement(n.Provider,{value:r},e);return e}function Ee(t){let{className:e,style:n,children:r,defaultClassName:o,defaultChildren:l,defaultStyle:i,values:s,render:u}=t;return a.useMemo(()=>{let c,d,f;return typeof e=="function"?c=e({...s,defaultClassName:o}):c=e,typeof n=="function"?d=n({...s,defaultStyle:i||{}}):d=n,typeof r=="function"?f=r({...s,defaultChildren:l}):r==null?f=l:f=r,{className:c??o,style:d||i?{...i,...d}:void 0,children:f??l,"data-rac":"",render:u?b=>u(b,s):void 0}},[e,n,r,o,l,i,s,u])}function Bd(t,e){return n=>e(typeof t=="function"?t(n):t,n)}function _r(t,e){let n=a.useContext(t);if(e===null)return null;if(n&&typeof n=="object"&&"slots"in n&&n.slots){let r=e||bn;if(!n.slots[r]){let o=new Intl.ListFormat().format(Object.keys(n.slots).map(i=>`"${i}"`)),l=e?`Invalid slot "${e}".`:"A slot prop is required.";throw new Error(`${l} Valid slot names are ${o}.`)}return n.slots[r]}return n}function Ce(t,e,n){let r=_r(n,t.slot)||{},{ref:o,...l}=r,i=nt(a.useMemo(()=>ht(e,o),[e,o])),s=J(l,t);return"style"in l&&l.style&&"style"in t&&t.style&&(typeof l.style=="function"||typeof t.style=="function"?s.style=u=>{let c=typeof l.style=="function"?l.style(u):l.style,d={...u.defaultStyle,...c},f=typeof t.style=="function"?t.style({...u,defaultStyle:d}):t.style;return{...d,...f}}:s.style={...l.style,...t.style}),[s,i]}function jr(t=!0){let[e,n]=a.useState(t),r=a.useRef(!1),o=a.useCallback(l=>{r.current=!0,n(!!l)},[]);return ne(()=>{r.current||n(!1)},[]),[o,e]}function gi(t){const e=/^(data-.*)$/;let n={};for(const r in t)e.test(r)||(n[r]=t[r]);return n}function Nd(t,e,n){let{render:r,...o}=e,l=a.useRef(null),i=a.useMemo(()=>ht(n,l),[n,l]);ne(()=>{},[t,r]);let s={...o,ref:i};return r?r(s,void 0):y.createElement(t,s)}const Lo={},fe=new Proxy({},{get(t,e){if(typeof e!="string")return;let n=Lo[e];return n||(n=a.forwardRef(Nd.bind(null,e)),Lo[e]=n),n}});typeof HTMLTemplateElement<"u"&&(Object.defineProperty(HTMLTemplateElement.prototype,"firstChild",{configurable:!0,enumerable:!0,get:function(){return this.content.firstChild}}),Object.defineProperty(HTMLTemplateElement.prototype,"appendChild",{configurable:!0,enumerable:!0,value:function(t){return this.content.appendChild(t)}}),Object.defineProperty(HTMLTemplateElement.prototype,"removeChild",{configurable:!0,enumerable:!0,value:function(t){return this.content.removeChild(t)}}),Object.defineProperty(HTMLTemplateElement.prototype,"insertBefore",{configurable:!0,enumerable:!0,value:function(t,e){return this.content.insertBefore(t,e)}}));const hn=a.createContext(!1);function Od(t){if(a.useContext(hn))return y.createElement(y.Fragment,null,t.children);let n=y.createElement(hn.Provider,{value:!0},t.children);return y.createElement("template",null,n)}function Ht(t){let e=(n,r)=>a.useContext(hn)?null:t(n,r);return e.displayName=t.displayName||t.name,a.forwardRef(e)}function Vd(){return a.useContext(hn)}const wn=a.createContext({}),_d=Ht(function(e,n){[e,n]=Ce(e,n,wn);let{elementType:r="label",...o}=e,l=fe[r];return y.createElement(l,{className:"react-aria-Label",...o,ref:n})});function $i(t){let{id:e,label:n,"aria-labelledby":r,"aria-label":o,labelElementType:l="label"}=t;e=ve(e);let i=ve(),s={};n&&(r=r?`${i} ${r}`:i,s={id:i,htmlFor:l==="label"?e:void 0});let u=dn({id:e,"aria-label":o,"aria-labelledby":r});return{labelProps:s,fieldProps:u}}const jd=new Set(["Arab","Syrc","Samr","Mand","Thaa","Mend","Nkoo","Adlm","Rohg","Hebr"]),zd=new Set(["ae","ar","arc","bcc","bqi","ckb","dv","fa","glk","he","ku","mzn","nqo","pnb","ps","sd","ug","ur","yi"]);function Hd(t){if(Intl.Locale){let n=new Intl.Locale(t).maximize(),r=typeof n.getTextInfo=="function"?n.getTextInfo():n.textInfo;if(r)return r.direction==="rtl";if(n.script)return jd.has(n.script)}let e=t.split("-")[0];return zd.has(e)}const yi=Symbol.for("react-aria.i18n.locale");function vi(){let t=typeof window<"u"&&window[yi]||typeof navigator<"u"&&(navigator.language||navigator.userLanguage)||"en-US";try{Intl.DateTimeFormat.supportedLocalesOf([t])}catch{t="en-US"}return{locale:t,direction:Hd(t)?"rtl":"ltr"}}let ur=vi(),Dt=new Set;function Ko(){ur=vi();for(let t of Dt)t(ur)}function Wd(){let t=et(),[e,n]=a.useState(ur);return a.useEffect(()=>(Dt.size===0&&window.addEventListener("languagechange",Ko),Dt.add(n),()=>{Dt.delete(n),Dt.size===0&&window.removeEventListener("languagechange",Ko)}),[]),t?{locale:typeof window<"u"&&window[yi]||"en-US",direction:"ltr"}:e}const Gd=y.createContext(null);function $t(){let t=Wd();return a.useContext(Gd)||t}function cr(t,e=-1/0,n=1/0){return Math.min(Math.max(t,e),n)}const Ud=a.createContext(null),xi=7e3;let Re=null;function Lt(t,e="assertive",n=xi){Re?Re.announce(t,e,n):(Re=new qd,(typeof IS_REACT_ACT_ENVIRONMENT=="boolean"?IS_REACT_ACT_ENVIRONMENT:typeof jest<"u")?Re.announce(t,e,n):setTimeout(()=>{Re!=null&&Re.isAttached()&&(Re==null||Re.announce(t,e,n))},100))}class qd{constructor(){this.node=null,this.assertiveLog=null,this.politeLog=null,typeof document<"u"&&(this.node=document.createElement("div"),this.node.dataset.liveAnnouncer="true",Object.assign(this.node.style,{border:0,clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap"}),this.assertiveLog=this.createLog("assertive"),this.node.appendChild(this.assertiveLog),this.politeLog=this.createLog("polite"),this.node.appendChild(this.politeLog),document.body.prepend(this.node))}isAttached(){var e;return(e=this.node)==null?void 0:e.isConnected}createLog(e){let n=document.createElement("div");return n.setAttribute("role","log"),n.setAttribute("aria-live",e),n.setAttribute("aria-relevant","additions"),n}destroy(){this.node&&(document.body.removeChild(this.node),this.node=null)}announce(e,n="assertive",r=xi){var l,i;if(!this.node)return;let o=document.createElement("div");typeof e=="object"?(o.setAttribute("role","img"),o.setAttribute("aria-labelledby",e["aria-labelledby"])):o.textContent=e,n==="assertive"?(l=this.assertiveLog)==null||l.appendChild(o):(i=this.politeLog)==null||i.appendChild(o),e!==""&&setTimeout(()=>{o.remove()},r)}clear(e){this.node&&((!e||e==="assertive")&&this.assertiveLog&&(this.assertiveLog.innerHTML=""),(!e||e==="polite")&&this.politeLog&&(this.politeLog.innerHTML=""))}}function zr(t){let e=t;return e.nativeEvent=t,e.isDefaultPrevented=()=>e.defaultPrevented,e.isPropagationStopped=()=>e.cancelBubble,e.persist=()=>{},e}function Ci(t,e){Object.defineProperty(t,"target",{value:e}),Object.defineProperty(t,"currentTarget",{value:e})}function Ei(t){let e=a.useRef({isFocused:!1,observer:null});return ne(()=>{const n=e.current;return()=>{n.observer&&(n.observer.disconnect(),n.observer=null)}},[]),a.useCallback(n=>{let r=j(n);if(r instanceof HTMLButtonElement||r instanceof HTMLInputElement||r instanceof HTMLTextAreaElement||r instanceof HTMLSelectElement){e.current.isFocused=!0;let o=r,l=i=>{if(e.current.isFocused=!1,o.disabled){let s=zr(i);t==null||t(s)}e.current.observer&&(e.current.observer.disconnect(),e.current.observer=null)};o.addEventListener("focusout",l,{once:!0}),e.current.observer=new MutationObserver(()=>{var i;if(e.current.isFocused&&o.disabled){(i=e.current.observer)==null||i.disconnect();let s=o===re()?null:re();o.dispatchEvent(new FocusEvent("blur",{relatedTarget:s})),o.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:s}))}}),e.current.observer.observe(o,{attributes:!0,attributeFilter:["disabled"]})}},[t])}let mn=!1;function Yd(t){for(;t&&!Jl(t,{skipVisibilityCheck:!0});)t=t.parentElement;let e=xe(t),n=e.document.activeElement;if(!n||n===t)return;mn=!0;let r=!1,o=d=>{(j(d)===n||r)&&d.stopImmediatePropagation()},l=d=>{(j(d)===n||r)&&(d.stopImmediatePropagation(),!t&&!r&&(r=!0,Ke(n),u()))},i=d=>{(j(d)===t||r)&&d.stopImmediatePropagation()},s=d=>{(j(d)===t||r)&&(d.stopImmediatePropagation(),r||(r=!0,Ke(n),u()))};e.addEventListener("blur",o,!0),e.addEventListener("focusout",l,!0),e.addEventListener("focusin",s,!0),e.addEventListener("focus",i,!0);let u=()=>{cancelAnimationFrame(c),e.removeEventListener("blur",o,!0),e.removeEventListener("focusout",l,!0),e.removeEventListener("focusin",s,!0),e.removeEventListener("focus",i,!0),mn=!1,r=!1},c=requestAnimationFrame(u);return u}let ot=null;const dr=new Set;let Kt=new Map,Qe=!1,fr=!1;const Xd={Tab:!0,Escape:!0};function Sn(t,e){for(let n of dr)n(t,e)}function Zd(t){return!(t.metaKey||!Xe()&&t.altKey||t.ctrlKey||t.key==="Control"||t.key==="Shift"||t.key==="Meta")}function gn(t){Qe=!0,!_e.isOpening&&Zd(t)&&(ot="keyboard",Sn("keyboard",t))}function ft(t){ot="pointer","pointerType"in t&&t.pointerType,(t.type==="mousedown"||t.type==="pointerdown")&&(Qe=!0,Sn("pointer",t))}function wi(t){!_e.isOpening&&Yl(t)&&(Qe=!0,ot="virtual")}function Si(t){let e=xe(j(t)),n=ee(j(t));j(t)===e||j(t)===n||mn||!t.isTrusted||(!Qe&&!fr&&(ot="virtual",Sn("virtual",t)),Qe=!1,fr=!1)}function Pi(){mn||(Qe=!1,fr=!0)}function pr(t){if(typeof window>"u"||typeof document>"u")return;const e=xe(t),n=ee(t);if(Kt.get(e))return;let r=e.HTMLElement.prototype.focus;e.HTMLElement.prototype.focus=function(){Qe=!0,r.apply(this,arguments)},n.addEventListener("keydown",gn,!0),n.addEventListener("keyup",gn,!0),n.addEventListener("click",wi,!0),e.addEventListener("focus",Si,!0),e.addEventListener("blur",Pi,!1),typeof PointerEvent<"u"&&(n.addEventListener("pointerdown",ft,!0),n.addEventListener("pointermove",ft,!0),n.addEventListener("pointerup",ft,!0)),e.addEventListener("beforeunload",()=>{Ti(t)},{once:!0}),Kt.set(e,{focus:r})}const Ti=(t,e)=>{const n=xe(t),r=ee(t);e&&r.removeEventListener("DOMContentLoaded",e),Kt.has(n)&&(n.HTMLElement.prototype.focus=Kt.get(n).focus,r.removeEventListener("keydown",gn,!0),r.removeEventListener("keyup",gn,!0),r.removeEventListener("click",wi,!0),n.removeEventListener("focus",Si,!0),n.removeEventListener("blur",Pi,!1),typeof PointerEvent<"u"&&(r.removeEventListener("pointerdown",ft,!0),r.removeEventListener("pointermove",ft,!0),r.removeEventListener("pointerup",ft,!0)),Kt.delete(n))};function Jd(t){const e=ee(t);let n;return e.readyState!=="loading"?pr(t):(n=()=>{pr(t)},e.addEventListener("DOMContentLoaded",n)),()=>Ti(t,n)}typeof document<"u"&&Jd();function Nt(){return ot!=="pointer"}function Ot(){return ot}function Qd(t){ot=t,Sn(t,null)}const ef=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function tf(t,e,n){let r=n?j(n):void 0,o=ee(r),l=xe(r);const i=typeof l<"u"?l.HTMLInputElement:HTMLInputElement,s=typeof l<"u"?l.HTMLTextAreaElement:HTMLTextAreaElement,u=typeof l<"u"?l.HTMLElement:HTMLElement,c=typeof l<"u"?l.KeyboardEvent:KeyboardEvent;let d=re(o);return t=t||d instanceof i&&!ef.has(d.type)||d instanceof s||d instanceof u&&d.isContentEditable,!(t&&e==="keyboard"&&n instanceof c&&!Xd[n.key])}function nf(t,e,n){pr(),a.useEffect(()=>{if((n==null?void 0:n.enabled)===!1)return;let r=(o,l)=>{tf(!!(n!=null&&n.isTextInput),o,l)&&t(Nt())};return dr.add(r),()=>{dr.delete(r)}},e)}function Ge(t){if(!t.isConnected)return;const e=ee(t);if(Ot()==="virtual"){let n=re(e);ql(()=>{const r=re(e);(r===n||r===e.body)&&t.isConnected&&Ke(t)})}else Ke(t)}function Hr(t){let{isDisabled:e,onFocus:n,onBlur:r,onFocusChange:o}=t;const l=a.useCallback(u=>{if(j(u)===u.currentTarget)return r&&r(u),o&&o(!1),!0},[r,o]),i=Ei(l),s=a.useCallback(u=>{let c=j(u);const d=ee(c),f=d?re(d):re();c===u.currentTarget&&c===f&&(n&&n(u),o&&o(!0),i(u))},[o,n,i]);return{focusProps:{onFocus:!e&&(n||o||r)?s:void 0,onBlur:!e&&(r||o)?l:void 0}}}function Ro(t){if(!t)return;let e=!0;return n=>{let r={...n,preventDefault(){n.preventDefault()},isDefaultPrevented(){return n.isDefaultPrevented()},stopPropagation(){e=!0},continuePropagation(){e=!1},isPropagationStopped(){return e}};t(r),e&&n.stopPropagation()}}function ki(t){return{keyboardProps:t.isDisabled?{}:{onKeyDown:Ro(t.onKeyDown),onKeyUp:Ro(t.onKeyUp)}}}let br=y.createContext(null);function rf(t){let e=a.useContext(br)||{};Fr(e,t);let{ref:n,...r}=e;return r}function Pn(t,e){let{focusProps:n}=Hr(t),{keyboardProps:r}=ki(t),o=J(n,r),l=rf(e),i=t.isDisabled?{}:l,s=a.useRef(t.autoFocus);a.useEffect(()=>{s.current&&e.current&&Ge(e.current),s.current=!1},[e]);let u=t.excludeFromTabOrder?-1:0;return t.isDisabled&&(u=void 0),{focusableProps:J({...o,tabIndex:u},i)}}let ct="default",hr="",an=new WeakMap;function of(t){if(Ze()){if(ct==="default"){const e=ee(t);hr=e.documentElement.style.webkitUserSelect,e.documentElement.style.webkitUserSelect="none"}ct="disabled"}else if(t instanceof HTMLElement||t instanceof SVGElement){let e="userSelect"in t.style?"userSelect":"webkitUserSelect";an.set(t,t.style[e]),t.style[e]="none"}}function Fo(t){if(Ze()){if(ct!=="disabled")return;ct="restoring",setTimeout(()=>{ql(()=>{if(ct==="restoring"){const e=ee(t);e.documentElement.style.webkitUserSelect==="none"&&(e.documentElement.style.webkitUserSelect=hr||""),hr="",ct="default"}})},300)}else if((t instanceof HTMLElement||t instanceof SVGElement)&&t&&an.has(t)){let e=an.get(t),n="userSelect"in t.style?"userSelect":"webkitUserSelect";t.style[n]==="none"&&(t.style[n]=e),t.getAttribute("style")===""&&t.removeAttribute("style"),an.delete(t)}}const Vt=y.createContext({register:()=>{}});Vt.displayName="PressResponderContext";function lf(t){let e=a.useContext(Vt);if(e){let{register:n,ref:r,...o}=e;t=J(o,t),n()}return Fr(e,t.ref),t}var bt;class tn{constructor(e,n,r,o){$o(this,bt);Nn(this,bt,!0);let l=(o==null?void 0:o.target)??r.currentTarget;const i=l==null?void 0:l.getBoundingClientRect();let s,u=0,c,d=null;r.clientX!=null&&r.clientY!=null&&(c=r.clientX,d=r.clientY),i&&(c!=null&&d!=null?(s=c-i.left,u=d-i.top):(s=i.width/2,u=i.height/2)),this.type=e,this.pointerType=n,this.target=r.currentTarget,this.shiftKey=r.shiftKey,this.metaKey=r.metaKey,this.ctrlKey=r.ctrlKey,this.altKey=r.altKey,this.x=s,this.y=u,this.key=r.key}continuePropagation(){Nn(this,bt,!1)}get shouldStopPropagation(){return go(this,bt)}}bt=new WeakMap;const Io=Symbol("linkClicked"),Bo="react-aria-pressable-style",No="data-react-aria-pressable";function Wt(t){let{onPress:e,onPressChange:n,onPressStart:r,onPressEnd:o,onPressUp:l,onClick:i,isDisabled:s,isPressed:u,preventFocusOnPress:c,shouldCancelOnPointerExit:d,allowTextSelectionOnPress:f,ref:b,...p}=lf(t),[m,v]=a.useState(!1),g=a.useRef({isPressed:!1,ignoreEmulatedMouseEvents:!1,didFirePressStart:!1,isTriggeringEvent:!1,activePointerId:null,target:null,isOverTarget:!1,pointerType:null,disposables:[]}),{addGlobalListener:x,removeAllGlobalListeners:$}=Cn(),D=a.useCallback((h,C)=>{let M=g.current;if(s||M.didFirePressStart)return!1;let E=!0;if(M.isTriggeringEvent=!0,r){let w=new tn("pressstart",C,h);r(w),E=w.shouldStopPropagation}return n&&n(!0),M.isTriggeringEvent=!1,M.didFirePressStart=!0,v(!0),E},[s,r,n]),P=a.useCallback((h,C,M=!0)=>{let E=g.current;if(!E.didFirePressStart)return!1;E.didFirePressStart=!1,E.isTriggeringEvent=!0;let w=!0;if(o){let T=new tn("pressend",C,h);o(T),w=T.shouldStopPropagation}if(n&&n(!1),v(!1),e&&M&&!s){let T=new tn("press",C,h);e(T),w&&(w=T.shouldStopPropagation)}return E.isTriggeringEvent=!1,w},[s,o,n,e]),F=Pe(P),R=a.useCallback((h,C)=>{let M=g.current;if(s)return!1;if(l){M.isTriggeringEvent=!0;let E=new tn("pressup",C,h);return l(E),M.isTriggeringEvent=!1,E.shouldStopPropagation}return!0},[s,l]),I=Pe(R),k=a.useCallback(h=>{let C=g.current;if(C.isPressed&&C.target){C.didFirePressStart&&C.pointerType!=null&&P(qe(C.target,h),C.pointerType,!1),C.isPressed=!1,C.isOverTarget=!1,C.activePointerId=null,C.pointerType=null,$(),f||Fo(C.target);for(let M of C.disposables)M();C.disposables=[]}},[f,$,P]),B=Pe(k);a.useEffect(()=>{s&&g.current.isPressed&&B({currentTarget:g.current.target,shiftKey:!1,ctrlKey:!1,metaKey:!1,altKey:!1})},[s]);let K=a.useCallback(h=>{d&&k(h)},[d,k]),_=a.useCallback(h=>{s||i==null||i(h)},[s,i]),U=a.useCallback((h,C)=>{if(!s&&i){let M=new MouseEvent("click",h);Ci(M,C),i(zr(M))}},[s,i]),z=a.useMemo(()=>{let h=g.current,C={onKeyDown(E){var w;if(Gn(E.nativeEvent,E.currentTarget)&&te(E.currentTarget,j(E))){Oo(j(E),E.key)&&E.preventDefault();let T=!0;!h.isPressed&&!E.repeat&&(h.target=E.currentTarget,h.isPressed=!0,h.pointerType="keyboard",T=D(E,"keyboard"));let S=E.currentTarget,N=q=>{Gn(q,S)&&!q.repeat&&te(S,j(q))&&h.target&&I(qe(h.target,q),"keyboard")};x(ee(E.currentTarget),"keyup",tt(N,M),!0),T&&E.stopPropagation(),E.metaKey&&Xe()&&((w=h.metaKeyEvents)==null||w.set(E.key,E.nativeEvent))}else E.key==="Meta"&&(h.metaKeyEvents=new Map)},onClick(E){if(!(E&&!te(E.currentTarget,j(E)))&&E&&E.button===0&&!h.isTriggeringEvent&&!_e.isOpening){let w=!0;if(s&&E.preventDefault(),!h.ignoreEmulatedMouseEvents&&!h.isPressed&&(h.pointerType==="virtual"||Yl(E.nativeEvent))){let T=D(E,"virtual"),S=I(E,"virtual"),N=F(E,"virtual");_(E),w=T&&S&&N}else if(h.isPressed&&h.pointerType!=="keyboard"){let T=h.pointerType||E.nativeEvent.pointerType||"virtual",S=I(qe(E.currentTarget,E),T),N=F(qe(E.currentTarget,E),T,!0);w=S&&N,h.isOverTarget=!1,_(E),B(E)}h.ignoreEmulatedMouseEvents=!1,w&&E.stopPropagation()}}},M=E=>{var w,T,S;if(h.isPressed&&h.target&&Gn(E,h.target)){Oo(j(E),E.key)&&E.preventDefault();let N=j(E),q=te(h.target,N);F(qe(h.target,E),"keyboard",q),q&&U(E,h.target),$(),E.key!=="Enter"&&Wr(h.target)&&te(h.target,N)&&!E[Io]&&(E[Io]=!0,_e(h.target,E,!1)),h.isPressed=!1,(w=h.metaKeyEvents)==null||w.delete(E.key)}else if(E.key==="Meta"&&((T=h.metaKeyEvents)!=null&&T.size)){let N=h.metaKeyEvents;h.metaKeyEvents=void 0;for(let q of N.values())(S=h.target)==null||S.dispatchEvent(new KeyboardEvent("keyup",q))}};if(typeof PointerEvent<"u"){C.onPointerDown=T=>{if(T.button!==0||!te(T.currentTarget,j(T)))return;if(mc(T.nativeEvent)){h.pointerType="virtual";return}h.pointerType=T.pointerType;let S=!0;if(!h.isPressed){h.isPressed=!0,h.isOverTarget=!0,h.activePointerId=T.pointerId,h.target=T.currentTarget,f||of(h.target),S=D(T,h.pointerType);let N=j(T);"releasePointerCapture"in N&&("hasPointerCapture"in N?N.hasPointerCapture(T.pointerId)&&N.releasePointerCapture(T.pointerId):N.releasePointerCapture(T.pointerId)),x(ee(T.currentTarget),"pointerup",E,!1),x(ee(T.currentTarget),"pointercancel",w,!1)}S&&T.stopPropagation()},C.onMouseDown=T=>{if(te(T.currentTarget,j(T))&&T.button===0){if(c){let S=Yd(T.target);S&&h.disposables.push(S)}T.stopPropagation()}},C.onPointerUp=T=>{!te(T.currentTarget,j(T))||h.pointerType==="virtual"||T.button===0&&!h.isPressed&&I(T,h.pointerType||T.pointerType)},C.onPointerEnter=T=>{T.pointerId===h.activePointerId&&h.target&&!h.isOverTarget&&h.pointerType!=null&&(h.isOverTarget=!0,D(qe(h.target,T),h.pointerType))},C.onPointerLeave=T=>{T.pointerId===h.activePointerId&&h.target&&h.isOverTarget&&h.pointerType!=null&&(h.isOverTarget=!1,F(qe(h.target,T),h.pointerType,!1),K(T))};let E=T=>{if(T.pointerId===h.activePointerId&&h.isPressed&&T.button===0&&h.target){if(te(h.target,j(T))&&h.pointerType!=null){let S=!1,N=setTimeout(()=>{h.isPressed&&h.target instanceof HTMLElement&&(S?B(T):(Ke(h.target),h.target.click()))},80);x(T.currentTarget,"click",()=>S=!0,!0),h.disposables.push(()=>clearTimeout(N))}else B(T);h.isOverTarget=!1}},w=T=>{B(T)};C.onDragStart=T=>{te(T.currentTarget,j(T))&&B(T)}}return C},[x,s,c,$,f,K,D,_,U]);return a.useEffect(()=>{if(!b)return;const h=ee(b.current);if(!h||!h.head||h.getElementById(Bo))return;const C=h.createElement("style");C.id=Bo;let M=ti(h);M&&(C.nonce=M),C.textContent=` -@layer { - [${No}] { - touch-action: pan-x pan-y pinch-zoom; - } -} - `.trim(),h.head.prepend(C)},[b]),a.useEffect(()=>{let h=g.current;return()=>{f||Fo(h.target??void 0);for(let C of h.disposables)C();h.disposables=[]}},[f]),{isPressed:u||m,pressProps:J(p,z,{[No]:!0})}}function Wr(t){return t.tagName==="A"&&t.hasAttribute("href")}function Gn(t,e){const{key:n,code:r}=t,o=e,l=o.getAttribute("role");return(n==="Enter"||n===" "||n==="Spacebar"||r==="Space")&&!(o instanceof xe(o).HTMLInputElement&&!Di(o,n)||o instanceof xe(o).HTMLTextAreaElement||o.isContentEditable)&&!((l==="link"||!l&&Wr(o))&&n!=="Enter")}function qe(t,e){let n=e.clientX,r=e.clientY;return{currentTarget:t,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,altKey:e.altKey,clientX:n,clientY:r,key:e.key}}function sf(t){return t instanceof HTMLInputElement?!1:t instanceof HTMLButtonElement?t.type!=="submit"&&t.type!=="reset":!Wr(t)}function Oo(t,e){return t instanceof HTMLInputElement?!Di(t,e):sf(t)}const af=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function Di(t,e){return t.type==="checkbox"||t.type==="radio"?e===" ":af.has(t.type)}function uf(t,e){let{elementType:n="button",isDisabled:r,onPress:o,onPressStart:l,onPressEnd:i,onPressUp:s,onPressChange:u,preventFocusOnPress:c,allowFocusWhenDisabled:d,onClick:f,href:b,target:p,rel:m,type:v="button"}=t,g;n==="button"?g={type:v,disabled:r,form:t.form,formAction:t.formAction,formEncType:t.formEncType,formMethod:t.formMethod,formNoValidate:t.formNoValidate,formTarget:t.formTarget,name:t.name,value:t.value}:g={role:"button",href:n==="a"&&!r?b:void 0,target:n==="a"?p:void 0,type:n==="input"?v:void 0,disabled:n==="input"?r:void 0,"aria-disabled":!r||n==="input"?void 0:r,rel:n==="a"?m:void 0};let{pressProps:x,isPressed:$}=Wt({onPressStart:l,onPressEnd:i,onPressChange:u,onPress:o,onPressUp:s,onClick:f,isDisabled:r,preventFocusOnPress:c,ref:e}),{focusableProps:D}=Pn(t,e);d&&(D.tabIndex=r?-1:D.tabIndex);let P=J(D,x,pe(t,{labelable:!0}));return{isPressed:$,buttonProps:J(g,P,{"aria-haspopup":t["aria-haspopup"],"aria-expanded":t["aria-expanded"],"aria-controls":t["aria-controls"],"aria-pressed":t["aria-pressed"],"aria-current":t["aria-current"],"aria-disabled":t["aria-disabled"]})}}function Tn(t){let{isDisabled:e,onBlurWithin:n,onFocusWithin:r,onFocusWithinChange:o}=t,l=a.useRef({isFocusWithin:!1}),{addGlobalListener:i,removeAllGlobalListeners:s}=Cn(),u=a.useCallback(f=>{te(f.currentTarget,j(f))&&l.current.isFocusWithin&&!te(f.currentTarget,f.relatedTarget)&&(l.current.isFocusWithin=!1,s(),n&&n(f),o&&o(!1))},[n,o,l,s]),c=Ei(u),d=a.useCallback(f=>{if(!te(f.currentTarget,j(f)))return;let b=j(f);const p=ee(b),m=re(p);if(!l.current.isFocusWithin&&m===b){r&&r(f),o&&o(!0),l.current.isFocusWithin=!0,c(f);let v=f.currentTarget;i(p,"focus",g=>{let x=j(g);if(l.current.isFocusWithin&&!te(v,x)){let $=new p.defaultView.FocusEvent("blur",{relatedTarget:x});Ci($,v);let D=zr($);u(D)}},{capture:!0})}},[r,o,c,i,u]);return e?{focusWithinProps:{onFocus:void 0,onBlur:void 0}}:{focusWithinProps:{onFocus:d,onBlur:u}}}function kn(t={}){let{autoFocus:e=!1,isTextInput:n,within:r}=t,o=a.useRef({isFocused:!1,isFocusVisible:e||Nt()}),[l,i]=a.useState(!1),[s,u]=a.useState(()=>o.current.isFocused&&o.current.isFocusVisible),c=a.useCallback(()=>u(o.current.isFocused&&o.current.isFocusVisible),[]),d=a.useCallback(p=>{o.current.isFocused=p,o.current.isFocusVisible=Nt(),i(p),c()},[c]);nf(p=>{o.current.isFocusVisible=p,c()},[n,l],{enabled:l,isTextInput:n});let{focusProps:f}=Hr({isDisabled:r,onFocusChange:d}),{focusWithinProps:b}=Tn({isDisabled:!r,onFocusWithinChange:d});return{isFocused:l,isFocusVisible:s,focusProps:r?b:f}}let mr=!1,nn=0;function cf(){mr=!0,setTimeout(()=>{mr=!1},500)}function Vo(t){t.pointerType==="touch"&&cf()}function df(){let t=ee(null);if(!(typeof t>"u"))return nn===0&&typeof PointerEvent<"u"&&t.addEventListener("pointerup",Vo),nn++,()=>{nn--,!(nn>0)&&typeof PointerEvent<"u"&&t.removeEventListener("pointerup",Vo)}}function Gt(t){let{onHoverStart:e,onHoverChange:n,onHoverEnd:r,isDisabled:o}=t,[l,i]=a.useState(!1),s=a.useRef({isHovered:!1,ignoreEmulatedMouseEvents:!1,pointerType:"",target:null}).current;a.useEffect(df,[]);let{addGlobalListener:u,removeAllGlobalListeners:c}=Cn(),{hoverProps:d,triggerHoverEnd:f}=a.useMemo(()=>{let b=(v,g)=>{if(s.pointerType=g,o||g==="touch"||s.isHovered||!te(v.currentTarget,j(v)))return;s.isHovered=!0;let x=v.currentTarget;s.target=x,u(ee(j(v)),"pointerover",$=>{s.isHovered&&s.target&&!te(s.target,j($))&&p($,$.pointerType)},{capture:!0}),e&&e({type:"hoverstart",target:x,pointerType:g}),n&&n(!0),i(!0)},p=(v,g)=>{let x=s.target;s.pointerType="",s.target=null,!(g==="touch"||!s.isHovered||!x)&&(s.isHovered=!1,c(),r&&r({type:"hoverend",target:x,pointerType:g}),n&&n(!1),i(!1))},m={};return typeof PointerEvent<"u"&&(m.onPointerEnter=v=>{mr&&v.pointerType==="mouse"||b(v,v.pointerType)},m.onPointerLeave=v=>{!o&&te(v.currentTarget,j(v))&&p(v,v.pointerType)}),{hoverProps:m,triggerHoverEnd:p}},[e,n,r,o,s,u,c]);return a.useEffect(()=>{o&&f({currentTarget:s.target},s.pointerType)},[o]),{hoverProps:d,isHovered:l}}const Dn=a.createContext({}),Gr=Ht(function(e,n){[e,n]=Ce(e,n,Dn);let r=e,{isPending:o}=r,{buttonProps:l,isPressed:i}=uf(e,n);l=pf(l,o);let{focusProps:s,isFocused:u,isFocusVisible:c}=kn(e),{hoverProps:d,isHovered:f}=Gt({...e,isDisabled:e.isDisabled||o}),b={isHovered:f,isPressed:(r.isPressed||i)&&!o,isFocused:u,isFocusVisible:c,isDisabled:e.isDisabled||!1,isPending:o??!1},p=Ee({...e,values:b,defaultClassName:"react-aria-Button"}),m=ve(l.id),v=ve(),g=l["aria-labelledby"];o&&(g?g=`${g} ${v}`:l["aria-label"]&&(g=`${m} ${v}`));let x=a.useRef(o);a.useEffect(()=>{let D={"aria-labelledby":g||m};(!x.current&&u&&o||x.current&&u&&!o)&&Lt(D,"assertive"),x.current=o},[o,u,g,m]);let $=pe(e,{global:!0});return delete $.onClick,y.createElement(fe.button,{...J($,p,l,s,d),type:l.type==="submit"&&o?"button":l.type,id:m,ref:n,"aria-labelledby":g,slot:e.slot||void 0,"aria-disabled":o?"true":l["aria-disabled"],"data-disabled":e.isDisabled||void 0,"data-pressed":b.isPressed||void 0,"data-hovered":f||void 0,"data-focused":u||void 0,"data-pending":o||void 0,"data-focus-visible":c||void 0},y.createElement(Ud.Provider,{value:{id:v}},p.children))}),ff=/Focus|Blur|Hover|Pointer(Enter|Leave|Over|Out)|Mouse(Enter|Leave|Over|Out)/;function pf(t,e){if(e){for(const n in t)n.startsWith("on")&&!ff.test(n)&&(t[n]=void 0);t.href=void 0,t.target=void 0}return t}const bf=typeof document<"u"?y.useInsertionEffect??y.useLayoutEffect:()=>{};function $n(t,e,n){let[r,o]=a.useState(t||e),l=a.useRef(r),i=a.useRef(t!==void 0),s=t!==void 0;a.useEffect(()=>{i.current,i.current=s},[s]);let u=s?t:r;bf(()=>{l.current=u});let[,c]=a.useReducer(()=>({}),{}),d=a.useCallback((f,...b)=>{let p=typeof f=="function"?f(l.current):f;Object.is(l.current,p)||(l.current=p,o(p),c(),n==null||n(p,...b))},[n]);return[u,d]}const Mi=a.createContext({}),hf=a.forwardRef(function(e,n){[e,n]=Ce(e,n,Mi);let{children:r,level:o=3,className:l,...i}=e,s=fe[`h${o}`];return y.createElement(s,{...i,ref:n,className:l??"react-aria-Heading"},r)}),Ai=t=>t?"true":void 0;function Te(t,e){return Bd(t,(n,r)=>{const o=typeof e=="function"?e(r)??"":e??"";return Bt(o,n??"")??""})}const he=(t,e,n)=>typeof t=="function"?t({className:e}):e,mf=t=>A.jsx("svg",{"aria-hidden":"true","aria-label":"Chevron down icon",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...t,children:A.jsx("path",{clipRule:"evenodd",d:"M2.97 5.47a.75.75 0 0 1 1.06 0L8 9.44l3.97-3.97a.75.75 0 1 1 1.06 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0l-4.5-4.5a.75.75 0 0 1 0-1.06",fill:"currentColor",fillRule:"evenodd"})}),gf=({height:t=9,width:e=9,...n})=>A.jsx("svg",{"aria-hidden":"true","aria-label":"External link icon",fill:"none",height:t,role:"presentation",viewBox:"0 0 7 7",width:e,xmlns:"http://www.w3.org/2000/svg",...n,children:A.jsx("path",{d:"M1.20592 6.84333L0.379822 6.01723L4.52594 1.8672H1.37819L1.38601 0.731812H6.48742V5.83714H5.34421L5.35203 2.6933L1.20592 6.84333Z",fill:"currentColor"})}),$f=t=>A.jsx("svg",{"aria-hidden":"true","aria-label":"Close icon",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...t,children:A.jsx("path",{clipRule:"evenodd",d:"M3.47 3.47a.75.75 0 0 1 1.06 0L8 6.94l3.47-3.47a.75.75 0 1 1 1.06 1.06L9.06 8l3.47 3.47a.75.75 0 1 1-1.06 1.06L8 9.06l-3.47 3.47a.75.75 0 0 1-1.06-1.06L6.94 8 3.47 4.53a.75.75 0 0 1 0-1.06Z",fill:"currentColor",fillRule:"evenodd"})}),_o=t=>A.jsx("svg",{"aria-hidden":"true","aria-label":"Info icon",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...t,children:A.jsx("path",{clipRule:"evenodd",d:"M8 13.5a5.5 5.5 0 1 0 0-11a5.5 5.5 0 0 0 0 11M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14m1-9.5a1 1 0 1 1-2 0a1 1 0 0 1 2 0m-.25 3a.75.75 0 0 0-1.5 0V11a.75.75 0 0 0 1.5 0z",fill:"currentColor",fillRule:"evenodd"})}),yf=t=>A.jsx("svg",{"aria-hidden":"true","aria-label":"Warning icon",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...t,children:A.jsx("path",{clipRule:"evenodd",d:"M7.134 2.994L2.217 11.5a1 1 0 0 0 .866 1.5h9.834a1 1 0 0 0 .866-1.5L8.866 2.993a1 1 0 0 0-1.732 0m3.03-.75c-.962-1.665-3.366-1.665-4.329 0L.918 10.749c-.963 1.666.24 3.751 2.165 3.751h9.834c1.925 0 3.128-2.085 2.164-3.751zM8 5a.75.75 0 0 1 .75.75v2a.75.75 0 0 1-1.5 0v-2A.75.75 0 0 1 8 5m1 5.75a1 1 0 1 1-2 0a1 1 0 0 1 2 0",fill:"currentColor",fillRule:"evenodd"})}),jo=t=>A.jsx("svg",{"aria-hidden":"true","aria-label":"Danger icon",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...t,children:A.jsx("path",{clipRule:"evenodd",d:"M8 13.5a5.5 5.5 0 1 0 0-11a5.5 5.5 0 0 0 0 11M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14m1-4.5a1 1 0 1 1-2 0a1 1 0 0 1 2 0M8.75 5a.75.75 0 0 0-1.5 0v2.5a.75.75 0 0 0 1.5 0z",fill:"currentColor",fillRule:"evenodd"})}),vf=t=>A.jsx("svg",{"aria-hidden":"true","aria-label":"Success icon",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...t,children:A.jsx("path",{clipRule:"evenodd",d:"M13.5 8a5.5 5.5 0 1 1-11 0a5.5 5.5 0 0 1 11 0M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0m-3.9-1.55a.75.75 0 1 0-1.2-.9L7.419 8.858L6.03 7.47a.75.75 0 0 0-1.06 1.06l2 2a.75.75 0 0 0 1.13-.08z",fill:"currentColor",fillRule:"evenodd"})}),Li=a.createContext({}),xf=a.createContext({placement:"bottom"}),Cf=typeof HTMLElement<"u"&&"inert"in HTMLElement.prototype;function zo(t){return t.dataset.liveAnnouncer==="true"||t.dataset.reactAriaTopLayer!==void 0}let Et=new WeakMap,$e=[];function Ur(t,e){let n=xe(t==null?void 0:t[0]),r=e instanceof n.Element?{root:e}:e,o=(r==null?void 0:r.root)??document.body,l=(r==null?void 0:r.shouldUseInert)&&Cf,i=new Set(t),s=new Set,u=g=>l&&g instanceof n.HTMLElement?g.inert:g.getAttribute("aria-hidden")==="true",c=(g,x)=>{l&&g instanceof n.HTMLElement?g.inert=x:x?g.setAttribute("aria-hidden","true"):(g.removeAttribute("aria-hidden"),g instanceof n.HTMLElement&&(g.inert=!1))},d=new Set;if(Ne())for(let g of t){let x=g;for(;x&&x!==o;){let $=x.getRootNode();"shadowRoot"in $&&d.add($.shadowRoot),x=$.parentNode}}let f=g=>{for(let P of g.querySelectorAll("[data-live-announcer], [data-react-aria-top-layer]"))i.add(P);let x=P=>{if(s.has(P)||i.has(P)||P.parentElement&&s.has(P.parentElement)&&P.parentElement.getAttribute("role")!=="row")return NodeFilter.FILTER_REJECT;for(let F of i)if(te(P,F))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_ACCEPT},$=Gl(ee(g),g,NodeFilter.SHOW_ELEMENT,{acceptNode:x}),D=x(g);if(D===NodeFilter.FILTER_ACCEPT&&b(g),D!==NodeFilter.FILTER_REJECT){let P=$.nextNode();for(;P!=null;)b(P),P=$.nextNode()}},b=g=>{let x=Et.get(g)??0;u(g)&&x===0||(x===0&&c(g,!0),s.add(g),Et.set(g,x+1))};$e.length&&$e[$e.length-1].disconnect(),f(o);let p=new MutationObserver(g=>{for(let x of g)if(x.type==="childList"){if(x.target.isConnected&&![...i,...s].some($=>te($,x.target)))for(let $ of x.addedNodes)($ instanceof HTMLElement||$ instanceof SVGElement)&&zo($)?i.add($):$ instanceof Element&&f($);if(Ne()){for(let $ of d)if(!$.isConnected){p.disconnect();break}}}});p.observe(o,{childList:!0,subtree:!0});let m=new Set;if(Ne())for(let g of d){let x=new MutationObserver($=>{for(let D of $)if(D.type==="childList"){if(D.target.isConnected&&![...i,...s].some(P=>te(P,D.target)))for(let P of D.addedNodes)(P instanceof HTMLElement||P instanceof SVGElement)&&zo(P)?i.add(P):P instanceof Element&&f(P);if(Ne()){for(let P of d)if(!P.isConnected){p.disconnect();break}}}});x.observe(g,{childList:!0,subtree:!0}),m.add(x)}let v={visibleNodes:i,hiddenNodes:s,observe(){p.observe(o,{childList:!0,subtree:!0})},disconnect(){p.disconnect()}};return $e.push(v),()=>{if(p.disconnect(),Ne())for(let g of m)g.disconnect();for(let g of s){let x=Et.get(g);x!=null&&(x===1?(c(g,!1),Et.delete(g)):Et.set(g,x-1))}v===$e[$e.length-1]?($e.pop(),$e.length&&$e[$e.length-1].observe()):$e.splice($e.indexOf(v),1)}}function Ef(t){let e=$e[$e.length-1];if(e&&!e.visibleNodes.has(t))return e.visibleNodes.add(t),()=>{e.visibleNodes.delete(t)}}const ke={top:"top",bottom:"top",left:"left",right:"left"},yn={top:"bottom",bottom:"top",left:"right",right:"left"},wf={top:"left",left:"top"},gr={top:"height",left:"width"},Ki={width:"totalWidth",height:"totalHeight"},rn={};let Sf=()=>typeof document<"u"?window.visualViewport:null;function Ho(t,e){let n=0,r=0,o=0,l=0,i=0,s=0,u={},c=((e==null?void 0:e.scale)??1)>1;if(t.tagName==="BODY"||t.tagName==="HTML"){let d=document.documentElement;o=d.clientWidth,l=d.clientHeight,n=(e==null?void 0:e.width)??o,r=(e==null?void 0:e.height)??l,u.top=d.scrollTop||t.scrollTop,u.left=d.scrollLeft||t.scrollLeft,e&&(i=e.offsetTop,s=e.offsetLeft)}else({width:n,height:r,top:i,left:s}=_t(t,!1)),u.top=t.scrollTop,u.left=t.scrollLeft,o=n,l=r;return _l()&&(t.tagName==="BODY"||t.tagName==="HTML")&&c&&(u.top=0,u.left=0,i=(e==null?void 0:e.pageTop)??0,s=(e==null?void 0:e.pageLeft)??0),{width:n,height:r,totalWidth:o,totalHeight:l,scroll:u,top:i,left:s}}function Pf(t){return{top:t.scrollTop,left:t.scrollLeft,width:t.scrollWidth,height:t.scrollHeight}}function Wo(t,e,n,r,o,l,i){let s=o.scroll[t]??0,u=r[gr[t]],c=i[t]+r.scroll[ke[t]]+l,d=i[t]+r.scroll[ke[t]]+u-l,f=e-s+r.scroll[ke[t]]+i[t]-r[ke[t]],b=e-s+n+r.scroll[ke[t]]+i[t]-r[ke[t]];return fd?Math.max(d-b,c-f):0}function Tf(t){let e=window.getComputedStyle(t);return{top:parseInt(e.marginTop,10)||0,bottom:parseInt(e.marginBottom,10)||0,left:parseInt(e.marginLeft,10)||0,right:parseInt(e.marginRight,10)||0}}function Go(t){if(rn[t])return rn[t];let[e,n]=t.split(" "),r=ke[e]||"right",o=wf[r];ke[n]||(n="center");let l=gr[r],i=gr[o];return rn[t]={placement:e,crossPlacement:n,axis:r,crossAxis:o,size:l,crossSize:i},rn[t]}function Un(t,e,n,r,o,l,i,s,u,c,d){let{placement:f,crossPlacement:b,axis:p,crossAxis:m,size:v,crossSize:g}=r,x={};x[m]=t[m]??0,b==="center"?x[m]+=((t[g]??0)-(n[g]??0))/2:b!==m&&(x[m]+=(t[g]??0)-(n[g]??0)),x[m]+=l;const $=t[m]-n[g]+u+c,D=t[m]+t[g]-u-c;if(x[m]=cr(x[m],$,D),f===p){let P=s?d[v]:d[Ki[v]];x[yn[p]]=Math.floor(P-t[p]+o)}else x[p]=Math.floor(t[p]+t[v]+o);return x}function kf(t,e,n,r,o,l,i,s,u,c,d){let f=(t.top!=null?t.top:u[Ki.height]-(t.bottom??0)-i)-(u.scroll.top??0),b=c?n.top:0,p={top:Math.max(e.top+b,((d==null?void 0:d.offsetTop)??e.top)+b),bottom:Math.min(e.top+e.height+b,((d==null?void 0:d.offsetTop)??0)+((d==null?void 0:d.height)??0))};return s!=="top"?Math.max(0,p.bottom-f-((o.top??0)+(o.bottom??0)+l)):Math.max(0,f+i-p.top-((o.top??0)+(o.bottom??0)+l))}function Uo(t,e,n,r,o,l,i,s){let{placement:u,axis:c,size:d}=l;return u===c?Math.max(0,n[c]-(i.scroll[c]??0)-(t[c]+(s?e[c]:0))-(r[c]??0)-r[yn[c]]-o):Math.max(0,t[d]+t[c]+(s?e[c]:0)-n[c]-n[d]+(i.scroll[c]??0)-(r[c]??0)-r[yn[c]]-o)}function Df(t,e,n,r,o,l,i,s,u,c,d,f,b,p,m,v,g,x){let $=Go(t),{size:D,crossAxis:P,crossSize:F,placement:R,crossPlacement:I}=$,k=Un(e,s,n,$,d,f,c,b,m,v,u),B=d,K=Uo(s,c,e,o,l+d,$,u,g);if(i&&n[D]>K){let Q=Go(`${yn[R]} ${I}`),le=Un(e,s,n,Q,d,f,c,b,m,v,u);Uo(s,c,e,o,l+d,Q,u,g)>K&&($=Q,k=le,B=d)}let _="bottom";$.axis==="top"?$.placement==="top"?_="top":$.placement==="bottom"&&(_="bottom"):$.crossAxis==="top"&&($.crossPlacement==="top"?_="bottom":$.crossPlacement==="bottom"&&(_="top"));let U=Wo(P,k[P],n[F],s,u,l,c);k[P]+=U;let z=kf(k,s,c,b,o,l,n.height,_,u,g,x);p&&p{if(!n||r===null)return;let o=l=>{let i=j(l);if(!e.current||i instanceof Node&&!te(i,e.current)||i instanceof HTMLInputElement||i instanceof HTMLTextAreaElement)return;let s=r||Ri.get(e.current);s&&s()};return window.addEventListener("scroll",o,!0),()=>{window.removeEventListener("scroll",o,!0)}},[n,r,e])}let ae=typeof document<"u"?window.visualViewport:null;function Kf(t){let{direction:e}=$t(),{arrowSize:n,targetRef:r,overlayRef:o,arrowRef:l,scrollRef:i=o,placement:s="bottom",containerPadding:u=12,shouldFlip:c=!0,boundaryElement:d=typeof document<"u"?document.body:null,offset:f=0,crossOffset:b=0,shouldUpdatePosition:p=!0,isOpen:m=!0,onClose:v,maxHeight:g,arrowBoundaryOffset:x=0}=t,[$,D]=a.useState(null),P=[p,s,o.current,r.current,l==null?void 0:l.current,i.current,u,c,d,f,b,m,e,g,x,n],F=a.useRef(ae==null?void 0:ae.scale);a.useEffect(()=>{m&&(F.current=ae==null?void 0:ae.scale)},[m]);let R=a.useCallback(()=>{var z,h;if(p===!1||!m||!o.current||!r.current||!d||(ae==null?void 0:ae.scale)!==F.current)return;let B=null;if(i.current&&It(i.current)){let C=(z=re())==null?void 0:z.getBoundingClientRect(),M=i.current.getBoundingClientRect();B={type:"top",offset:((C==null?void 0:C.top)??0)-M.top},B.offset>M.height/2&&(B.type="bottom",B.offset=((C==null?void 0:C.bottom)??0)-M.bottom)}let K=o.current;!g&&o.current&&(K.style.top="0px",K.style.bottom="",K.style.maxHeight=(((h=window.visualViewport)==null?void 0:h.height)??window.innerHeight)+"px");let _=Mf({placement:Ff(s,e),overlayNode:o.current,targetNode:r.current,scrollNode:i.current||o.current,padding:u,shouldFlip:c,boundaryElement:d,offset:f,crossOffset:b,maxHeight:g,arrowSize:n??(l!=null&&l.current?Mn(l.current,!0).width:0),arrowBoundaryOffset:x});if(!_.position)return;K.style.top="",K.style.bottom="",K.style.left="",K.style.right="",Object.keys(_.position).forEach(C=>K.style[C]=_.position[C]+"px"),K.style.maxHeight=_.maxHeight!=null?_.maxHeight+"px":"";let U=re();if(B&&U&&i.current){let C=U.getBoundingClientRect(),M=i.current.getBoundingClientRect(),E=C[B.type]-M[B.type];i.current.scrollTop+=E-B.offset}D(_)},P);ne(R,P),Rf(R),fn({ref:o,onResize:R}),fn({ref:r,onResize:R});let I=a.useRef(!1);ne(()=>{let B,K=()=>{I.current=!0,clearTimeout(B),B=setTimeout(()=>{I.current=!1},500),R()},_=()=>{I.current&&K()};return ae==null||ae.addEventListener("resize",K),ae==null||ae.addEventListener("scroll",_),()=>{ae==null||ae.removeEventListener("resize",K),ae==null||ae.removeEventListener("scroll",_)}},[R]);let k=a.useCallback(()=>{I.current||v==null||v()},[v,I]);return Lf({triggerRef:r,isOpen:m,onClose:v&&k}),{overlayProps:{style:{position:$?"absolute":"fixed",top:$?void 0:0,left:$?void 0:0,zIndex:1e5,...$==null?void 0:$.position,maxHeight:($==null?void 0:$.maxHeight)??"100vh"}},placement:($==null?void 0:$.placement)??null,triggerAnchorPoint:($==null?void 0:$.triggerAnchorPoint)??null,arrowProps:{"aria-hidden":"true",role:"presentation",style:{left:$==null?void 0:$.arrowOffsetLeft,top:$==null?void 0:$.arrowOffsetTop}},updatePosition:R}}function Rf(t){ne(()=>(window.addEventListener("resize",t,!1),()=>{window.removeEventListener("resize",t,!1)}),[t])}function Ff(t,e){return e==="rtl"?t.replace("start","right").replace("end","left"):t.replace("start","left").replace("end","right")}const Xo=y.createContext(null),$r="react-aria-focus-scope-restore";let ie=null;function Fi(t){let{children:e,contain:n,restoreFocus:r,autoFocus:o}=t,l=a.useRef(null),i=a.useRef(null),s=a.useRef([]),{parentNode:u}=a.useContext(Xo)||{},c=a.useMemo(()=>new vr({scopeRef:s}),[s]);ne(()=>{let b=u||ce.root;if(ce.getTreeNode(b.scopeRef)&&ie&&!vn(ie,b.scopeRef)){let p=ce.getTreeNode(ie);p&&(b=p)}b.addChild(c),ce.addNode(c)},[c,u]),ne(()=>{let b=ce.getTreeNode(s);b&&(b.contain=!!n)},[n]),ne(()=>{var v;let b=(v=l.current)==null?void 0:v.nextSibling,p=[],m=g=>g.stopPropagation();for(;b&&b!==i.current;)p.push(b),b.addEventListener($r,m),b=b.nextSibling;return s.current=p,()=>{for(let g of p)g.removeEventListener($r,m)}},[e]),jf(s,r,n),Of(s,n),zf(s,r,n),_f(s,o),a.useEffect(()=>{const b=re(ee(s.current?s.current[0]:void 0));let p=null;if(De(b,s.current)){for(let m of ce.traverse())m.scopeRef&&De(b,m.scopeRef.current)&&(p=m);p===ce.getTreeNode(s)&&(ie=p.scopeRef)}},[s]),ne(()=>()=>{var p,m;let b=((m=(p=ce.getTreeNode(s))==null?void 0:p.parent)==null?void 0:m.scopeRef)??null;(s===ie||vn(s,ie))&&(!b||ce.getTreeNode(b))&&(ie=b),ce.removeTreeNode(s)},[s]);let d=a.useMemo(()=>If(s),[]),f=a.useMemo(()=>({focusManager:d,parentNode:c}),[c,d]);return y.createElement(Xo.Provider,{value:f},y.createElement("span",{"data-focus-scope-start":!0,hidden:!0,ref:l}),e,y.createElement("span",{"data-focus-scope-end":!0,hidden:!0,ref:i}))}function If(t){return{focusNext(e={}){let n=t.current,{from:r,tabbable:o,wrap:l,accept:i}=e,s=r||re(ee(n[0]??void 0)),u=n[0].previousElementSibling,c=Ye(n),d=Ve(c,{tabbable:o,accept:i},n);d.currentNode=De(s,n)?s:u;let f=d.nextNode();return!f&&l&&(d.currentNode=u,f=d.nextNode()),f&&Oe(f,!0),f},focusPrevious(e={}){let n=t.current,{from:r,tabbable:o,wrap:l,accept:i}=e,s=r||re(ee(n[0]??void 0)),u=n[n.length-1].nextElementSibling,c=Ye(n),d=Ve(c,{tabbable:o,accept:i},n);d.currentNode=De(s,n)?s:u;let f=d.previousNode();return!f&&l&&(d.currentNode=u,f=d.previousNode()),f&&Oe(f,!0),f},focusFirst(e={}){let n=t.current,{tabbable:r,accept:o}=e,l=Ye(n),i=Ve(l,{tabbable:r,accept:o},n);i.currentNode=n[0].previousElementSibling;let s=i.nextNode();return s&&Oe(s,!0),s},focusLast(e={}){let n=t.current,{tabbable:r,accept:o}=e,l=Ye(n),i=Ve(l,{tabbable:r,accept:o},n);i.currentNode=n[n.length-1].nextElementSibling;let s=i.previousNode();return s&&Oe(s,!0),s}}}function Ye(t){return t[0].parentElement}function Mt(t){let e=ce.getTreeNode(ie);for(;e&&e.scopeRef!==t;){if(e.contain)return!1;e=e.parent}return!0}function Bf(t){if(!t.form)return Array.from(ee(t).querySelectorAll(`input[type="radio"][name="${CSS.escape(t.name)}"]`)).filter(r=>!r.form);const e=t.form.elements.namedItem(t.name);let n=xe(t);return e instanceof n.RadioNodeList?Array.from(e).filter(r=>r instanceof n.HTMLInputElement):e instanceof n.HTMLInputElement?[e]:[]}function Nf(t){if(t.checked)return!0;const e=Bf(t);return e.length>0&&!e.some(n=>n.checked)}function Of(t,e){let n=a.useRef(void 0),r=a.useRef(void 0);ne(()=>{let o=t.current;if(!e){r.current&&(cancelAnimationFrame(r.current),r.current=void 0);return}const l=ee(o?o[0]:void 0);let i=c=>{if(c.key!=="Tab"||c.altKey||c.ctrlKey||c.metaKey||!Mt(t)||c.isComposing)return;let d=re(l),f=t.current;if(!f||!De(d,f))return;let b=Ye(f),p=Ve(b,{tabbable:!0},f);if(!d)return;p.currentNode=d;let m=c.shiftKey?p.previousNode():p.nextNode();m||(p.currentNode=c.shiftKey?f[f.length-1].nextElementSibling:f[0].previousElementSibling,m=c.shiftKey?p.previousNode():p.nextNode()),c.preventDefault(),m&&(Oe(m,!0),m instanceof xe(m).HTMLInputElement&&m.select())},s=c=>{(!ie||vn(ie,t))&&De(j(c),t.current)?(ie=t,n.current=j(c)):Mt(t)&&!We(j(c),t)?n.current?n.current.focus():ie&&ie.current&&yr(ie.current):Mt(t)&&(n.current=j(c))},u=c=>{r.current&&cancelAnimationFrame(r.current),r.current=requestAnimationFrame(()=>{var p;let d=Ot(),f=(d==="virtual"||d===null)&&Rr()&&jl(),b=re(l);if(!f&&b&&Mt(t)&&!We(b,t)){ie=t;let m=j(c);m&&m.isConnected?(n.current=m,(p=n.current)==null||p.focus()):ie.current&&yr(ie.current)}})};return l.addEventListener("keydown",i,!1),l.addEventListener("focusin",s,!1),o==null||o.forEach(c=>c.addEventListener("focusin",s,!1)),o==null||o.forEach(c=>c.addEventListener("focusout",u,!1)),()=>{l.removeEventListener("keydown",i,!1),l.removeEventListener("focusin",s,!1),o==null||o.forEach(c=>c.removeEventListener("focusin",s,!1)),o==null||o.forEach(c=>c.removeEventListener("focusout",u,!1))}},[t,e]),ne(()=>()=>{r.current&&cancelAnimationFrame(r.current)},[r])}function Ii(t){return We(t)}function De(t,e){return!t||!e?!1:e.some(n=>te(n,t))}function We(t,e=null){if(t instanceof Element&&t.closest("[data-react-aria-top-layer]"))return!0;for(let{scopeRef:n}of ce.traverse(ce.getTreeNode(e)))if(n&&De(t,n.current))return!0;return!1}function Vf(t){return We(t,ie)}function vn(t,e){var r;let n=(r=ce.getTreeNode(e))==null?void 0:r.parent;for(;n;){if(n.scopeRef===t)return!0;n=n.parent}return!1}function Oe(t,e=!1){if(t!=null&&!e)try{Ge(t)}catch{}else if(t!=null)try{t.focus()}catch{}}function Bi(t,e=!0){let n=t[0].previousElementSibling,r=Ye(t),o=Ve(r,{tabbable:e},t);o.currentNode=n;let l=o.nextNode();return e&&!l&&(r=Ye(t),o=Ve(r,{tabbable:!1},t),o.currentNode=n,l=o.nextNode()),l}function yr(t,e=!0){Oe(Bi(t,e))}function _f(t,e){const n=y.useRef(e);a.useEffect(()=>{if(n.current){ie=t;const r=ee(t.current?t.current[0]:void 0);!De(re(r),ie.current)&&t.current&&yr(t.current)}n.current=!1},[t])}function jf(t,e,n){ne(()=>{if(e||n)return;let r=t.current;const o=ee(r?r[0]:void 0);let l=i=>{let s=j(i);De(s,t.current)?ie=t:Ii(s)||(ie=null)};return o.addEventListener("focusin",l,!1),r==null||r.forEach(i=>i.addEventListener("focusin",l,!1)),()=>{o.removeEventListener("focusin",l,!1),r==null||r.forEach(i=>i.removeEventListener("focusin",l,!1))}},[t,e,n])}function Zo(t){let e=ce.getTreeNode(ie);for(;e&&e.scopeRef!==t;){if(e.nodeToRestore)return!1;e=e.parent}return(e==null?void 0:e.scopeRef)===t}function zf(t,e,n){const r=a.useRef(typeof document<"u"?re(ee(t.current?t.current[0]:void 0)):null);ne(()=>{let o=t.current;const l=ee(o?o[0]:void 0);if(!e||n)return;let i=()=>{(!ie||vn(ie,t))&&De(re(l),t.current)&&(ie=t)};return l.addEventListener("focusin",i,!1),o==null||o.forEach(s=>s.addEventListener("focusin",i,!1)),()=>{l.removeEventListener("focusin",i,!1),o==null||o.forEach(s=>s.removeEventListener("focusin",i,!1))}},[t,n]),ne(()=>{const o=ee(t.current?t.current[0]:void 0);if(!e)return;let l=i=>{if(i.key!=="Tab"||i.altKey||i.ctrlKey||i.metaKey||!Mt(t)||i.isComposing)return;let s=o.activeElement;if(!We(s,t)||!Zo(t))return;let u=ce.getTreeNode(t);if(!u)return;let c=u.nodeToRestore,d=Ve(o.body,{tabbable:!0});d.currentNode=s;let f=i.shiftKey?d.previousNode():d.nextNode();if((!c||!c.isConnected||c===o.body)&&(c=void 0,u.nodeToRestore=void 0),(!f||!We(f,t))&&c){d.currentNode=c;do f=i.shiftKey?d.previousNode():d.nextNode();while(We(f,t));i.preventDefault(),i.stopPropagation(),f?Oe(f,!0):Ii(c)?Oe(c,!0):s.blur()}};return n||o.addEventListener("keydown",l,!0),()=>{n||o.removeEventListener("keydown",l,!0)}},[t,e,n]),ne(()=>{const o=ee(t.current?t.current[0]:void 0);if(!e)return;let l=ce.getTreeNode(t);if(l)return l.nodeToRestore=r.current??void 0,()=>{let i=ce.getTreeNode(t);if(!i)return;let s=i.nodeToRestore,u=re(o);if(e&&s&&(u&&We(u,t)||u===o.body&&Zo(t))){let c=ce.clone();requestAnimationFrame(()=>{if(o.activeElement===o.body){let d=c.getTreeNode(t);for(;d;){if(d.nodeToRestore&&d.nodeToRestore.isConnected){Jo(d.nodeToRestore);return}d=d.parent}for(d=c.getTreeNode(t);d;){if(d.scopeRef&&d.scopeRef.current&&ce.getTreeNode(d.scopeRef)){let f=Bi(d.scopeRef.current,!0);Jo(f);return}d=d.parent}}})}}},[t,e])}function Jo(t){t.dispatchEvent(new CustomEvent($r,{bubbles:!0,cancelable:!0}))&&Oe(t)}function Ve(t,e,n){let r=e!=null&&e.tabbable?Ql:Jl,o=(t==null?void 0:t.nodeType)===Node.ELEMENT_NODE?t:null,l=ee(o),i=Gl(l,t||l,NodeFilter.SHOW_ELEMENT,{acceptNode(s){return te(e==null?void 0:e.from,s)||e!=null&&e.tabbable&&s.tagName==="INPUT"&&s.getAttribute("type")==="radio"&&(!Nf(s)||i.currentNode.tagName==="INPUT"&&i.currentNode.type==="radio"&&i.currentNode.name===s.name)?NodeFilter.FILTER_REJECT:r(s)&&(!n||De(s,n))&&(!(e!=null&&e.accept)||e.accept(s))?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});return e!=null&&e.from&&(i.currentNode=e.from),i}class qr{constructor(){this.fastMap=new Map,this.root=new vr({scopeRef:null}),this.fastMap.set(null,this.root)}get size(){return this.fastMap.size}getTreeNode(e){return this.fastMap.get(e)}addTreeNode(e,n,r){let o=this.fastMap.get(n??null);if(!o)return;let l=new vr({scopeRef:e});o.addChild(l),l.parent=o,this.fastMap.set(e,l),r&&(l.nodeToRestore=r)}addNode(e){this.fastMap.set(e.scopeRef,e)}removeTreeNode(e){if(e===null)return;let n=this.fastMap.get(e);if(!n)return;let r=n.parent;for(let l of this.traverse())l!==n&&n.nodeToRestore&&l.nodeToRestore&&n.scopeRef&&n.scopeRef.current&&De(l.nodeToRestore,n.scopeRef.current)&&(l.nodeToRestore=n.nodeToRestore);let o=n.children;r&&(r.removeChild(n),o.size>0&&o.forEach(l=>r&&r.addChild(l))),this.fastMap.delete(n.scopeRef)}*traverse(e=this.root){if(e.scopeRef!=null&&(yield e),e.children.size>0)for(let n of e.children)yield*this.traverse(n)}clone(){var n;let e=new qr;for(let r of this.traverse())e.addTreeNode(r.scopeRef,((n=r.parent)==null?void 0:n.scopeRef)??null,r.nodeToRestore);return e}}class vr{constructor(e){this.children=new Set,this.contain=!1,this.scopeRef=e.scopeRef}addChild(e){this.children.add(e),e.parent=this}removeChild(e){this.children.delete(e),e.parent=void 0}}let ce=new qr;function Hf(t){let{ref:e,onInteractOutside:n,isDisabled:r,onInteractOutsideStart:o}=t,l=a.useRef({isPointerDown:!1,ignoreEmulatedMouseEvents:!1}),i=Pe(u=>{n&&Qo(u,e)&&(o&&o(u),l.current.isPointerDown=!0)}),s=Pe(u=>{n&&n(u)});a.useEffect(()=>{let u=l.current;if(r)return;const c=e.current,d=ee(c);if(typeof PointerEvent<"u"){let f=b=>{u.isPointerDown&&Qo(b,e)&&s(b),u.isPointerDown=!1};return d.addEventListener("pointerdown",i,!0),d.addEventListener("click",f,!0),()=>{d.removeEventListener("pointerdown",i,!0),d.removeEventListener("click",f,!0)}}},[e,r])}function Qo(t,e){if(t.button>0)return!1;let n=j(t);if(n){const r=n.ownerDocument;if(!r||!te(r.documentElement,n)||n.closest("[data-react-aria-top-layer]"))return!1}return e.current?!t.composedPath().includes(e.current):!1}const Fe=[];function Ni(t,e){let{onClose:n,shouldCloseOnBlur:r,isOpen:o,isDismissable:l=!1,isKeyboardDismissDisabled:i=!1,shouldCloseOnInteractOutside:s}=t,u=a.useRef(void 0);a.useEffect(()=>{if(o&&!Fe.includes(e))return Fe.push(e),()=>{let m=Fe.indexOf(e);m>=0&&Fe.splice(m,1)}},[o,e]);let c=()=>{Fe[Fe.length-1]===e&&n&&n()},d=m=>{const v=Fe[Fe.length-1];u.current=v,(!s||s(j(m)))&&v===e&&m.stopPropagation()},f=m=>{(!s||s(j(m)))&&(Fe[Fe.length-1]===e&&m.stopPropagation(),u.current===e&&c()),u.current=void 0},b=m=>{m.key==="Escape"&&!i&&!m.nativeEvent.isComposing&&(m.stopPropagation(),m.preventDefault(),c())};Hf({ref:e,onInteractOutside:l&&o?f:void 0,onInteractOutsideStart:d});let{focusWithinProps:p}=Tn({isDisabled:!r,onBlurWithin:m=>{!m.relatedTarget||Vf(m.relatedTarget)||(!s||s(m.relatedTarget))&&(n==null||n())}});return{overlayProps:{onKeyDown:b,...p},underlayProps:{}}}const Rt=typeof document<"u"&&window.visualViewport;let on=0,qn;function Oi(t={}){let{isDisabled:e}=t;ne(()=>{if(!e)return on++,on===1&&(Ze()?qn=Gf():qn=Wf()),()=>{on--,on===0&&qn()}},[e])}function Wf(){let t=window.innerWidth-document.documentElement.clientWidth;return tt(t>0&&("scrollbarGutter"in document.documentElement.style?un(document.documentElement,"scrollbarGutter","stable"):un(document.documentElement,"paddingRight",`${t}px`)),un(document.documentElement,"overflow","hidden"))}function Gf(){let t=un(document.documentElement,"overflow","hidden"),e,n=!1,r=d=>{let f=j(d);e=Je(f)?f:Ir(f,!0),n=!1;let b=f.ownerDocument.defaultView.getSelection();b&&!b.isCollapsed&&b.containsNode(f,!0)&&(n=!0),d.composedPath().some(p=>p instanceof HTMLInputElement&&p.type==="range")&&(n=!0),"selectionStart"in f&&"selectionEnd"in f&&f.selectionStart{if(!(d.touches.length===2||n)){if(!e||e===document.documentElement||e===document.body){d.preventDefault();return}e.scrollHeight===e.clientHeight&&e.scrollWidth===e.clientWidth&&d.preventDefault()}},s=d=>{var p;let f=j(d),b=d.relatedTarget;if(b&&At(b))b.focus({preventScroll:!0}),el(b,At(f));else if(!b){let m=(p=f.parentElement)==null?void 0:p.closest("[tabindex]");m==null||m.focus({preventScroll:!0})}},u=HTMLElement.prototype.focus;HTMLElement.prototype.focus=function(d){let f=re(),b=f!=null&&At(f);u.call(this,{...d,preventScroll:!0}),(!d||!d.preventScroll)&&el(this,b)};let c=tt(Yn(document,"touchstart",r,{passive:!1,capture:!0}),Yn(document,"touchmove",i,{passive:!1,capture:!0}),Yn(document,"blur",s,!0));return()=>{t(),c(),o.remove(),HTMLElement.prototype.focus=u}}function un(t,e,n){let r=t.style[e];return t.style[e]=n,()=>{t.style[e]=r}}function Yn(t,e,n,r){return t.addEventListener(e,n,r),()=>{t.removeEventListener(e,n,r)}}function el(t,e){e||!Rt?tl(t):Rt.addEventListener("resize",()=>tl(t),{once:!0})}function tl(t){let e=document.scrollingElement||document.documentElement,n=t;for(;n&&n!==e;){let r=Ir(n);if(r!==document.documentElement&&r!==document.body&&r!==n){let o=r.getBoundingClientRect(),l=n.getBoundingClientRect();if(l.topo.top+n.clientHeight){let i=o.bottom;Rt&&(i=Math.min(i,Rt.offsetTop+Rt.height));let s=l.top-o.top-((i-o.top)/2-l.height/2);r.scrollTo({top:Math.max(0,Math.min(r.scrollHeight-r.clientHeight,r.scrollTop+s)),behavior:"smooth"})}}n=r.parentElement}}function Uf(t,e){let{triggerRef:n,popoverRef:r,groupRef:o,isNonModal:l,isKeyboardDismissDisabled:i,shouldCloseOnInteractOutside:s,...u}=t,c=u.trigger==="SubmenuTrigger",{overlayProps:d,underlayProps:f}=Ni({isOpen:e.isOpen,onClose:e.close,shouldCloseOnBlur:!0,isDismissable:!l||c,isKeyboardDismissDisabled:i,shouldCloseOnInteractOutside:s},o??r),{overlayProps:b,arrowProps:p,placement:m,triggerAnchorPoint:v}=Kf({...u,targetRef:n,overlayRef:r,isOpen:e.isOpen,onClose:l&&!c?e.close:null});return Oi({isDisabled:l||!e.isOpen}),a.useEffect(()=>{if(e.isOpen&&r.current)return l?Ef((o==null?void 0:o.current)??r.current):Ur([(o==null?void 0:o.current)??r.current],{shouldUseInert:!0})},[l,e.isOpen,r,o]),{popoverProps:J(d,b),arrowProps:p,underlayProps:f,placement:m,triggerAnchorPoint:v}}var Vi={};Vi={dismiss:"تجاهل"};var _i={};_i={dismiss:"Отхвърляне"};var ji={};ji={dismiss:"Odstranit"};var zi={};zi={dismiss:"Luk"};var Hi={};Hi={dismiss:"Schließen"};var Wi={};Wi={dismiss:"Απόρριψη"};var Gi={};Gi={dismiss:"Dismiss"};var Ui={};Ui={dismiss:"Descartar"};var qi={};qi={dismiss:"Lõpeta"};var Yi={};Yi={dismiss:"Hylkää"};var Xi={};Xi={dismiss:"Rejeter"};var Zi={};Zi={dismiss:"התעלם"};var Ji={};Ji={dismiss:"Odbaci"};var Qi={};Qi={dismiss:"Elutasítás"};var es={};es={dismiss:"Ignora"};var ts={};ts={dismiss:"閉じる"};var ns={};ns={dismiss:"무시"};var rs={};rs={dismiss:"Atmesti"};var os={};os={dismiss:"Nerādīt"};var ls={};ls={dismiss:"Lukk"};var is={};is={dismiss:"Negeren"};var ss={};ss={dismiss:"Zignoruj"};var as={};as={dismiss:"Descartar"};var us={};us={dismiss:"Dispensar"};var cs={};cs={dismiss:"Revocare"};var ds={};ds={dismiss:"Пропустить"};var fs={};fs={dismiss:"Zrušiť"};var ps={};ps={dismiss:"Opusti"};var bs={};bs={dismiss:"Odbaci"};var hs={};hs={dismiss:"Avvisa"};var ms={};ms={dismiss:"Kapat"};var gs={};gs={dismiss:"Скасувати"};var $s={};$s={dismiss:"取消"};var ys={};ys={dismiss:"關閉"};var vs={};vs={"ar-AE":Vi,"bg-BG":_i,"cs-CZ":ji,"da-DK":zi,"de-DE":Hi,"el-GR":Wi,"en-US":Gi,"es-ES":Ui,"et-EE":qi,"fi-FI":Yi,"fr-FR":Xi,"he-IL":Zi,"hr-HR":Ji,"hu-HU":Qi,"it-IT":es,"ja-JP":ts,"ko-KR":ns,"lt-LT":rs,"lv-LV":os,"nb-NO":ls,"nl-NL":is,"pl-PL":ss,"pt-BR":as,"pt-PT":us,"ro-RO":cs,"ru-RU":ds,"sk-SK":fs,"sl-SI":ps,"sr-SP":bs,"sv-SE":hs,"tr-TR":ms,"uk-UA":gs,"zh-CN":$s,"zh-TW":ys};const qf=Symbol.for("react-aria.i18n.locale"),Yf=Symbol.for("react-aria.i18n.strings");let at;class An{constructor(e,n="en-US"){this.strings=Object.fromEntries(Object.entries(e).filter(([,r])=>r)),this.defaultLocale=n}getStringForLocale(e,n){let o=this.getStringsForLocale(n)[e];if(!o)throw new Error(`Could not find intl message ${e} in ${n} locale`);return o}getStringsForLocale(e){let n=this.strings[e];return n||(n=Xf(e,this.strings,this.defaultLocale),this.strings[e]=n),n}static getGlobalDictionaryForPackage(e){if(typeof window>"u")return null;let n=window[qf];if(at===void 0){let o=window[Yf];if(!o)return null;at={};for(let l in o)at[l]=new An({[n]:o[l]},n)}let r=at==null?void 0:at[e];if(!r)throw new Error(`Strings for package "${e}" were not included by LocalizedStringProvider. Please add it to the list passed to createLocalizedStringDictionary.`);return r}}function Xf(t,e,n="en-US"){if(e[t])return e[t];let r=Zf(t);if(e[r])return e[r];for(let o in e)if(o.startsWith(r+"-"))return e[o];return e[n]}function Zf(t){return Intl.Locale?new Intl.Locale(t).language:t.split("-")[0]}const nl=new Map,rl=new Map;class Jf{constructor(e,n){this.locale=e,this.strings=n}format(e,n){let r=this.strings.getStringForLocale(e,this.locale);return typeof r=="function"?r(n,this):r}plural(e,n,r="cardinal"){let o=n["="+e];if(o)return typeof o=="function"?o():o;let l=this.locale+":"+r,i=nl.get(l);i||(i=new Intl.PluralRules(this.locale,{type:r}),nl.set(l,i));let s=i.select(e);return o=n[s]||n.other,typeof o=="function"?o():o}number(e){let n=rl.get(this.locale);return n||(n=new Intl.NumberFormat(this.locale),rl.set(this.locale,n)),n.format(e)}select(e,n){let r=e[n]||e.other;return typeof r=="function"?r():r}}const ol=new WeakMap;function Qf(t){let e=ol.get(t);return e||(e=new An(t),ol.set(t,e)),e}function ep(t,e){return e&&An.getGlobalDictionaryForPackage(e)||Qf(t)}function Yr(t,e){let{locale:n}=$t(),r=ep(t,e);return a.useMemo(()=>new Jf(n,r),[n,r])}const ll={border:0,clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap"};function tp(t={}){let{style:e,isFocusable:n}=t,[r,o]=a.useState(!1),{focusWithinProps:l}=Tn({isDisabled:!n,onFocusWithinChange:s=>o(s)}),i=a.useMemo(()=>r?e:e?{...ll,...e}:ll,[r]);return{visuallyHiddenProps:{...l,style:i}}}function np(t){let{children:e,elementType:n="div",isFocusable:r,style:o,...l}=t,{visuallyHiddenProps:i}=tp(t);return y.createElement(n,J(l,i),e)}function rp(t){return t&&t.__esModule?t.default:t}function xr(t){let{onDismiss:e,...n}=t,r=Yr(rp(vs),"@react-aria/overlays"),o=dn(n,r.format("dismiss")),l=()=>{e&&e()};return y.createElement(np,null,y.createElement("button",{...o,tabIndex:-1,onClick:l,style:{width:1,height:1}}))}const op=y.forwardRef(({children:t,...e},n)=>{let r=a.useRef(!1),o=a.useContext(Vt),l=J(o||{},{...e,register(){r.current=!0,o&&o.register()}});return l.ref=nt(n||(o==null?void 0:o.ref)),Fr(o,l.ref),a.useEffect(()=>{r.current||(r.current=!0)},[]),y.createElement(Vt.Provider,{value:l},t)});function lp({children:t}){let e=a.useMemo(()=>({register:()=>{}}),[]);return y.createElement(Vt.Provider,{value:e},t)}const ip=a.createContext({});function sp(){return a.useContext(ip)??{}}const xs=y.createContext(null);function Cr(t){let e=et(),{portalContainer:n=e?null:document.body,isExiting:r}=t,[o,l]=a.useState(!1),i=a.useMemo(()=>({contain:o,setContain:l}),[o,l]),{getContainer:s}=sp();if(!t.portalContainer&&s&&(n=s()),!n)return null;let u=t.children;return t.disableFocusManagement||(u=y.createElement(Fi,{restoreFocus:!0,contain:(t.shouldContainFocus||o)&&!r},u)),u=y.createElement(xs.Provider,{value:i},y.createElement(lp,null,u)),Tu.createPortal(u,n)}function Cs(){let t=a.useContext(xs),e=t==null?void 0:t.setContain;ne(()=>{e==null||e(!0)},[e])}function Ln(t){let[e,n]=$n(t.isOpen,t.defaultOpen||!1,t.onOpenChange);const r=a.useCallback(()=>{n(!0)},[n]),o=a.useCallback(()=>{n(!1)},[n]),l=a.useCallback(()=>{n(!e)},[n,e]);return{isOpen:e,setOpen:n,open:r,close:o,toggle:l}}const Xr=a.createContext(null),il=a.createContext(null),ap=a.forwardRef(function(e,n){[e,n]=Ce(e,n,Xr);let r=a.useContext(lt),o=Ln(e),l=e.isOpen!=null||e.defaultOpen!=null||!r?o:r,i=or(n,l.isOpen)||e.isExiting||!1,s=Vd(),{direction:u}=$t();if(s){let c=e.children;return typeof c=="function"&&(c=c({trigger:e.trigger||null,placement:"bottom",isEntering:!1,isExiting:!1,defaultChildren:null})),y.createElement(y.Fragment,null,c)}return l&&!l.isOpen&&!i?null:y.createElement(up,{...e,triggerRef:e.triggerRef,state:l,popoverRef:n,isExiting:i,dir:u})});function up({state:t,isExiting:e,UNSTABLE_portalContainer:n,clearContexts:r,...o}){var K,_;let l=a.useRef(null),i=a.useRef(null),s=a.useContext(il),u=s&&o.trigger==="SubmenuTrigger",{popoverProps:c,underlayProps:d,arrowProps:f,placement:b,triggerAnchorPoint:p}=Uf({...o,offset:o.offset??8,arrowRef:l,groupRef:u?s:i},t),m=o.popoverRef,v=Br(m,!!b)||o.isEntering||!1,g=Ee({...o,defaultClassName:"react-aria-Popover",values:{trigger:o.trigger||null,placement:b,isEntering:v,isExiting:e}}),x=!o.isNonModal||o.trigger==="SubmenuTrigger",[$,D]=a.useState(!1);ne(()=>{m.current&&D(x&&!m.current.querySelector("[role=dialog]"))},[m,x]),a.useEffect(()=>{$&&(o.trigger!=="SubmenuTrigger"||Ot()!=="pointer")&&m.current&&!It(m.current)&&Ge(m.current)},[$,m,o.trigger]);let P=a.useMemo(()=>{let U=g.children;if(r)for(let z of r)U=y.createElement(z.Provider,{value:null},U);return U},[g.children,r]),[F,R]=a.useState(null),I=a.useCallback(()=>{o.triggerRef.current&&R(o.triggerRef.current.getBoundingClientRect().width+"px")},[o.triggerRef]);ne(I,[I]),fn({ref:(K=g.style)!=null&&K["--trigger-width"]?void 0:o.triggerRef,onResize:I});let k={...c.style,"--trigger-anchor-point":p?`${p.x}px ${p.y}px`:void 0,...g.style,"--trigger-width":((_=g.style)==null?void 0:_["--trigger-width"])||F},B=y.createElement(fe.div,{...J(pe(o,{global:!0}),c),...g,role:$?"dialog":void 0,tabIndex:$?-1:void 0,"aria-label":o["aria-label"],"aria-labelledby":o["aria-labelledby"],ref:m,slot:o.slot||void 0,style:k,dir:o.dir,"data-trigger":o.trigger,"data-placement":b,"data-entering":v||void 0,"data-exiting":e||void 0},!o.isNonModal&&y.createElement(xr,{onDismiss:t.close}),y.createElement(xf.Provider,{value:{...f,placement:b,ref:l}},P),y.createElement(xr,{onDismiss:t.close}));return u?y.createElement(Cr,{...o,shouldContainFocus:$,isExiting:e,portalContainer:n??(s==null?void 0:s.current)??void 0},B):y.createElement(Cr,{...o,shouldContainFocus:$,isExiting:e,portalContainer:n},!o.isNonModal&&t.isOpen&&y.createElement("div",{"data-testid":"underlay",...d,style:{position:"fixed",inset:0}}),y.createElement("div",{ref:i,style:{display:"contents"}},y.createElement(il.Provider,{value:i},B)))}class yt{constructor(e){this.value=null,this.level=0,this.hasChildNodes=!1,this.rendered=null,this.textValue="",this["aria-label"]=void 0,this.index=0,this.parentKey=null,this.prevKey=null,this.nextKey=null,this.firstChildKey=null,this.lastChildKey=null,this.props={},this.colSpan=null,this.colIndex=null,this.type=this.constructor.type,this.key=e}get childNodes(){throw new Error("childNodes is not supported")}clone(){let e=new this.constructor(this.key);return e.value=this.value,e.level=this.level,e.hasChildNodes=this.hasChildNodes,e.rendered=this.rendered,e.textValue=this.textValue,e["aria-label"]=this["aria-label"],e.index=this.index,e.parentKey=this.parentKey,e.prevKey=this.prevKey,e.nextKey=this.nextKey,e.firstChildKey=this.firstChildKey,e.lastChildKey=this.lastChildKey,e.props=this.props,e.render=this.render,e.colSpan=this.colSpan,e.colIndex=this.colIndex,e}filter(e,n,r){let o=this.clone();return n.addDescendants(o,e),o}}class Es extends yt{filter(e,n,r){let[o,l]=ws(e,n,this.firstChildKey,r),i=this.clone();return i.firstChildKey=o,i.lastChildKey=l,i}}const oo=class oo extends yt{};oo.type="header";let sl=oo;const lo=class lo extends yt{};lo.type="loader";let Er=lo;const io=class io extends Es{filter(e,n,r){if(r(this.textValue,this)){let o=this.clone();return n.addDescendants(o,e),o}return null}};io.type="item";let wr=io;const so=class so extends Es{filter(e,n,r){let o=super.filter(e,n,r);if(o&&o.lastChildKey!==null){let l=e.getItem(o.lastChildKey);if(l&&l.type!=="header")return o}return null}};so.type="section";let Sr=so;class cp{get size(){return this.itemCount}getKeys(){return this.keyMap.keys()}*[Symbol.iterator](){let e=this.firstKey!=null?this.keyMap.get(this.firstKey):void 0;for(;e;)yield e,e=e.nextKey!=null?this.keyMap.get(e.nextKey):void 0}getChildren(e){let n=this.keyMap;return{*[Symbol.iterator](){let r=n.get(e),o=(r==null?void 0:r.firstChildKey)!=null?n.get(r.firstChildKey):null;for(;o;)yield o,o=o.nextKey!=null?n.get(o.nextKey):void 0}}}getKeyBefore(e){let n=this.keyMap.get(e);if(!n)return null;if(n.prevKey!=null){for(n=this.keyMap.get(n.prevKey);n&&n.type!=="item"&&n.lastChildKey!=null;)n=this.keyMap.get(n.lastChildKey);return(n==null?void 0:n.key)??null}return n.parentKey}getKeyAfter(e){let n=this.keyMap.get(e);if(!n)return null;if(n.type!=="item"&&n.firstChildKey!=null)return n.firstChildKey;for(;n;){if(n.nextKey!=null)return n.nextKey;if(n.parentKey!=null)n=this.keyMap.get(n.parentKey);else return null}return null}getFirstKey(){return this.firstKey}getLastKey(){let e=this.lastKey!=null?this.keyMap.get(this.lastKey):null;for(;(e==null?void 0:e.lastChildKey)!=null;)e=this.keyMap.get(e.lastChildKey);return(e==null?void 0:e.key)??null}getItem(e){return this.keyMap.get(e)??null}at(){throw new Error("Not implemented")}clone(){let e=this.constructor,n=new e;return n.keyMap=new Map(this.keyMap),n.firstKey=this.firstKey,n.lastKey=this.lastKey,n.itemCount=this.itemCount,n}addNode(e){if(this.frozen)throw new Error("Cannot add a node to a frozen collection");e.type==="item"&&this.keyMap.get(e.key)==null&&this.itemCount++,this.keyMap.set(e.key,e)}addDescendants(e,n){this.addNode(e);let r=n.getChildren(e.key);for(let o of r)this.addDescendants(o,n)}removeNode(e){if(this.frozen)throw new Error("Cannot remove a node to a frozen collection");let n=this.keyMap.get(e);n!=null&&n.type==="item"&&this.itemCount--,this.keyMap.delete(e)}commit(e,n,r=!1){if(this.frozen)throw new Error("Cannot commit a frozen collection");this.firstKey=e,this.lastKey=n,this.frozen=!r}filter(e){let n=new this.constructor,[r,o]=ws(this,n,this.firstKey,e);return n==null||n.commit(r,o),n}constructor(){this.keyMap=new Map,this.firstKey=null,this.lastKey=null,this.frozen=!1,this.itemCount=0}}function ws(t,e,n,r){if(n==null)return[null,null];let o=null,l=null,i=t.getItem(n);for(;i!=null;){let s=i.filter(t,e,r);s!=null&&(s.nextKey=null,l&&(s.prevKey=l.key,l.nextKey=s.key),o==null&&(o=s),e.addNode(s),l=s),i=i.nextKey!=null?t.getItem(i.nextKey):null}if(l&&l.type==="separator"){let s=l.prevKey;e.removeNode(l.key),s!=null?(l=e.getItem(s),l.nextKey=null):l=null}return[(o==null?void 0:o.key)??null,(l==null?void 0:l.key)??null]}class Ss{constructor(e){this._firstChild=null,this._lastChild=null,this._previousSibling=null,this._nextSibling=null,this._parentNode=null,this._minInvalidChildIndex=null,this.ownerDocument=e}*[Symbol.iterator](){let e=this.firstChild;for(;e;)yield e,e=e.nextSibling}get firstChild(){return this._firstChild}set firstChild(e){this._firstChild=e,this.ownerDocument.markDirty(this)}get lastChild(){return this._lastChild}set lastChild(e){this._lastChild=e,this.ownerDocument.markDirty(this)}get previousSibling(){return this._previousSibling}set previousSibling(e){this._previousSibling=e,this.ownerDocument.markDirty(this)}get nextSibling(){return this._nextSibling}set nextSibling(e){this._nextSibling=e,this.ownerDocument.markDirty(this)}get parentNode(){return this._parentNode}set parentNode(e){this._parentNode=e,this.ownerDocument.markDirty(this)}get isConnected(){var e;return((e=this.parentNode)==null?void 0:e.isConnected)||!1}invalidateChildIndices(e){(this._minInvalidChildIndex==null||!this._minInvalidChildIndex.isConnected||e.indexthis.subscriptions.delete(e)}resetAfterSSR(){this.isSSR&&(this.isSSR=!1,this.firstChild=null,this.lastChild=null,this.nodeId=0)}}function Ps(t){let{children:e,items:n,idScope:r,addIdAndValue:o,dependencies:l=[]}=t,i=a.useMemo(()=>{},[e]),s=a.useMemo(()=>new WeakMap,[...l,i]);return a.useMemo(()=>{if(n&&typeof e=="function"){let u=[];for(let c of n){let d=fp(c)?c:null,f=d?s.get(d):null;if(!f){f=e(c);let b=f.props.id??(c==null?void 0:c.key)??(c==null?void 0:c.id);r!=null&&f.props.id==null&&b!=null&&(b=r+":"+b);let p=b??u.length;f=a.cloneElement(f,o?{key:p,id:b,value:c}:{key:p}),d&&s.set(d,f)}u.push(f)}return u}else if(typeof e!="function")return e},[e,n,s,r,o])}function fp(t){switch(typeof t){case"object":return t!=null;case"function":case"symbol":return!0;default:return!1}}var Xn={exports:{}},Zn={};/** - * @license React - * use-sync-external-store-shim.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var al;function pp(){if(al)return Zn;al=1;var t=ku();function e(f,b){return f===b&&(f!==0||1/f===1/b)||f!==f&&b!==b}var n=typeof Object.is=="function"?Object.is:e,r=t.useState,o=t.useEffect,l=t.useLayoutEffect,i=t.useDebugValue;function s(f,b){var p=b(),m=r({inst:{value:p,getSnapshot:b}}),v=m[0].inst,g=m[1];return l(function(){v.value=p,v.getSnapshot=b,u(v)&&g({inst:v})},[f,p,b]),o(function(){return u(v)&&g({inst:v}),f(function(){u(v)&&g({inst:v})})},[f]),i(p),p}function u(f){var b=f.getSnapshot;f=f.value;try{var p=b();return!n(f,p)}catch{return!0}}function c(f,b){return b()}var d=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?c:s;return Zn.useSyncExternalStore=t.useSyncExternalStore!==void 0?t.useSyncExternalStore:d,Zn}var ul;function bp(){return ul||(ul=1,Xn.exports=pp()),Xn.exports}var hp=bp();const Ts=a.createContext(!1),jt=a.createContext(null);function ks(t){if(a.useContext(jt))return t.content;let{collection:n,document:r}=yp(t.createCollection);return y.createElement(y.Fragment,null,y.createElement(Od,null,y.createElement(jt.Provider,{value:r},t.content)),y.createElement(mp,{render:t.children,collection:n}))}function mp({collection:t,render:e}){return e(t)}function gp(t,e,n){let r=et(),o=a.useRef(r);o.current=r;let l=a.useCallback(()=>o.current?n():e(),[e,n]);return hp.useSyncExternalStore(t,l)}const $p=typeof y.useSyncExternalStore=="function"?y.useSyncExternalStore:gp;function yp(t){let[e]=a.useState(()=>new dp((t==null?void 0:t())||new cp)),n=a.useCallback(i=>e.subscribe(i),[e]),r=a.useCallback(()=>{let i=e.getCollection();return e.isSSR&&e.resetAfterSSR(),i},[e]),o=a.useCallback(()=>(e.isSSR=!0,e.getCollection()),[e]);return{collection:$p(n,r,o),document:e}}const Pr=a.createContext(null);function vp(t){var n;return n=class extends yt{},n.type=t,n}function Ds(t,e,n,r,o,l){typeof t=="string"&&(t=vp(t));let i=a.useCallback(u=>{u==null||u.setProps(e,n,t,r,l)},[e,n,r,l,t]),s=a.useContext(Pr);if(s){let u=s.ownerDocument.nodesByProps.get(e);return u||(u=s.ownerDocument.createElement(t.type),u.setProps(e,n,t,r,l),s.appendChild(u),s.ownerDocument.updateCollection(),s.ownerDocument.nodesByProps.set(e,u)),o?y.createElement(Pr.Provider,{value:u},o):null}return y.createElement(t.type,{ref:i},o)}function Ms(t,e){let n=({node:o})=>e(o.props,o.props.ref,o),r=a.forwardRef((o,l)=>{let i=a.useContext(br);if(!a.useContext(Ts)){if(e.length>=3)throw new Error(e.name+" cannot be rendered outside a collection.");return e(o,l)}return Ds(t,o,l,"children"in o?o.children:null,null,u=>y.createElement(br.Provider,{value:i},y.createElement(n,{node:u})))});return r.displayName=e.name,r}function xp(t,e,n=As){let r=({node:l})=>e(l.props,l.props.ref,l),o=a.forwardRef((l,i)=>{let s=n(l);return Ds(t,l,i,null,s,u=>y.createElement(r,{node:u}))??y.createElement(y.Fragment,null)});return o.displayName=e.name,o}function As(t){return Ps({...t,addIdAndValue:!0})}const cl=a.createContext(null);function Cp(t){let e=a.useContext(cl),n=((e==null?void 0:e.dependencies)||[]).concat(t.dependencies),r=t.idScope??(e==null?void 0:e.idScope),o=As({...t,idScope:r,dependencies:n});return a.useContext(jt)&&(o=y.createElement(Ep,null,o)),e=a.useMemo(()=>({dependencies:n,idScope:r}),[r,...n]),y.createElement(cl.Provider,{value:e},o)}function Ep({children:t}){let e=a.useContext(jt),n=a.useMemo(()=>y.createElement(jt.Provider,{value:null},y.createElement(Ts.Provider,{value:!0},t)),[t]);return et()?y.createElement(Pr.Provider,{value:e},n):Lr.createPortal(n,e)}const wp=a.createContext(null),Sp={CollectionRoot({collection:t,renderDropIndicator:e}){return dl(t,null,e)},CollectionBranch({collection:t,parent:e,renderDropIndicator:n}){return dl(t,e,n)}};function dl(t,e,n){return Ps({items:e?t.getChildren(e.key):t,dependencies:[n],children(r){if(r.type==="content")return y.createElement(y.Fragment,null);let o=r.render(r);return!n||r.type!=="item"?o:y.createElement(y.Fragment,null,n({type:"item",key:r.key,dropPosition:"before"}),o,Pp(t,r,n))}})}function Pp(t,e,n){let r=e.key,o=t.getKeyAfter(r),l=o!=null?t.getItem(o):null;for(;l!=null&&l.type!=="item";)o=t.getKeyAfter(l.key),l=o!=null?t.getItem(o):null;let i=e.nextKey!=null?t.getItem(e.nextKey):null;for(;i!=null&&i.type!=="item";)i=i.nextKey!=null?t.getItem(i.nextKey):null;let s=[];if(i==null){let u=e;for(;(u==null?void 0:u.type)==="item"&&(!l||u.parentKey!==l.parentKey&&l.level{b.target.dispatchEvent(new PointerEvent("pointercancel",{bubbles:!0})),ee(b.target).activeElement!==b.target&&Ke(b.target),o&&o({...b,type:"longpress"}),s.current=void 0},l),b.pointerType==="touch")){let p=v=>{v.preventDefault()},m=xe(b.target);u(b.target,"contextmenu",p,{once:!0}),u(m,"pointerup",()=>{setTimeout(()=>{c(b.target,"contextmenu",p)},30)},{once:!0})}},onPressEnd(b){s.current&&clearTimeout(s.current),r&&(b.pointerType==="mouse"||b.pointerType==="touch")&&r({...b,type:"longpressend"})}}),f=hc(o&&!e?i:void 0);return{longPressProps:J(d,f)}}function ha(t,e,n){let{type:r}=t,{isOpen:o}=e;a.useEffect(()=>{n&&n.current&&Ri.set(n.current,e.close)});let l;r==="menu"?l=!0:r==="listbox"&&(l="listbox");let i=ve();return{triggerProps:{"aria-haspopup":l,"aria-expanded":o,"aria-controls":o?i:void 0,onPress:e.toggle},overlayProps:{id:i}}}function Np(t){return t&&t.__esModule?t.default:t}function Op(t,e,n){let{type:r="menu",isDisabled:o,trigger:l="press"}=t,i=ve(),{triggerProps:s,overlayProps:u}=ha({type:r},e,n),c=p=>{if(!o&&!(l==="longPress"&&!p.altKey)&&n&&n.current)switch(p.key){case"Enter":case" ":if(l==="longPress"||p.isDefaultPrevented())return;case"ArrowDown":"continuePropagation"in p||p.stopPropagation(),p.preventDefault(),e.toggle("first");break;case"ArrowUp":"continuePropagation"in p||p.stopPropagation(),p.preventDefault(),e.toggle("last");break;default:"continuePropagation"in p&&p.continuePropagation()}},d=Yr(Np(pa),"@react-aria/menu"),{longPressProps:f}=ba({isDisabled:o||l!=="longPress",accessibilityDescription:d.format("longPressMessage"),onLongPressStart(){e.close()},onLongPress(){e.open("first")}}),b={preventFocusOnPress:!0,onPressStart(p){p.pointerType!=="touch"&&p.pointerType!=="keyboard"&&!o&&(Ke(p.target),e.open(p.pointerType==="virtual"?"first":null))},onPress(p){p.pointerType==="touch"&&!o&&(Ke(p.target),e.toggle())}};return delete s.onPress,{menuTriggerProps:{...s,...l==="press"?b:f,id:i,onKeyDown:c},menuProps:{...u,"aria-labelledby":i,autoFocus:e.focusStrategy||!0,onClose:e.close}}}function Tr(t){return ln()?t.altKey:t.ctrlKey}function cn(t,e){var o,l;let n=`[data-key="${CSS.escape(String(e))}"]`,r=(o=t.current)==null?void 0:o.dataset.collection;return r&&(n=`[data-collection="${CSS.escape(r)}"]${n}`),(l=t.current)==null?void 0:l.querySelector(n)}const ma=new WeakMap;function Vp(t){let e=ve();return ma.set(t,e),e}function _p(t){return ma.get(t)}const jp=1e3;function zp(t){let{keyboardDelegate:e,selectionManager:n,onTypeSelect:r}=t,o=a.useRef({search:"",timeout:void 0}).current,l=i=>{let s=Hp(i.key);if(!(!s||i.ctrlKey||i.metaKey||!te(i.currentTarget,j(i))||o.search.length===0&&s===" ")){if(s===" "&&o.search.trim().length>0&&(i.preventDefault(),"continuePropagation"in i||i.stopPropagation()),o.search+=s,e.getKeyForSearch!=null){let u=e.getKeyForSearch(o.search,n.focusedKey);u==null&&(u=e.getKeyForSearch(o.search)),u!=null&&(n.setFocusedKey(u),r&&r(u))}clearTimeout(o.timeout),o.timeout=setTimeout(()=>{o.search=""},jp)}};return{typeSelectProps:{onKeyDownCapture:e.getKeyForSearch?l:void 0}}}function Hp(t){return t.length===1||!/^[A-Z]/i.test(t)?t:""}function ga(t){let{selectionManager:e,keyboardDelegate:n,ref:r,autoFocus:o=!1,shouldFocusWrap:l=!1,disallowEmptySelection:i=!1,disallowSelectAll:s=!1,escapeKeyBehavior:u="clearSelection",selectOnFocus:c=e.selectionBehavior==="replace",disallowTypeAhead:d=!1,shouldUseVirtualFocus:f,allowsTabNavigation:b=!1,scrollRef:p=r,linkBehavior:m="action"}=t,{direction:v}=$t(),g=zt(),x=h=>{var M,E,w,T,S,N,q,W,X,Q,le,Z,be,we;if(h.altKey&&h.key==="Tab"&&h.preventDefault(),!r.current||!te(r.current,j(h)))return;const C=(L,H)=>{if(L!=null){if(e.isLink(L)&&m==="selection"&&c&&!Tr(h)){Lr.flushSync(()=>{e.setFocusedKey(L,H)});let oe=cn(r,L),Se=e.getItemProps(L);oe&&g.open(oe,h,Se.href,Se.routerOptions);return}if(e.setFocusedKey(L,H),e.isLink(L)&&m==="override")return;h.shiftKey&&e.selectionMode==="multiple"?e.extendSelection(L):c&&!Tr(h)&&e.replaceSelection(L)}};switch(h.key){case"ArrowDown":if(n.getKeyBelow){let L=e.focusedKey!=null?(M=n.getKeyBelow)==null?void 0:M.call(n,e.focusedKey):(E=n.getFirstKey)==null?void 0:E.call(n);L==null&&l&&(L=(w=n.getFirstKey)==null?void 0:w.call(n,e.focusedKey)),L!=null&&(h.preventDefault(),C(L))}break;case"ArrowUp":if(n.getKeyAbove){let L=e.focusedKey!=null?(T=n.getKeyAbove)==null?void 0:T.call(n,e.focusedKey):(S=n.getLastKey)==null?void 0:S.call(n);L==null&&l&&(L=(N=n.getLastKey)==null?void 0:N.call(n,e.focusedKey)),L!=null&&(h.preventDefault(),C(L))}break;case"ArrowLeft":if(n.getKeyLeftOf){let L=e.focusedKey!=null?(q=n.getKeyLeftOf)==null?void 0:q.call(n,e.focusedKey):(W=n.getFirstKey)==null?void 0:W.call(n);L==null&&l&&(L=v==="rtl"?(X=n.getFirstKey)==null?void 0:X.call(n,e.focusedKey):(Q=n.getLastKey)==null?void 0:Q.call(n,e.focusedKey)),L!=null&&(h.preventDefault(),C(L,v==="rtl"?"first":"last"))}break;case"ArrowRight":if(n.getKeyRightOf){let L=e.focusedKey!=null?(le=n.getKeyRightOf)==null?void 0:le.call(n,e.focusedKey):(Z=n.getFirstKey)==null?void 0:Z.call(n);L==null&&l&&(L=v==="rtl"?(be=n.getLastKey)==null?void 0:be.call(n,e.focusedKey):(we=n.getFirstKey)==null?void 0:we.call(n,e.focusedKey)),L!=null&&(h.preventDefault(),C(L,v==="rtl"?"last":"first"))}break;case"Home":if(n.getFirstKey){if(e.focusedKey===null&&h.shiftKey)return;h.preventDefault();let L=n.getFirstKey(e.focusedKey,ut(h));e.setFocusedKey(L),L!=null&&(ut(h)&&h.shiftKey&&e.selectionMode==="multiple"?e.extendSelection(L):c&&e.replaceSelection(L))}break;case"End":if(n.getLastKey){if(e.focusedKey===null&&h.shiftKey)return;h.preventDefault();let L=n.getLastKey(e.focusedKey,ut(h));e.setFocusedKey(L),L!=null&&(ut(h)&&h.shiftKey&&e.selectionMode==="multiple"?e.extendSelection(L):c&&e.replaceSelection(L))}break;case"PageDown":if(n.getKeyPageBelow&&e.focusedKey!=null){let L=n.getKeyPageBelow(e.focusedKey);L!=null&&(h.preventDefault(),C(L))}break;case"PageUp":if(n.getKeyPageAbove&&e.focusedKey!=null){let L=n.getKeyPageAbove(e.focusedKey);L!=null&&(h.preventDefault(),C(L))}break;case"a":ut(h)&&e.selectionMode==="multiple"&&s!==!0&&(h.preventDefault(),e.selectAll());break;case"Escape":u==="clearSelection"&&!i&&e.selectedKeys.size!==0&&(h.stopPropagation(),h.preventDefault(),e.clearSelection());break;case"Tab":if(!b){if(h.shiftKey)r.current.focus();else{let L=Ve(r.current,{tabbable:!0}),H,oe;do oe=L.lastChild(),oe&&(H=oe);while(oe);let Se=re();H&&(!It(H)||Se&&!Ql(Se))&&Ke(H)}break}}},$=a.useRef({top:0,left:0});Tt(p,"scroll",()=>{var h,C;$.current={top:((h=p.current)==null?void 0:h.scrollTop)??0,left:((C=p.current)==null?void 0:C.scrollLeft)??0}});let D=h=>{var C,M;if(e.isFocused){te(h.currentTarget,j(h))||e.setFocused(!1);return}if(te(h.currentTarget,j(h))){if(e.setFocused(!0),e.focusedKey==null){let E=T=>{T!=null&&(e.setFocusedKey(T),c&&!e.isSelected(T)&&e.replaceSelection(T))},w=h.relatedTarget;w&&h.currentTarget.compareDocumentPosition(w)&Node.DOCUMENT_POSITION_FOLLOWING?E(e.lastSelectedKey??((C=n.getLastKey)==null?void 0:C.call(n))):E(e.firstSelectedKey??((M=n.getFirstKey)==null?void 0:M.call(n)))}else p.current&&(p.current.scrollTop=$.current.top,p.current.scrollLeft=$.current.left);if(e.focusedKey!=null&&p.current){let E=cn(r,e.focusedKey);E instanceof HTMLElement&&(!It(E)&&!f&&Ke(E),Ot()==="keyboard"&&Eo(E,{containingElement:r.current}))}}},P=h=>{te(h.currentTarget,h.relatedTarget)||e.setFocused(!1)},F=a.useRef(!1);Tt(r,Mu,f?h=>{let{detail:C}=h;h.stopPropagation(),e.setFocused(!0),(C==null?void 0:C.focusStrategy)==="first"&&(F.current=!0)}:void 0),Co(()=>{var h;if(F.current){let C=((h=n.getFirstKey)==null?void 0:h.call(n))??null;if(C==null){let M=re();Ls(r.current),Jr(M,null),e.collection.size>0&&(F.current=!1)}else e.setFocusedKey(C),F.current=!1}},[e.collection]),Co(()=>{e.collection.size>0&&(F.current=!1)},[e.focusedKey]),Tt(r,Du,f?h=>{var C;h.stopPropagation(),e.setFocused(!1),(C=h.detail)!=null&&C.clearFocusKey&&e.setFocusedKey(null)}:void 0);const R=a.useRef(o),I=a.useRef(!1);a.useEffect(()=>{var h,C;if(R.current){let M=null;o==="first"&&(M=((h=n.getFirstKey)==null?void 0:h.call(n))??null),o==="last"&&(M=((C=n.getLastKey)==null?void 0:C.call(n))??null);let E=e.selectedKeys;if(E.size){for(let w of E)if(e.canSelectItem(w)){M=w;break}}e.setFocused(!0),e.setFocusedKey(M),M==null&&!f&&r.current&&Ge(r.current),e.collection.size>0&&(R.current=!1,I.current=!0)}});let k=a.useRef(e.focusedKey),B=a.useRef(null);a.useEffect(()=>{if(e.isFocused&&e.focusedKey!=null&&(e.focusedKey!==k.current||I.current)&&p.current&&r.current){let h=Ot(),C=cn(r,e.focusedKey);if(!(C instanceof HTMLElement))return;(h==="keyboard"||I.current)&&(B.current&&cancelAnimationFrame(B.current),B.current=requestAnimationFrame(()=>{p.current&&(sn(p.current,C),h!=="virtual"&&Eo(C,{containingElement:r.current}))}))}!f&&e.isFocused&&e.focusedKey==null&&k.current!=null&&r.current&&Ge(r.current),k.current=e.focusedKey,I.current=!1}),a.useEffect(()=>()=>{B.current&&cancelAnimationFrame(B.current)},[]),Tt(r,"react-aria-focus-scope-restore",h=>{h.preventDefault(),e.setFocused(!0)});let K={onKeyDown:x,onFocus:D,onBlur:P,onMouseDown(h){p.current===j(h)&&h.preventDefault()}},{typeSelectProps:_}=zp({keyboardDelegate:n,selectionManager:e});d||(K=J(_,K));let U;f||(U=e.focusedKey==null?0:-1);let z=Vp(e.collection);return{collectionProps:J(K,{tabIndex:U,"data-collection":z})}}class pl{constructor(e){this.ref=e}getItemRect(e){let n=this.ref.current;if(!n)return null;let r=e!=null?cn(this.ref,e):null;if(!r)return null;let o=n.getBoundingClientRect(),l=r.getBoundingClientRect();return{x:l.left-o.left-n.clientLeft+n.scrollLeft,y:l.top-o.top-n.clientTop+n.scrollTop,width:l.width,height:l.height}}getContentSize(){let e=this.ref.current;return{width:(e==null?void 0:e.scrollWidth)??0,height:(e==null?void 0:e.scrollHeight)??0}}getVisibleRect(){let e=this.ref.current;return{x:(e==null?void 0:e.scrollLeft)??0,y:(e==null?void 0:e.scrollTop)??0,width:(e==null?void 0:e.clientWidth)??0,height:(e==null?void 0:e.clientHeight)??0}}}class Qr{constructor(...e){if(e.length===1){let n=e[0];this.collection=n.collection,this.ref=n.ref,this.collator=n.collator,this.disabledKeys=n.disabledKeys||new Set,this.disabledBehavior=n.disabledBehavior||"all",this.orientation=n.orientation||"vertical",this.direction=n.direction,this.layout=n.layout||"stack",this.layoutDelegate=n.layoutDelegate||new pl(n.ref)}else this.collection=e[0],this.disabledKeys=e[1],this.ref=e[2],this.collator=e[3],this.layout="stack",this.orientation="vertical",this.disabledBehavior="all",this.layoutDelegate=new pl(this.ref);this.layout==="stack"&&this.orientation==="vertical"&&(this.getKeyLeftOf=void 0,this.getKeyRightOf=void 0)}isDisabled(e){var n,r;return this.disabledBehavior==="all"&&(((n=e.props)==null?void 0:n.isDisabled)||this.disabledKeys.has(e.key))&&((r=e.props)==null?void 0:r.disabledBehavior)!=="selection"}findNextNonDisabled(e,n,r=!1){let o=e;for(;o!=null;){let l=this.collection.getItem(o);if((l==null?void 0:l.type)==="item"&&(r||!this.isDisabled(l)))return o;o=n(o)}return null}getNextKey(e,n){let r=e;return r=this.collection.getKeyAfter(r),this.findNextNonDisabled(r,o=>this.collection.getKeyAfter(o),n==null?void 0:n.includeDisabled)}getPreviousKey(e,n){let r=e;return r=this.collection.getKeyBefore(r),this.findNextNonDisabled(r,o=>this.collection.getKeyBefore(o),n==null?void 0:n.includeDisabled)}findKey(e,n,r){let o=e,l=this.layoutDelegate.getItemRect(o);if(!l||o==null)return null;let i=l;do{if(o=n(o),o==null)break;l=this.layoutDelegate.getItemRect(o)}while(l&&r(i,l)&&o!=null);return o}isSameRow(e,n){return e.y===n.y||e.x!==n.x}isSameColumn(e,n){return e.x===n.x||e.y!==n.y}getKeyBelow(e,n){return this.layout==="grid"&&this.orientation==="vertical"?this.findKey(e,r=>this.getNextKey(r,n),this.isSameRow):this.getNextKey(e,n)}getKeyAbove(e,n){return this.layout==="grid"&&this.orientation==="vertical"?this.findKey(e,r=>this.getPreviousKey(r,n),this.isSameRow):this.getPreviousKey(e,n)}getNextColumn(e,n,r){return n?this.getPreviousKey(e,r):this.getNextKey(e,r)}getKeyRightOf(e,n){let r=this.direction==="ltr"?"getKeyRightOf":"getKeyLeftOf";return this.layoutDelegate[r]?(e=this.layoutDelegate[r](e),this.findNextNonDisabled(e,o=>this.layoutDelegate[r](o),n==null?void 0:n.includeDisabled)):this.layout==="grid"?this.orientation==="vertical"?this.getNextColumn(e,this.direction==="rtl",n):this.findKey(e,o=>this.getNextColumn(o,this.direction==="rtl",n),this.isSameColumn):this.orientation==="horizontal"?this.getNextColumn(e,this.direction==="rtl",n):null}getKeyLeftOf(e,n){let r=this.direction==="ltr"?"getKeyLeftOf":"getKeyRightOf";return this.layoutDelegate[r]?(e=this.layoutDelegate[r](e),this.findNextNonDisabled(e,o=>this.layoutDelegate[r](o),n==null?void 0:n.includeDisabled)):this.layout==="grid"?this.orientation==="vertical"?this.getNextColumn(e,this.direction==="ltr",n):this.findKey(e,o=>this.getNextColumn(o,this.direction==="ltr",n),this.isSameColumn):this.orientation==="horizontal"?this.getNextColumn(e,this.direction==="ltr",n):null}getFirstKey(){let e=this.collection.getFirstKey();return this.findNextNonDisabled(e,n=>this.collection.getKeyAfter(n))}getLastKey(){let e=this.collection.getLastKey();return this.findNextNonDisabled(e,n=>this.collection.getKeyBefore(n))}getKeyPageAbove(e){let n=this.ref.current,r=this.layoutDelegate.getItemRect(e);if(!r)return null;if(n&&!Je(n))return this.getFirstKey();let o=e;if(this.orientation==="horizontal"){let l=Math.max(0,r.x+r.width-this.layoutDelegate.getVisibleRect().width);for(;r&&r.x>l&&o!=null;)o=this.getKeyAbove(o),r=o==null?null:this.layoutDelegate.getItemRect(o)}else{let l=Math.max(0,r.y+r.height-this.layoutDelegate.getVisibleRect().height);for(;r&&r.y>l&&o!=null;)o=this.getKeyAbove(o),r=o==null?null:this.layoutDelegate.getItemRect(o)}return o??this.getFirstKey()}getKeyPageBelow(e){let n=this.ref.current,r=this.layoutDelegate.getItemRect(e);if(!r)return null;if(n&&!Je(n))return this.getLastKey();let o=e;if(this.orientation==="horizontal"){let l=Math.min(this.layoutDelegate.getContentSize().width,r.x-r.width+this.layoutDelegate.getVisibleRect().width);for(;r&&r.xo[0]l||new Qr({collection:n,disabledKeys:r,disabledBehavior:c,ref:o,collator:u,layoutDelegate:i,orientation:s}),[l,i,n,r,o,u,c,s]),{collectionProps:f}=ga({...t,ref:o,selectionManager:e,keyboardDelegate:d});return{listProps:f}}function Gp(t){let{id:e,selectionManager:n,key:r,ref:o,shouldSelectOnPressUp:l,shouldUseVirtualFocus:i,focus:s,isDisabled:u,onAction:c,allowsDifferentPressOrigin:d,linkBehavior:f="action"}=t,b=zt();e=ve(e);let p=S=>{if(S.pointerType==="keyboard"&&Tr(S))n.toggleSelection(r);else{if(n.selectionMode==="none")return;if(n.isLink(r)){if(f==="selection"&&o.current){let N=n.getItemProps(r);b.open(o.current,S,N.href,N.routerOptions),n.setSelectedKeys(n.selectedKeys);return}else if(f==="override"||f==="none")return}n.selectionMode==="single"?n.isSelected(r)&&!n.disallowEmptySelection?n.toggleSelection(r):n.replaceSelection(r):S&&S.shiftKey?n.extendSelection(r):n.selectionBehavior==="toggle"||S&&(ut(S)||S.pointerType==="touch"||S.pointerType==="virtual")?n.toggleSelection(r):n.replaceSelection(r)}};a.useEffect(()=>{r===n.focusedKey&&n.isFocused&&(i?Ls(o.current):s?s():re()!==o.current&&o.current&&Ge(o.current))},[o,r,n.focusedKey,n.childFocusStrategy,n.isFocused,i]),u=u||n.isDisabled(r);let m={};!i&&!u?m={tabIndex:r===n.focusedKey?0:-1,onFocus(S){j(S)===o.current&&n.setFocusedKey(r)}}:u&&(m.onMouseDown=S=>{S.preventDefault()}),a.useEffect(()=>{u&&n.focusedKey===r&&n.setFocusedKey(null)},[n,u,r]);let v=n.isLink(r)&&f==="override",g=c&&t.UNSTABLE_itemBehavior==="action",x=n.isLink(r)&&f!=="selection"&&f!=="none",$=!u&&n.canSelectItem(r)&&!v&&!g,D=(c||x)&&!u,P=D&&(n.selectionBehavior==="replace"?!$:!$||n.isEmpty),F=D&&$&&n.selectionBehavior==="replace",R=P||F,I=a.useRef(null),k=R&&$,B=a.useRef(!1),K=a.useRef(!1),_=n.getItemProps(r),U=S=>{var N;c&&(c(),(N=o.current)==null||N.dispatchEvent(new CustomEvent("react-aria-item-action",{bubbles:!0}))),x&&o.current&&b.open(o.current,S,_.href,_.routerOptions)},z={ref:o};if(l?(z.onPressStart=S=>{I.current=S.pointerType,B.current=k,S.pointerType==="keyboard"&&(!R||hl(S.key))&&p(S)},d?(z.onPressUp=P?void 0:S=>{S.pointerType==="mouse"&&$&&p(S)},z.onPress=P?U:S=>{S.pointerType!=="keyboard"&&S.pointerType!=="mouse"&&$&&p(S)}):z.onPress=S=>{if(P||F&&S.pointerType!=="mouse"){if(S.pointerType==="keyboard"&&!bl(S.key))return;U(S)}else S.pointerType!=="keyboard"&&$&&p(S)}):(z.onPressStart=S=>{I.current=S.pointerType,B.current=k,K.current=P,$&&(S.pointerType==="mouse"&&!P||S.pointerType==="keyboard"&&(!D||hl(S.key)))&&p(S)},z.onPress=S=>{(S.pointerType==="touch"||S.pointerType==="pen"||S.pointerType==="virtual"||S.pointerType==="keyboard"&&R&&bl(S.key)||S.pointerType==="mouse"&&K.current)&&(R?U(S):$&&p(S))}),m["data-collection"]=_p(n.collection),m["data-key"]=r,z.preventFocusOnPress=i,i&&(z=J(z,{onPressStart(S){S.pointerType!=="touch"&&(n.setFocused(!0),n.setFocusedKey(r))},onPress(S){S.pointerType==="touch"&&(n.setFocused(!0),n.setFocusedKey(r))}})),_)for(let S of["onPressStart","onPressEnd","onPressChange","onPress","onPressUp","onClick"])_[S]&&(z[S]=tt(z[S],_[S]));let{pressProps:h,isPressed:C}=Wt(z),M=F?S=>{I.current==="mouse"&&(S.stopPropagation(),S.preventDefault(),U(S))}:void 0,{longPressProps:E}=ba({isDisabled:!k,onLongPress(S){S.pointerType==="touch"&&(p(S),n.setSelectionBehavior("toggle"))}}),w=S=>{I.current==="touch"&&B.current&&S.preventDefault()},T=f!=="none"&&n.isLink(r)?S=>{_e.isOpening||S.preventDefault()}:void 0;return{itemProps:J(m,$||P||i&&!u?h:{},k?E:{},{onDoubleClick:M,onDragStartCapture:w,onClick:T,id:e},i?{onMouseDown:S=>S.preventDefault()}:void 0),isPressed:C,isSelected:n.isSelected(r),isFocused:n.isFocused&&n.focusedKey===r,isDisabled:u,allowsSelection:$,hasAction:R}}function bl(t){return t==="Enter"}function hl(t){return t===" "}function $a(t,e){return typeof e.getChildren=="function"?e.getChildren(t.key):t.childNodes}const ml=new WeakMap;function ya(t){let e=ml.get(t);if(e!=null)return e;let n=0,r=o=>{for(let l of o)l.type==="section"?r($a(l,t)):l.type==="item"&&n++};return r(t),ml.set(t,n),n}function Up(t){let e=Ln(t),[n,r]=a.useState(null),[o,l]=a.useState([]),i=()=>{l([]),e.close()};return{focusStrategy:n,...e,open(c=null){r(c),e.open()},toggle(c=null){r(c),e.toggle()},close(){i()},expandedKeysStack:o,openSubmenu:(c,d)=>{l(f=>d>f.length?f:[...f.slice(0,d),c])},closeSubmenu:(c,d)=>{l(f=>f[d]===c?f.slice(0,d):f)}}}function va(t,e){return typeof e.getChildren=="function"?e.getChildren(t.key):t.childNodes}function qp(t){return Yp(t)}function Yp(t,e){for(let n of t)return n}function Qn(t,e,n){if(e.parentKey===n.parentKey)return e.index-n.index;let r=[...gl(t,e),e],o=[...gl(t,n),n],l=r.slice(0,o.length).findIndex((i,s)=>i!==o[s]);return l!==-1?(e=r[l],n=o[l],e.index-n.index):r.findIndex(i=>i===n)>=0?1:(o.findIndex(i=>i===e)>=0,-1)}function gl(t,e){let n=[],r=e;for(;(r==null?void 0:r.parentKey)!=null;)r=t.getItem(r.parentKey),r&&n.unshift(r);return n}class Le extends Set{constructor(e,n,r){super(e),e instanceof Le?(this.anchorKey=n??e.anchorKey,this.currentKey=r??e.currentKey):(this.anchorKey=n??null,this.currentKey=r??null)}}class to{constructor(e,n,r){this.collection=e,this.state=n,this.allowsCellSelection=(r==null?void 0:r.allowsCellSelection)??!1,this._isSelectAll=null,this.layoutDelegate=(r==null?void 0:r.layoutDelegate)||null,this.fullCollection=(r==null?void 0:r.fullCollection)||null}get selectionMode(){return this.state.selectionMode}get disallowEmptySelection(){return this.state.disallowEmptySelection}get selectionBehavior(){return this.state.selectionBehavior}setSelectionBehavior(e){this.state.setSelectionBehavior(e)}get isFocused(){return this.state.isFocused}setFocused(e){this.state.setFocused(e)}get focusedKey(){return this.state.focusedKey}get childFocusStrategy(){return this.state.childFocusStrategy}setFocusedKey(e,n){(e==null||this.collection.getItem(e))&&this.state.setFocusedKey(e,n)}get selectedKeys(){return this.state.selectedKeys==="all"?new Set(this.getSelectAllKeys()):this.state.selectedKeys}get rawSelection(){return this.state.selectedKeys}isSelected(e){if(this.state.selectionMode==="none")return!1;let n=this.getKey(e);return n==null?!1:this.state.selectedKeys==="all"?this.canSelectItem(n):this.state.selectedKeys.has(n)}get isEmpty(){return this.state.selectedKeys!=="all"&&this.state.selectedKeys.size===0}get isSelectAll(){if(this.isEmpty)return!1;if(this.state.selectedKeys==="all")return!0;if(this._isSelectAll!=null)return this._isSelectAll;let e=this.getSelectAllKeys(),n=this.state.selectedKeys;return this._isSelectAll=e.every(r=>n.has(r)),this._isSelectAll}get firstSelectedKey(){let e=null;for(let n of this.state.selectedKeys){let r=this.collection.getItem(n);(!e||r&&Qn(this.collection,r,e)<0)&&(e=r)}return(e==null?void 0:e.key)??null}get lastSelectedKey(){let e=null;for(let n of this.state.selectedKeys){let r=this.collection.getItem(n);(!e||r&&Qn(this.collection,r,e)>0)&&(e=r)}return(e==null?void 0:e.key)??null}get disabledKeys(){return this.state.disabledKeys}get disabledBehavior(){return this.state.disabledBehavior}extendSelection(e){if(this.selectionMode==="none")return;if(this.selectionMode==="single"){this.replaceSelection(e);return}let n=this.getKey(e);if(n==null)return;let r;if(this.state.selectedKeys==="all")r=new Le([n],n,n);else{let o=this.state.selectedKeys,l=o.anchorKey??n;r=new Le(o,l,n);for(let i of this.getKeyRange(l,o.currentKey??n))r.delete(i);for(let i of this.getKeyRange(n,l))this.canSelectItem(i)&&r.add(i)}this.state.setSelectedKeys(r)}getKeyRange(e,n){let r=this.collection.getItem(e),o=this.collection.getItem(n);return r&&o?Qn(this.collection,r,o)<=0?this.getKeyRangeInternal(e,n):this.getKeyRangeInternal(n,e):[]}getKeyRangeInternal(e,n){var l;if((l=this.layoutDelegate)!=null&&l.getKeyRange)return this.layoutDelegate.getKeyRange(e,n);let r=[],o=e;for(;o!=null;){let i=this.collection.getItem(o);if(i&&(i.type==="item"||i.type==="cell"&&this.allowsCellSelection)&&r.push(o),o===n)return r;o=this.collection.getKeyAfter(o)}return[]}getKey(e){let n=this.collection.getItem(e);if(!n||n.type==="cell"&&this.allowsCellSelection)return e;for(;n&&n.type!=="item"&&n.parentKey!=null;)n=this.collection.getItem(n.parentKey);return!n||n.type!=="item"?null:n.key}toggleSelection(e){if(this.selectionMode==="none")return;if(this.selectionMode==="single"&&!this.isSelected(e)){this.replaceSelection(e);return}let n=this.getKey(e);if(n==null)return;let r=new Le(this.state.selectedKeys==="all"?this.getSelectAllKeys():this.state.selectedKeys);r.has(n)?r.delete(n):this.canSelectItem(n)&&(r.add(n),r.anchorKey=n,r.currentKey=n),!(this.disallowEmptySelection&&r.size===0)&&this.state.setSelectedKeys(r)}replaceSelection(e){if(this.selectionMode==="none")return;let n=this.getKey(e);if(n==null)return;let r=this.canSelectItem(n)?new Le([n],n,n):new Le;this.state.setSelectedKeys(r)}setSelectedKeys(e){if(this.selectionMode==="none")return;let n=new Le;for(let r of e){let o=this.getKey(r);if(o!=null&&(n.add(o),this.selectionMode==="single"))break}this.state.setSelectedKeys(n)}getSelectAllKeys(){let e=this.fullCollection??this.collection,n=[],r=o=>{var l;for(;o!=null;){if(this.canSelectItemIn(o,e)){let i=e.getItem(o);(i==null?void 0:i.type)==="item"&&n.push(o),i!=null&&i.hasChildNodes&&(this.allowsCellSelection||i.type!=="item")&&r(((l=qp(va(i,e)))==null?void 0:l.key)??null)}o=e.getKeyAfter(o)}};return r(e.getFirstKey()),n}selectAll(){!this.isSelectAll&&this.selectionMode==="multiple"&&this.state.setSelectedKeys("all")}clearSelection(){!this.disallowEmptySelection&&(this.state.selectedKeys==="all"||this.state.selectedKeys.size>0)&&this.state.setSelectedKeys(new Le)}toggleSelectAll(){this.isSelectAll?this.clearSelection():this.selectAll()}select(e,n){this.selectionMode!=="none"&&(this.selectionMode==="single"?this.isSelected(e)&&!this.disallowEmptySelection?this.toggleSelection(e):this.replaceSelection(e):this.selectionBehavior==="toggle"||n&&(n.pointerType==="touch"||n.pointerType==="virtual")?this.toggleSelection(e):this.replaceSelection(e))}isSelectionEqual(e){if(e===this.state.selectedKeys)return!0;let n=this.selectedKeys;if(e.size!==n.size)return!1;for(let r of e)if(!n.has(r))return!1;for(let r of n)if(!e.has(r))return!1;return!0}canSelectItem(e){return this.canSelectItemIn(e,this.collection)}canSelectItemIn(e,n){var o;if(this.state.selectionMode==="none"||this.state.disabledKeys.has(e))return!1;let r=n.getItem(e);return!(!r||(o=r==null?void 0:r.props)!=null&&o.isDisabled||r.type==="cell"&&!this.allowsCellSelection)}isDisabled(e){var r,o;let n=this.collection.getItem(e);return this.state.disabledBehavior==="all"&&(this.state.disabledKeys.has(e)||!!((r=n==null?void 0:n.props)!=null&&r.isDisabled))&&((o=n==null?void 0:n.props)==null?void 0:o.disabledBehavior)!=="selection"}isLink(e){var n,r;return!!((r=(n=this.collection.getItem(e))==null?void 0:n.props)!=null&&r.href)}getItemProps(e){var n;return(n=this.collection.getItem(e))==null?void 0:n.props}withCollection(e){return new to(e,this.state,{allowsCellSelection:this.allowsCellSelection,layoutDelegate:this.layoutDelegate||void 0,fullCollection:this.fullCollection??this.collection})}}class Xp{build(e,n){return this.context=n,$l(()=>this.iterateCollection(e))}*iterateCollection(e){let{children:n,items:r}=e;if(y.isValidElement(n)&&n.type===y.Fragment)yield*this.iterateCollection({children:n.props.children,items:r});else if(typeof n=="function"){if(!r)throw new Error("props.children was a function but props.items is missing");let o=0;for(let l of r)yield*this.getFullNode({value:l,index:o},{renderer:n}),o++}else{let o=[];y.Children.forEach(n,i=>{i&&o.push(i)});let l=0;for(let i of o){let s=this.getFullNode({element:i,index:l},{});for(let u of s)l++,yield u}}}getKey(e,n,r,o){if(e.key!=null)return e.key;if(n.type==="cell"&&n.key!=null)return`${o}${n.key}`;let l=n.value;if(l!=null){let i=l.key??l.id;if(i==null)throw new Error("No key found for item");return i}return o?`${o}.${n.index}`:`$.${n.index}`}getChildState(e,n){return{renderer:n.renderer||e.renderer}}*getFullNode(e,n,r,o){if(y.isValidElement(e.element)&&e.element.type===y.Fragment){let u=[];y.Children.forEach(e.element.props.children,d=>{u.push(d)});let c=e.index??0;for(const d of u)yield*this.getFullNode({element:d,index:c++},n,r,o);return}let l=e.element;if(!l&&e.value&&n&&n.renderer){let u=this.cache.get(e.value);if(u&&(!u.shouldInvalidate||!u.shouldInvalidate(this.context))){u.index=e.index,u.parentKey=o?o.key:null,yield u;return}l=n.renderer(e.value)}if(y.isValidElement(l)){let u=l.type;if(typeof u!="function"&&typeof u.getCollectionNode!="function"){let b=l.type;throw new Error(`Unknown element <${b}> in collection.`)}let c=u.getCollectionNode(l.props,this.context),d=e.index??0,f=c.next();for(;!f.done&&f.value;){let b=f.value;e.index=d;let p=b.key??null;p==null&&(p=b.element?null:this.getKey(l,e,n,r));let v=[...this.getFullNode({...b,key:p,index:d,wrapper:Zp(e.wrapper,b.wrapper)},this.getChildState(n,b),r?`${r}${l.key}`:l.key,o)];for(let g of v){if(g.value=b.value??e.value??null,g.value&&this.cache.set(g.value,g),e.type&&g.type!==e.type)throw new Error(`Unsupported type <${er(g.type)}> in <${er((o==null?void 0:o.type)??"unknown parent type")}>. Only <${er(e.type)}> is supported.`);d++,yield g}f=c.next(v)}return}if(e.key==null||e.type==null)return;let i=this,s={type:e.type,props:e.props,key:e.key,parentKey:o?o.key:null,value:e.value??null,level:((o==null?void 0:o.level)??0)+((o==null?void 0:o.type)==="item"?1:0),index:e.index,rendered:e.rendered,textValue:e.textValue??"","aria-label":e["aria-label"],wrapper:e.wrapper,shouldInvalidate:e.shouldInvalidate,hasChildNodes:e.hasChildNodes||!1,childNodes:$l(function*(){if(!e.hasChildNodes||!e.childNodes)return;let u=0;for(let c of e.childNodes()){c.key!=null&&(c.key=`${s.key}${c.key}`);let d=i.getFullNode({...c,index:u},i.getChildState(n,c),s.key,s);for(let f of d)u++,yield f}})};yield s}constructor(){this.cache=new WeakMap}}function $l(t){let e=[],n=null;return{*[Symbol.iterator](){for(let r of e)yield r;n||(n=t());for(let r of n)e.push(r),yield r}}}function Zp(t,e){if(t&&e)return n=>t(e(n));if(t)return t;if(e)return e}function er(t){return t[0].toUpperCase()+t.slice(1)}function Jp(t,e,n){let r=a.useMemo(()=>new Xp,[]),{children:o,items:l,collection:i}=t;return a.useMemo(()=>{if(i)return i;let u=r.build({children:o,items:l},n);return e(u)},[r,o,l,i,n,e])}function Qp(t,e){if(t.size!==e.size)return!1;for(let n of t)if(!e.has(n))return!1;return!0}function eb(t){let{selectionMode:e="none",disallowEmptySelection:n=!1,allowDuplicateSelectionEvents:r,selectionBehavior:o="toggle",disabledBehavior:l="all"}=t,i=a.useRef(!1),[,s]=a.useState(!1),u=a.useRef(null),c=a.useRef(null),[,d]=a.useState(null),f=a.useMemo(()=>yl(t.selectedKeys),[t.selectedKeys]),b=a.useMemo(()=>yl(t.defaultSelectedKeys,new Le),[t.defaultSelectedKeys]),[p,m]=$n(f,b,t.onSelectionChange),v=a.useMemo(()=>t.disabledKeys?new Set(t.disabledKeys):new Set,[t.disabledKeys]),[g,x]=a.useState(o);o==="replace"&&g==="toggle"&&typeof p=="object"&&p.size===0&&x("replace");let $=a.useRef(o);return a.useEffect(()=>{o!==$.current&&(x(o),$.current=o)},[o]),{selectionMode:e,disallowEmptySelection:n,selectionBehavior:g,setSelectionBehavior:x,get isFocused(){return i.current},setFocused(D){i.current=D,s(D)},get focusedKey(){return u.current},get childFocusStrategy(){return c.current},setFocusedKey(D,P="first"){u.current=D,c.current=P,d(D)},selectedKeys:p,setSelectedKeys(D){(r||!Qp(D,p))&&m(D)},disabledKeys:v,disabledBehavior:l}}function yl(t,e){return t?t==="all"?"all":new Le(t):e}const tb=a.createContext(null),uo=class uo extends yt{filter(e,n,r){let o=e.getItem(this.firstChildKey);if(o&&r(o.textValue,this)){let l=this.clone();return n.addDescendants(l,e),l}return null}};uo.type="submenutrigger";let vl=uo;function nb(t,e){let{role:n="dialog"}=t,r=Ft();r=t["aria-label"]?void 0:r;let o=a.useRef(!1);return a.useEffect(()=>{if(e.current&&!It(e.current)){Ge(e.current);let l=setTimeout(()=>{(re()===e.current||re()===document.body)&&(o.current=!0,e.current&&(e.current.blur(),Ge(e.current)),o.current=!1)},500);return()=>{clearTimeout(l)}}},[e]),Cs(),a.useRef(!1),a.useEffect(()=>{}),{dialogProps:{...pe(t,{labelable:!0}),role:n,tabIndex:-1,"aria-labelledby":t["aria-labelledby"]||r,onBlur:l=>{o.current&&l.stopPropagation()}},titleProps:{id:r}}}const xa=a.createContext(null),lt=a.createContext(null);function rb(t){let e=Up(t),n=a.useRef(null),{triggerProps:r,overlayProps:o}=ha({type:"dialog"},e,n);return r.id=ve(),o["aria-labelledby"]=r.id,y.createElement(rt,{values:[[lt,e],[tb,e],[xa,o],[Xr,{trigger:"DialogTrigger",triggerRef:n,"aria-labelledby":o["aria-labelledby"]}]]},y.createElement(op,{...r,ref:n,isPressed:e.isOpen},t.children))}const ob=a.forwardRef(function(e,n){let r=e["aria-labelledby"];[e,n]=Ce(e,n,xa);let{dialogProps:o,titleProps:l}=nb({...e,"aria-labelledby":r},n),i=a.useContext(lt);!o["aria-label"]&&!o["aria-labelledby"]&&e["aria-labelledby"]&&(o["aria-labelledby"]=e["aria-labelledby"]);let s=Ee({defaultClassName:"react-aria-Dialog",className:e.className,style:e.style,children:e.children,values:{close:(i==null?void 0:i.close)||(()=>{})}}),u=pe(e,{global:!0});return y.createElement(fe.section,{...J(u,s,o),render:e.render,ref:n,slot:e.slot||void 0},y.createElement(rt,{values:[[Mi,{slots:{[bn]:{},title:{...l,level:2}}}],[Dn,{slots:{[bn]:{},close:{onPress:()=>i==null?void 0:i.close()}}}]]},s.children))});function lb(t,e,n){let{overlayProps:r,underlayProps:o}=Ni({...t,isOpen:e.isOpen,onClose:e.close},n);return Oi({isDisabled:!e.isOpen}),Cs(),a.useEffect(()=>{if(e.isOpen&&n.current)return Ur([n.current],{shouldUseInert:!0})},[e.isOpen,n]),{modalProps:J(r),underlayProps:o}}const ib=a.createContext(null),no=a.createContext(null),sb=a.forwardRef(function(e,n){if(a.useContext(no))return y.createElement(xl,{...e,modalRef:n},e.children);let{isDismissable:o,isKeyboardDismissDisabled:l,isOpen:i,defaultOpen:s,onOpenChange:u,children:c,isEntering:d,isExiting:f,UNSTABLE_portalContainer:b,shouldCloseOnInteractOutside:p,...m}=e;return y.createElement(Ca,{isDismissable:o,isKeyboardDismissDisabled:l,isOpen:i,defaultOpen:s,onOpenChange:u,isEntering:d,isExiting:f,UNSTABLE_portalContainer:b,shouldCloseOnInteractOutside:p},y.createElement(xl,{...m,modalRef:n},c))});function ab(t,e){[t,e]=Ce(t,e,ib);let n=a.useContext(lt),r=Ln(t),o=t.isOpen!=null||t.defaultOpen!=null||!n?r:n,l=nt(e),i=a.useRef(null),s=or(l,o.isOpen),u=or(i,o.isOpen),c=s||u||t.isExiting||!1,d=et();return!o.isOpen&&!c||d?null:y.createElement(ub,{...t,state:o,isExiting:c,overlayRef:l,modalRef:i})}const Ca=a.forwardRef(ab);function ub({UNSTABLE_portalContainer:t,...e}){let n=e.modalRef,{state:r}=e,{modalProps:o,underlayProps:l}=lb(e,r,n),i=Br(e.overlayRef)||e.isEntering||!1,s=Ee({...e,defaultClassName:"react-aria-ModalOverlay",values:{isEntering:i,isExiting:e.isExiting,state:r}}),u=pc(),c,d;if(typeof document<"u"){let b=Je(document.body)?document.body:document.scrollingElement||document.documentElement,p=b.getBoundingClientRect().width%1,m=b.getBoundingClientRect().height%1;c=b.scrollWidth-p,d=b.scrollHeight-m}let f={...s.style,"--visual-viewport-width":u.width+"px","--visual-viewport-height":u.height+"px","--page-width":c!==void 0?c+"px":void 0,"--page-height":d!==void 0?d+"px":void 0};return y.createElement(Cr,{isExiting:e.isExiting,portalContainer:t},y.createElement(fe.div,{...J(pe(e,{global:!0}),l),...s,style:f,ref:e.overlayRef,"data-entering":i||void 0,"data-exiting":e.isExiting||void 0},y.createElement(rt,{values:[[no,{modalProps:o,modalRef:n,isExiting:e.isExiting,isDismissable:e.isDismissable}],[lt,r]]},s.children)))}function xl(t){let{modalProps:e,modalRef:n,isExiting:r,isDismissable:o}=a.useContext(no),l=a.useContext(lt),i=a.useMemo(()=>ht(t.modalRef,n),[t.modalRef,n]),s=nt(i),u=Br(s),c=Ee({...t,defaultClassName:"react-aria-Modal",values:{isEntering:u,isExiting:r,state:l}});return y.createElement(fe.div,{...J(pe(t,{global:!0}),e),...c,ref:s,"data-entering":u||void 0,"data-exiting":r||void 0},o&&y.createElement(xr,{onDismiss:l.close}),c.children)}const cb=y.forwardRef(({children:t,...e},n)=>{n=nt(n);let{pressProps:r}=Wt({...e,ref:n}),{focusableProps:o}=Pn(e,n),l=y.Children.only(t);a.useEffect(()=>{},[n,e.isDisabled]);let i=parseInt(y.version,10)<19?l.ref:l.props.ref;return y.cloneElement(l,{...J(r,o,l.props),ref:ht(i,n)})}),Cl=({children:t,className:e,slot:n,style:r,variant:o,...l})=>{const i=a.useMemo(()=>Pd({variant:o}),[o]);return A.jsx(Gr,{"aria-label":"Close",className:Te(e,i),"data-slot":"close-button",slot:n,style:r,...l,children:s=>typeof t=="function"?t(s):t??A.jsx($f,{"data-slot":"close-button-icon"})})},db=Object.assign(Cl,{Root:Cl}),Me=a.createContext({}),El=({children:t,...e})=>{const n=a.useMemo(()=>({slots:En(),placement:void 0}),[]);return A.jsx(Me,{value:n,children:A.jsx(rb,{"data-slot":"alert-dialog-root",...e,children:t})})},fb=({children:t,className:e,...n})=>{const{slots:r}=a.useContext(Me);return A.jsx(cb,{children:A.jsx("div",{className:he(r==null?void 0:r.trigger,e),"data-slot":"alert-dialog-trigger",role:"button",...n,children:t})})},pb=({children:t,className:e,isDismissable:n=!1,isKeyboardDismissDisabled:r=!0,onClick:o,variant:l,...i})=>{const{slots:s}=a.useContext(Me),u=a.useMemo(()=>En({variant:l}),[l]),c=a.useMemo(()=>({slots:{...s,...u}}),[s,u]);return A.jsx(Ca,{className:Te(e,u==null?void 0:u.backdrop()),"data-slot":"alert-dialog-backdrop",isDismissable:n,isKeyboardDismissDisabled:r,onClick:d=>{d.stopPropagation(),o==null||o(d)},...i,children:d=>A.jsxs(Me,{value:c,children:[typeof t=="function"?t(d):t," "]})})},bb=({children:t,className:e,placement:n="auto",size:r,...o})=>{const{slots:l}=a.useContext(Me),i=a.useMemo(()=>En({size:r}),[r]),s=a.useMemo(()=>({placement:n,slots:{...l,...i}}),[n,l,i]);return A.jsx(sb,{className:Te(e,i==null?void 0:i.container()),"data-placement":n,"data-slot":"alert-dialog-container",...o,children:u=>A.jsx(Me,{value:s,children:typeof t=="function"?t(u):t})})},hb=({children:t,className:e,...n})=>{const{placement:r,slots:o}=a.useContext(Me);return A.jsx(ob,{className:he(o==null?void 0:o.dialog,e),"data-placement":r,"data-slot":"alert-dialog-dialog",role:"alertdialog",...n,children:t})},mb=({children:t,className:e,...n})=>{const{slots:r}=a.useContext(Me);return A.jsx("div",{className:he(r==null?void 0:r.header,e),"data-slot":"alert-dialog-header",...n,children:t})},gb=({children:t,className:e,...n})=>{const{slots:r}=a.useContext(Me);return A.jsx(hf,{className:he(r==null?void 0:r.heading,e),"data-slot":"alert-dialog-heading",slot:"title",...n,children:t})},$b=({children:t,className:e,...n})=>{const{slots:r}=a.useContext(Me);return A.jsx("div",{className:he(r==null?void 0:r.body,e),"data-slot":"alert-dialog-body",...n,children:t})},yb=({children:t,className:e,...n})=>{const{slots:r}=a.useContext(Me);return A.jsx("div",{className:he(r==null?void 0:r.footer,e),"data-slot":"alert-dialog-footer",...n,children:t})},vb=({children:t,className:e,status:n="danger",...r})=>{const o=a.useMemo(()=>En({status:n}),[n]),l=()=>{switch(n){case"default":return A.jsx(_o,{"data-slot":"alert-dialog-default-icon"});case"accent":return A.jsx(_o,{"data-slot":"alert-dialog-default-icon"});case"success":return A.jsx(vf,{"data-slot":"alert-dialog-default-icon"});case"warning":return A.jsx(yf,{"data-slot":"alert-dialog-default-icon"});case"danger":return A.jsx(jo,{"data-slot":"alert-dialog-default-icon"});default:return A.jsx(jo,{"data-slot":"alert-dialog-default-icon"})}};return A.jsx(Ae.div,{className:o==null?void 0:o.icon({className:e}),"data-slot":"alert-dialog-icon",...r,children:t??l()})},xb=({className:t,...e})=>{const{slots:n}=a.useContext(Me);return A.jsx(db,{className:Te(t,n==null?void 0:n.closeTrigger()),"data-slot":"alert-dialog-close-trigger",slot:"close",...e})},Fh=Object.assign(El,{Root:El,Trigger:fb,Backdrop:pb,Container:bb,Dialog:hb,Header:mb,Heading:gb,Body:$b,Footer:yb,Icon:vb,CloseTrigger:xb});function Cb(t){let e=eo({usage:"search",...t}),n=a.useCallback((l,i)=>i.length===0?!0:(l=l.normalize("NFC"),i=i.normalize("NFC"),e.compare(l.slice(0,i.length),i)===0),[e]),r=a.useCallback((l,i)=>i.length===0?!0:(l=l.normalize("NFC"),i=i.normalize("NFC"),e.compare(l.slice(-i.length),i)===0),[e]),o=a.useCallback((l,i)=>{if(i.length===0)return!0;l=l.normalize("NFC"),i=i.normalize("NFC");let s=0,u=i.length;for(;s+u<=l.length;s++){let c=l.slice(s,s+u);if(e.compare(i,c)===0)return!0}return!1},[e]);return a.useMemo(()=>({startsWith:n,endsWith:r,contains:o}),[n,r,o])}const ro=a.createContext({}),Ea=a.createContext(null),wa={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valueMissing:!1,valid:!0},Sa={...wa,customError:!0,valid:!1},wt={isInvalid:!1,validationDetails:wa,validationErrors:[]},Eb=a.createContext({}),wl="__reactAriaFormValidationState";function wb(t){if(t[wl]){let{realtimeValidation:e,displayValidation:n,updateValidation:r,resetValidation:o,commitValidation:l}=t[wl];return{realtimeValidation:e,displayValidation:n,updateValidation:r,resetValidation:o,commitValidation:l}}return Sb(t)}function Sb(t){let{isInvalid:e,validationState:n,name:r,value:o,builtinValidation:l,validate:i,validationBehavior:s="aria"}=t;n&&(e||(e=n==="invalid"));let u=e!==void 0?{isInvalid:e,validationErrors:[],validationDetails:Sa}:null,c=a.useMemo(()=>{if(!i||o==null)return null;let K=Pb(i,o);return Sl(K)},[i,o]);l!=null&&l.validationDetails.valid&&(l=void 0);let d=a.useContext(Eb),f=a.useMemo(()=>r?Array.isArray(r)?r.flatMap(K=>kr(d[K])):kr(d[r]):[],[d,r]),[b,p]=a.useState(d),[m,v]=a.useState(!1);d!==b&&(p(d),v(!1));let g=a.useMemo(()=>Sl(m?[]:f),[m,f]),x=a.useRef(wt),[$,D]=a.useState(wt),P=a.useRef(wt),F=()=>{if(!R)return;I(!1);let K=c||l||x.current;tr(K,P.current)||(P.current=K,D(K))},[R,I]=a.useState(!1);return a.useEffect(F),{realtimeValidation:u||g||c||l||wt,displayValidation:s==="native"?u||g||$:u||g||c||l||$,updateValidation(K){s==="aria"&&!tr($,K)?D(K):x.current=K},resetValidation(){let K=wt;tr(K,P.current)||(P.current=K,D(K)),s==="native"&&I(!1),v(!0)},commitValidation(){s==="native"&&I(!0),v(!0)}}}function kr(t){return t?Array.isArray(t)?t:[t]:[]}function Pb(t,e){if(typeof t=="function"){let n=t(e);if(n&&typeof n!="boolean")return kr(n)}return[]}function Sl(t){return t.length?{isInvalid:!0,validationErrors:t,validationDetails:Sa}:null}function tr(t,e){return t===e?!0:!!t&&!!e&&t.isInvalid===e.isInvalid&&t.validationErrors.length===e.validationErrors.length&&t.validationErrors.every((n,r)=>n===e.validationErrors[r])&&Object.entries(t.validationDetails).every(([n,r])=>e.validationDetails[n]===r)}const Pa=a.createContext(null),Kn=a.createContext({}),Ta=a.createContext(null),Tb=a.forwardRef(function(e,n){let{render:r}=a.useContext(Ta);return y.createElement(y.Fragment,null,r(e,n))});function ka(t,e){var l;let n=t==null?void 0:t.renderDropIndicator,r=(l=t==null?void 0:t.isVirtualDragging)==null?void 0:l.call(t),o=a.useCallback(i=>{if(r||e!=null&&e.isDropTarget(i))return n?n(i):y.createElement(Tb,{target:i})},[e==null?void 0:e.target,r,n]);return t!=null&&t.useDropIndicator?o:void 0}function kb(t,e,n){var l,i,s;let r=t.focusedKey,o=null;if((l=e==null?void 0:e.isVirtualDragging)!=null&&l.call(e)&&((i=n==null?void 0:n.target)==null?void 0:i.type)==="item"&&(o=n.target.key,n.target.dropPosition==="after")){let u=n.collection.getKeyAfter(o),c=null;if(u!=null){let d=((s=n.collection.getItem(o))==null?void 0:s.level)??0;for(;u!=null;){let f=n.collection.getItem(u);if(!f)break;if(f.type!=="item"){u=n.collection.getKeyAfter(u);continue}if((f.level??0)<=d)break;c=u,u=n.collection.getKeyAfter(u)}}o=u??c??o}return a.useMemo(()=>new Set([r,o].filter(u=>u!=null)),[r,o])}const Rn=new WeakMap;function Db(t){return typeof t=="string"?t.replace(/\s*/g,""):""+t}function Da(t,e){let n=Rn.get(t);if(!n)throw new Error("Unknown list");return`${n.id}-option-${Db(e)}`}function Mb(t,e,n){let r=pe(t,{labelable:!0}),o=t.selectionBehavior||"toggle",l=t.orientation||"vertical",i=t.linkBehavior||(o==="replace"?"action":"override");o==="toggle"&&i==="action"&&(i="override");let{listProps:s}=Wp({...t,ref:n,selectionManager:e.selectionManager,collection:e.collection,disabledKeys:e.disabledKeys,linkBehavior:i}),{focusWithinProps:u}=Tn({onFocusWithin:t.onFocus,onBlurWithin:t.onBlur,onFocusWithinChange:t.onFocusChange}),c=ve(t.id);Rn.set(e,{id:c,shouldUseVirtualFocus:t.shouldUseVirtualFocus,shouldSelectOnPressUp:t.shouldSelectOnPressUp,shouldFocusOnHover:t.shouldFocusOnHover,isVirtualized:t.isVirtualized,onAction:t.onAction,linkBehavior:i,UNSTABLE_itemBehavior:t.UNSTABLE_itemBehavior});let{labelProps:d,fieldProps:f}=$i({...t,id:c,labelElementType:"span"});return{labelProps:d,listBoxProps:J(r,u,e.selectionManager.selectionMode==="multiple"?{"aria-multiselectable":"true"}:{},{role:"listbox","aria-orientation":l,...J(f,s)})}}function Ab(t,e,n){var B,K;let{key:r}=t,o=Rn.get(e),l=t.isDisabled??e.selectionManager.isDisabled(r),i=t.isSelected??e.selectionManager.isSelected(r),s=t.shouldSelectOnPressUp??(o==null?void 0:o.shouldSelectOnPressUp),u=t.shouldFocusOnHover??(o==null?void 0:o.shouldFocusOnHover),c=t.shouldUseVirtualFocus??(o==null?void 0:o.shouldUseVirtualFocus),d=t.isVirtualized??(o==null?void 0:o.isVirtualized),f=Ft(),b=Ft(),p={role:"option","aria-disabled":l||void 0,"aria-selected":e.selectionManager.selectionMode!=="none"?i:void 0,"aria-label":t["aria-label"],"aria-labelledby":f,"aria-describedby":b},m=e.collection.getItem(r);if(d){let _=Number(m==null?void 0:m.index);p["aria-posinset"]=Number.isNaN(_)?void 0:_+1,p["aria-setsize"]=ya(e.collection)}let v=o!=null&&o.onAction?()=>{var _;return(_=o==null?void 0:o.onAction)==null?void 0:_.call(o,r)}:void 0,g=Da(e,r),{itemProps:x,isPressed:$,isFocused:D,hasAction:P,allowsSelection:F}=Gp({selectionManager:e.selectionManager,key:r,ref:n,shouldSelectOnPressUp:s,allowsDifferentPressOrigin:s&&u,isVirtualized:d,shouldUseVirtualFocus:c,isDisabled:l,onAction:v||(B=m==null?void 0:m.props)!=null&&B.onAction?tt((K=m==null?void 0:m.props)==null?void 0:K.onAction,v):void 0,linkBehavior:o==null?void 0:o.linkBehavior,UNSTABLE_itemBehavior:o==null?void 0:o.UNSTABLE_itemBehavior,id:g}),{hoverProps:R}=Gt({isDisabled:l||!u,onHoverStart(){Nt()||(e.selectionManager.setFocused(!0),e.selectionManager.setFocusedKey(r))}}),I=pe(m==null?void 0:m.props);delete I.id;let k=zl(m==null?void 0:m.props);return{optionProps:{...p,...J(I,x,R,k),id:g},labelProps:{id:f},descriptionProps:{id:b},isFocused:D,isFocusVisible:D&&e.selectionManager.isFocused&&Nt(),isSelected:i,isDisabled:l,isPressed:$,allowsSelection:F,hasAction:P}}function Lb(t){let{heading:e,"aria-label":n}=t,r=ve();return{itemProps:{role:"presentation"},headingProps:e?{id:r,role:"presentation",onMouseDown:o=>{o.preventDefault()}}:{},groupProps:{role:"group","aria-label":n,"aria-labelledby":e?r:void 0}}}class Dr{constructor(e){this.keyMap=new Map,this.firstKey=null,this.lastKey=null,this.iterable=e;let n=i=>{if(this.keyMap.set(i.key,i),i.childNodes&&i.type==="section")for(let s of i.childNodes)n(s)};for(let i of e)n(i);let r=null,o=0,l=0;for(let[i,s]of this.keyMap)r?(r.nextKey=i,s.prevKey=r.key):(this.firstKey=i,s.prevKey=void 0),s.type==="item"&&(s.index=o++),(s.type==="section"||s.type==="item")&&l++,r=s,r.nextKey=void 0;this._size=l,this.lastKey=(r==null?void 0:r.key)??null}*[Symbol.iterator](){yield*this.iterable}get size(){return this._size}getKeys(){return this.keyMap.keys()}getKeyBefore(e){let n=this.keyMap.get(e);return n?n.prevKey??null:null}getKeyAfter(e){let n=this.keyMap.get(e);return n?n.nextKey??null:null}getFirstKey(){return this.firstKey}getLastKey(){return this.lastKey}getItem(e){return this.keyMap.get(e)??null}at(e){const n=[...this.getKeys()];return this.getItem(n[e])}getChildren(e){let n=this.keyMap.get(e);return(n==null?void 0:n.childNodes)||[]}}function Ma(t){let{filter:e,layoutDelegate:n}=t,r=eb(t),o=a.useMemo(()=>t.disabledKeys?new Set(t.disabledKeys):new Set,[t.disabledKeys]),l=a.useCallback(c=>e?new Dr(e(c)):new Dr(c),[e]),i=a.useMemo(()=>({suppressTextValueWarning:t.suppressTextValueWarning}),[t.suppressTextValueWarning]),s=Jp(t,l,i),u=a.useMemo(()=>new to(s,r,{layoutDelegate:n}),[s,r,n]);return Aa(s,u),{collection:s,disabledKeys:o,selectionManager:u}}function Kb(t,e){let n=a.useMemo(()=>e?t.collection.filter(e):t.collection,[t.collection,e]),r=t.selectionManager.withCollection(n);return Aa(n,r),{collection:n,selectionManager:r,disabledKeys:t.disabledKeys}}function Aa(t,e){const n=a.useRef(null);a.useEffect(()=>{if(e.focusedKey!=null&&!t.getItem(e.focusedKey)&&n.current){let r=n.current.getKeyAfter(e.focusedKey),o=null;for(;r!=null;){let l=t.getItem(r);if(l&&l.type==="item"&&!e.isDisabled(r)){o=r;break}r=n.current.getKeyAfter(r)}if(o==null)for(r=n.current.getKeyBefore(e.focusedKey);r!=null;){let l=t.getItem(r);if(l&&l.type==="item"&&!e.isDisabled(r)){o=r;break}r=n.current.getKeyBefore(r)}e.setFocusedKey(o)}n.current=t},[t,e])}const Fn=a.createContext(null),vt=a.createContext(null),Rb=a.forwardRef(function(e,n){[e,n]=Ce(e,n,Fn);let r=a.useContext(vt);return r?y.createElement(La,{state:r,props:e,listBoxRef:n}):y.createElement(ks,{content:y.createElement(Cp,e)},o=>y.createElement(Fb,{props:e,listBoxRef:n,collection:o}))});function Fb({props:t,listBoxRef:e,collection:n}){t={...t,collection:n,children:null,items:null};let{layoutDelegate:r}=a.useContext(Zr),o=Ma({...t,layoutDelegate:r});return y.createElement(La,{state:o,props:t,listBoxRef:e})}function La({state:t,props:e,listBoxRef:n}){[e,n]=Ce(e,n,Dp);let{dragAndDropHooks:r,layout:o="stack",orientation:l="vertical",filter:i}=e,s=Kb(t,i),{collection:u,selectionManager:c}=s,d=!!(r!=null&&r.useDraggableCollectionState),f=!!(r!=null&&r.useDroppableCollectionState),{direction:b}=$t(),{disabledBehavior:p,disabledKeys:m}=c,v=eo({usage:"search",sensitivity:"base"}),{isVirtualized:g,layoutDelegate:x,dropTargetDelegate:$,CollectionRoot:D}=a.useContext(Zr),P=a.useMemo(()=>e.keyboardDelegate||new Qr({collection:u,collator:v,ref:n,disabledKeys:m,disabledBehavior:p,layout:o,orientation:l,direction:b,layoutDelegate:x}),[u,v,n,p,m,l,b,e.keyboardDelegate,o,x]),{listBoxProps:F}=Mb({...e,shouldSelectOnPressUp:d||e.shouldSelectOnPressUp,keyboardDelegate:P,isVirtualized:g},s,n);a.useRef(d),a.useRef(f),a.useEffect(()=>{},[d,f]);let R,I,k,B=!1,K=null,_=a.useRef(null);if(d&&r){R=r.useDraggableCollectionState({collection:u,selectionManager:c,preview:r.renderDragPreview?_:void 0}),r.useDraggableCollection({},R,n);let S=r.DragPreview;K=r.renderDragPreview?y.createElement(S,{ref:_},r.renderDragPreview):null}if(f&&r){I=r.useDroppableCollectionState({collection:u,selectionManager:c});let S=r.dropTargetDelegate||$||new r.ListDropTargetDelegate(u,n,{orientation:l,layout:o,direction:b});k=r.useDroppableCollection({keyboardDelegate:P,dropTargetDelegate:S},I,n),B=I.isDropTarget({type:"root"})}let{focusProps:U,isFocused:z,isFocusVisible:h}=kn(),C=s.collection.size===0,M={isDropTarget:B,isEmpty:C,isFocused:z,isFocusVisible:h,layout:e.layout||"stack",orientation:l,state:s},E=Ee({...e,children:void 0,defaultClassName:"react-aria-ListBox",values:M}),w=null;C&&e.renderEmptyState&&(w=y.createElement("div",{role:"option",style:{display:"contents"}},e.renderEmptyState(M)));let T=pe(e,{global:!0});return y.createElement(Fi,null,y.createElement(fe.div,{...J(T,E,F,U,k==null?void 0:k.collectionProps),ref:n,slot:e.slot||void 0,onScroll:e.onScroll,"data-drop-target":B||void 0,"data-empty":C||void 0,"data-focused":z||void 0,"data-focus-visible":h||void 0,"data-layout":e.layout||"stack","data-orientation":l},y.createElement(rt,{values:[[Fn,e],[vt,s],[Kn,{dragAndDropHooks:r,dragState:R,dropState:I}],[Fp,{elementType:"div"}],[Ta,{render:Nb}],[wp,{name:"ListBoxSection",render:Ka}]]},y.createElement(Kp,null,y.createElement(D,{collection:u,scrollRef:n,persistedKeys:kb(c,r,I),renderDropIndicator:ka(r,I)}))),w,K))}function Ka(t,e,n,r="react-aria-ListBoxSection"){let o=a.useContext(vt),{dragAndDropHooks:l,dropState:i}=a.useContext(Kn),{CollectionBranch:s}=a.useContext(Zr),[u,c]=jr(),{headingProps:d,groupProps:f}=Lb({heading:c,"aria-label":t["aria-label"]??void 0}),b=Ee({...t,id:void 0,children:void 0,defaultClassName:r,values:void 0}),p=pe(t,{global:!0});return delete p.id,y.createElement(fe.section,{...J(p,b,f),ref:e},y.createElement(Ap.Provider,{value:{...d,ref:u}},y.createElement(s,{collection:o.collection,parent:n,renderDropIndicator:ka(l,i)})))}const Ib=xp(Sr,Ka),Bb=Ms(wr,function(e,n,r){let o=nt(n),l=a.useContext(vt),{dragAndDropHooks:i,dragState:s,dropState:u}=a.useContext(Kn),c=s&&!(s.isDisabled||s.selectionManager.isDisabled(r.key)),{optionProps:d,labelProps:f,descriptionProps:b,...p}=Ab({key:r.key,"aria-label":e==null?void 0:e["aria-label"]},l,o),{hoverProps:m,isHovered:v}=Gt({isDisabled:!p.allowsSelection&&!p.hasAction&&!c,onHoverStart:r.props.onHoverStart,onHoverChange:r.props.onHoverChange,onHoverEnd:r.props.onHoverEnd}),{keyboardProps:g}=ki(e),{focusProps:x}=Hr(e),$=null;s&&i&&($=i.useDraggableItem({key:r.key,hasAction:p.hasAction},s));let D=null;u&&i&&(D=i.useDroppableItem({target:{type:"item",key:r.key,dropPosition:"on"}},u,o));let P=s&&s.isDragging(r.key),F=Ee({...e,id:void 0,children:e.children,defaultClassName:"react-aria-ListBoxItem",values:{...p,isHovered:v,selectionMode:l.selectionManager.selectionMode,selectionBehavior:l.selectionManager.selectionBehavior,allowsDragging:!!s,isDragging:P,isDropTarget:D==null?void 0:D.isDropTarget}});a.useEffect(()=>{r.textValue},[r.textValue]);let R=e.href?fe.a:fe.div,I=pe(e,{global:!0});return delete I.id,delete I.onClick,e.href&&d.tabIndex==null&&(d.tabIndex=-1),y.createElement(R,{...J(I,F,d,m,g,x,$==null?void 0:$.dragProps,D==null?void 0:D.dropProps),ref:o,"data-allows-dragging":!!s||void 0,"data-selected":p.isSelected||void 0,"data-disabled":p.isDisabled||void 0,"data-hovered":v||void 0,"data-focused":p.isFocused||void 0,"data-focus-visible":p.isFocusVisible||void 0,"data-pressed":p.isPressed||void 0,"data-dragging":P||void 0,"data-drop-target":(D==null?void 0:D.isDropTarget)||void 0,"data-selection-mode":l.selectionManager.selectionMode==="none"?void 0:l.selectionManager.selectionMode},y.createElement(rt,{values:[[Ut,{slots:{[bn]:f,label:f,description:b}}],[Rp,{isSelected:p.isSelected}]]},F.children))});function Nb(t,e){e=nt(e);let{dragAndDropHooks:n,dropState:r}=a.useContext(Kn),{dropIndicatorProps:o,isHidden:l,isDropTarget:i}=n.useDropIndicator(t,r,e);return l?null:y.createElement(Vb,{...t,dropIndicatorProps:o,isDropTarget:i,ref:e})}function Ob(t,e){let{dropIndicatorProps:n,isDropTarget:r,...o}=t,l=Ee({...o,defaultClassName:"react-aria-DropIndicator",values:{isDropTarget:r}});return y.createElement(y.Fragment,null,y.createElement(fe.div,{...n,...l,role:"option",ref:e,"data-drop-target":r||void 0}))}const Vb=a.forwardRef(Ob);Ms(Er,function(e,n,r){let o=a.useContext(vt),{isLoading:l,onLoadMore:i,scrollOffset:s,...u}=e,c=a.useRef(null),d=a.useMemo(()=>({onLoadMore:i,collection:o==null?void 0:o.collection,sentinelRef:c,scrollOffset:s}),[i,s,o==null?void 0:o.collection]);gc(d,c);let f=Ee({...u,id:void 0,children:r.rendered,defaultClassName:"react-aria-ListBoxLoadingIndicator",values:void 0}),b={tabIndex:-1};return y.createElement(y.Fragment,null,y.createElement("div",{style:{position:"relative",width:0,height:0},inert:$c(!0)},y.createElement("div",{"data-testid":"loadMoreSentinel",ref:c,style:{position:"absolute",height:1,width:1}})),l&&f.children&&y.createElement(y.Fragment,null,y.createElement(fe.div,{...J(pe(e,{global:!0}),b),...f,role:"option",ref:n},f.children)))});function _b(t){let{description:e,errorMessage:n,isInvalid:r,validationState:o}=t,{labelProps:l,fieldProps:i}=$i(t),s=Ft([!!e,!!n,r,o]),u=Ft([!!e,!!n,r,o]);return i=J(i,{"aria-describedby":[s,u,t["aria-describedby"]].filter(Boolean).join(" ")||void 0}),{labelProps:l,fieldProps:i,descriptionProps:{id:s},errorMessageProps:{id:u}}}function jb(t,e,n){let{validationBehavior:r,focus:o}=t;ne(()=>{if(r==="native"&&(n!=null&&n.current)&&!n.current.disabled){let c=e.realtimeValidation.isInvalid?e.realtimeValidation.validationErrors.join(" ")||"Invalid value.":"";n.current.setCustomValidity(c),n.current.hasAttribute("title")||(n.current.title=""),e.realtimeValidation.isInvalid||e.updateValidation(Hb(n.current))}});let l=a.useRef(!1),i=Pe(()=>{l.current||e.resetValidation()}),s=Pe(c=>{var f,b;e.displayValidation.isInvalid||e.commitValidation();let d=(f=n==null?void 0:n.current)==null?void 0:f.form;!c.defaultPrevented&&n&&d&&Wb(d)===n.current&&(o?o():(b=n.current)==null||b.focus(),Qd("keyboard")),c.preventDefault()}),u=Pe(()=>{e.commitValidation()});a.useEffect(()=>{let c=n==null?void 0:n.current;if(!c)return;let d=c.form,f=d==null?void 0:d.reset;return d&&(d.reset=()=>{l.current=!window.event||window.event.type==="message"&&j(window.event)instanceof MessagePort,f==null||f.call(d),l.current=!1}),c.addEventListener("invalid",s),c.addEventListener("change",u),d==null||d.addEventListener("reset",i),()=>{c.removeEventListener("invalid",s),c.removeEventListener("change",u),d==null||d.removeEventListener("reset",i),d&&(d.reset=f)}},[n,r])}function zb(t){let e=t.validity;return{badInput:e.badInput,customError:e.customError,patternMismatch:e.patternMismatch,rangeOverflow:e.rangeOverflow,rangeUnderflow:e.rangeUnderflow,stepMismatch:e.stepMismatch,tooLong:e.tooLong,tooShort:e.tooShort,typeMismatch:e.typeMismatch,valueMissing:e.valueMissing,valid:e.valid}}function Hb(t){return{isInvalid:!t.validity.valid,validationDetails:zb(t),validationErrors:t.validationMessage?[t.validationMessage]:[]}}function Wb(t){var e;for(let n=0;n{var $;($=f.onClick)==null||$.call(f,x),Vu(x,v,t.href,t.routerOptions)}})}}const Ub=a.createContext(null),qb=a.forwardRef(function(e,n){[e,n]=Ce(e,n,Ub);let r=e.href&&!e.isDisabled?"a":"span",{linkProps:o,isPressed:l}=Gb({...e,elementType:r},n),i=fe[r],{hoverProps:s,isHovered:u}=Gt(e),{focusProps:c,isFocused:d,isFocusVisible:f}=kn(),b=Ee({...e,defaultClassName:"react-aria-Link",values:{isCurrent:!!e["aria-current"],isDisabled:e.isDisabled||!1,isPressed:l,isHovered:u,isFocused:d,isFocusVisible:f}}),p=pe(e,{global:!0});return delete p.onClick,y.createElement(i,{ref:n,slot:e.slot||void 0,...J(p,b,o,s,c),"data-focused":d||void 0,"data-hovered":u||void 0,"data-pressed":l||void 0,"data-focus-visible":f||void 0,"data-current":!!e["aria-current"]||void 0,"data-disabled":e.isDisabled||void 0},b.children)}),Ra=a.createContext({}),Pl=({children:t,className:e,...n})=>{const r=y.useMemo(()=>Ad(),[]);return A.jsx(Ra,{value:{slots:r},children:A.jsx(qb,{...n,className:Te(e,r==null?void 0:r.base()),children:o=>A.jsx(A.Fragment,{children:typeof t=="function"?t(o):t})})})},Yb=({children:t,className:e,...n})=>{const{slots:r}=a.useContext(Ra);return A.jsx(Ae.span,{className:he(r==null?void 0:r.icon,e),"data-default-icon":Ai(!t),"data-slot":"link-icon",...n,children:t??A.jsx(gf,{"data-slot":"link-default-icon"})})},Ih=Object.assign(Pl,{Root:Pl,Icon:Yb}),Xb=a.createContext({}),Zb="__button_group_child",Tl=({children:t,className:e,fullWidth:n,isDisabled:r,isIconOnly:o,size:l,slot:i,style:s,variant:u,[Zb]:c,...d})=>{const f=a.useContext(Xb),b=c===!0,p=l??(b?f==null?void 0:f.size:void 0),m=u??(b?f==null?void 0:f.variant:void 0),v=r??(b?f==null?void 0:f.isDisabled:void 0),g=n??(b?f==null?void 0:f.fullWidth:void 0),x=Ed({fullWidth:g,isIconOnly:o,size:p,variant:m});return A.jsx(Gr,{className:Te(e,x),"data-slot":"button",isDisabled:v,slot:i,style:s,...d,children:$=>typeof t=="function"?t($):t})},Bh=Object.assign(Tl,{Root:Tl}),xt=a.createContext({}),kl=({children:t,className:e,variant:n="default",...r})=>{const o=y.useMemo(()=>wd({variant:n}),[n]),l=A.jsx(Ae.div,{className:o.base({className:e}),"data-slot":"card",...r,children:t});return A.jsx(xt,{value:{slots:o},children:n==="transparent"?l:A.jsx(Li,{value:{variant:n},children:l})})},Jb=({className:t,...e})=>{const{slots:n}=a.useContext(xt);return A.jsx(Ae.div,{className:he(n==null?void 0:n.header,t),"data-slot":"card-header",...e})},Qb=({children:t,className:e,...n})=>{const{slots:r}=a.useContext(xt);return A.jsx(Ae.h3,{className:he(r==null?void 0:r.title,e),"data-slot":"card-title",...n,children:t})},eh=({children:t,className:e,...n})=>{const{slots:r}=a.useContext(xt);return A.jsx(Ae.p,{className:he(r==null?void 0:r.description,e),"data-slot":"card-description",...n,children:t})},th=({className:t,...e})=>{const{slots:n}=a.useContext(xt);return A.jsx(Ae.div,{className:he(n==null?void 0:n.content,t),"data-slot":"card-content",...e})},nh=({className:t,...e})=>{const{slots:n}=a.useContext(xt);return A.jsx(Ae.div,{className:he(n==null?void 0:n.footer,t),"data-slot":"card-footer",...e})},Nh=Object.assign(kl,{Root:kl,Header:Jb,Title:Qb,Description:eh,Content:th,Footer:nh}),Fa={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valueMissing:!1,valid:!0},Ia={...Fa,customError:!0,valid:!1},St={isInvalid:!1,validationDetails:Fa,validationErrors:[]},rh=a.createContext({}),Mr="__reactAriaFormValidationState";function oh(t){if(t[Mr]){let{realtimeValidation:e,displayValidation:n,updateValidation:r,resetValidation:o,commitValidation:l}=t[Mr];return{realtimeValidation:e,displayValidation:n,updateValidation:r,resetValidation:o,commitValidation:l}}return lh(t)}function lh(t){let{isInvalid:e,validationState:n,name:r,value:o,builtinValidation:l,validate:i,validationBehavior:s="aria"}=t;n&&(e||(e=n==="invalid"));let u=e!==void 0?{isInvalid:e,validationErrors:[],validationDetails:Ia}:null,c=a.useMemo(()=>{if(!i||o==null)return null;let K=ih(i,o);return Dl(K)},[i,o]);l!=null&&l.validationDetails.valid&&(l=void 0);let d=a.useContext(rh),f=a.useMemo(()=>r?Array.isArray(r)?r.flatMap(K=>Ar(d[K])):Ar(d[r]):[],[d,r]),[b,p]=a.useState(d),[m,v]=a.useState(!1);d!==b&&(p(d),v(!1));let g=a.useMemo(()=>Dl(m?[]:f),[m,f]),x=a.useRef(St),[$,D]=a.useState(St),P=a.useRef(St),F=()=>{if(!R)return;I(!1);let K=c||l||x.current;nr(K,P.current)||(P.current=K,D(K))},[R,I]=a.useState(!1);return a.useEffect(F),{realtimeValidation:u||g||c||l||St,displayValidation:s==="native"?u||g||$:u||g||c||l||$,updateValidation(K){s==="aria"&&!nr($,K)?D(K):x.current=K},resetValidation(){let K=St;nr(K,P.current)||(P.current=K,D(K)),s==="native"&&I(!1),v(!0)},commitValidation(){s==="native"&&I(!0),v(!0)}}}function Ar(t){return t?Array.isArray(t)?t:[t]:[]}function ih(t,e){if(typeof t=="function"){let n=t(e);if(n&&typeof n!="boolean")return Ar(n)}return[]}function Dl(t){return t.length?{isInvalid:!0,validationErrors:t,validationDetails:Ia}:null}function nr(t,e){return t===e?!0:!!t&&!!e&&t.isInvalid===e.isInvalid&&t.validationErrors.length===e.validationErrors.length&&t.validationErrors.every((n,r)=>n===e.validationErrors[r])&&Object.entries(t.validationDetails).every(([n,r])=>e.validationDetails[n]===r)}const sh=typeof document<"u"?y.useInsertionEffect??y.useLayoutEffect:()=>{};function ah(t,e,n){let[r,o]=a.useState(t||e),l=a.useRef(r),i=a.useRef(t!==void 0),s=t!==void 0;a.useEffect(()=>{i.current,i.current=s},[s]);let u=s?t:r;sh(()=>{l.current=u});let[,c]=a.useReducer(()=>({}),{}),d=a.useCallback((f,...b)=>{let p=typeof f=="function"?f(l.current):f;Object.is(l.current,p)||(l.current=p,o(p),c(),n==null||n(p,...b))},[n]);return[u,d]}const Ba=a.createContext({}),Ml=({children:t,className:e,color:n,size:r,variant:o,...l})=>{const i=y.useMemo(()=>Sd({color:n,size:r,variant:o}),[n,r,o]),s=y.useMemo(()=>typeof t=="string"||typeof t=="number"?A.jsx(Na,{children:t}):t,[t]);return A.jsx(Ba,{value:{slots:i},children:A.jsx(Ae.span,{...l,className:he(i.base,e),"data-slot":"chip",children:s})})},Na=({children:t,className:e,...n})=>{const{slots:r}=a.useContext(Ba);return A.jsx(Ae.span,{className:he(r==null?void 0:r.label,e),"data-slot":"chip-label",...n,children:t})},Oh=Object.assign(Ml,{Root:Ml,Label:Na}),In=a.createContext({});let uh=t=>{let{onHoverStart:e,onHoverChange:n,onHoverEnd:r,...o}=t;return o};const ch=Ht(function(e,n){[e,n]=Ce(e,n,In);let{hoverProps:r,isHovered:o}=Gt({...e,isDisabled:e.disabled}),{isFocused:l,isFocusVisible:i,focusProps:s}=kn({isTextInput:!0,autoFocus:e.autoFocus}),u=!!e["aria-invalid"]&&e["aria-invalid"]!=="false",c=Ee({...e,values:{isHovered:o,isFocused:l,isFocusVisible:i,isDisabled:e.disabled||!1,isInvalid:u},defaultClassName:"react-aria-Input"});return y.createElement(fe.input,{...J(uh(e),s,r),...c,ref:n,"data-focused":l||void 0,"data-disabled":e.disabled||void 0,"data-hovered":o||void 0,"data-focus-visible":i||void 0,"data-invalid":u||void 0})});function Oa(t,e){let{inputElementType:n="input",isDisabled:r=!1,isRequired:o=!1,isReadOnly:l=!1,type:i="text",validationBehavior:s="aria"}=t,[u,c]=ah(t.value,t.defaultValue||"",t.onChange),{focusableProps:d}=Pn(t,e),f=oh({...t,value:u}),{isInvalid:b,validationErrors:p,validationDetails:m}=f.displayValidation,{labelProps:v,fieldProps:g,descriptionProps:x,errorMessageProps:$}=_b({...t,isInvalid:b,errorMessage:t.errorMessage||p}),D=pe(t,{labelable:!0});const P={type:i,pattern:t.pattern};let[F]=a.useState(u);return Xl(e,t.defaultValue??F,c),jb(t,f,e),{labelProps:v,inputProps:J(D,n==="input"?P:void 0,{disabled:r,readOnly:l,required:o&&s==="native","aria-required":o&&s==="aria"||void 0,"aria-invalid":b||void 0,"aria-errormessage":t["aria-errormessage"],"aria-activedescendant":t["aria-activedescendant"],"aria-autocomplete":t["aria-autocomplete"],"aria-haspopup":t["aria-haspopup"],"aria-controls":t["aria-controls"],value:u,onChange:R=>c(j(R).value),autoComplete:t.autoComplete,autoCapitalize:t.autoCapitalize,maxLength:t.maxLength,minLength:t.minLength,name:t.name,form:t.form,placeholder:t.placeholder,inputMode:t.inputMode,autoCorrect:t.autoCorrect,spellCheck:t.spellCheck,[parseInt(y.version,10)>=17?"enterKeyHint":"enterkeyhint"]:t.enterKeyHint,onCopy:t.onCopy,onCut:t.onCut,onPaste:t.onPaste,onCompositionEnd:t.onCompositionEnd,onCompositionStart:t.onCompositionStart,onCompositionUpdate:t.onCompositionUpdate,onSelect:t.onSelect,onBeforeInput:t.onBeforeInput,onInput:t.onInput,...d,...g}),descriptionProps:x,errorMessageProps:$,isInvalid:b,validationErrors:p,validationDetails:m}}var Va={};Va={buttonLabel:"عرض المقترحات",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} خيار`,other:()=>`${e.number(t.optionCount)} خيارات`})} متاحة.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`المجموعة المدخلة ${t.groupTitle}, مع ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} خيار`,other:()=>`${e.number(t.groupCount)} خيارات`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", محدد",other:""},t.isSelected)}`,listboxLabel:"مقترحات",selectedAnnouncement:t=>`${t.optionText}، محدد`};var _a={};_a={buttonLabel:"Покажи предложения",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} опция`,other:()=>`${e.number(t.optionCount)} опции`})} на разположение.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Въведена група ${t.groupTitle}, с ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} опция`,other:()=>`${e.number(t.groupCount)} опции`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", избрани",other:""},t.isSelected)}`,listboxLabel:"Предложения",selectedAnnouncement:t=>`${t.optionText}, избрани`};var ja={};ja={buttonLabel:"Zobrazit doporučení",countAnnouncement:(t,e)=>`K dispozici ${e.plural(t.optionCount,{one:()=>`je ${e.number(t.optionCount)} možnost`,other:()=>`jsou/je ${e.number(t.optionCount)} možnosti/-í`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Zadaná skupina „${t.groupTitle}“ ${e.plural(t.groupCount,{one:()=>`s ${e.number(t.groupCount)} možností`,other:()=>`se ${e.number(t.groupCount)} možnostmi`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:" (vybráno)",other:""},t.isSelected)}`,listboxLabel:"Návrhy",selectedAnnouncement:t=>`${t.optionText}, vybráno`};var za={};za={buttonLabel:"Vis forslag",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} mulighed tilgængelig`,other:()=>`${e.number(t.optionCount)} muligheder tilgængelige`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Angivet gruppe ${t.groupTitle}, med ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} mulighed`,other:()=>`${e.number(t.groupCount)} muligheder`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", valgt",other:""},t.isSelected)}`,listboxLabel:"Forslag",selectedAnnouncement:t=>`${t.optionText}, valgt`};var Ha={};Ha={buttonLabel:"Empfehlungen anzeigen",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} Option`,other:()=>`${e.number(t.optionCount)} Optionen`})} verfügbar.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Eingetretene Gruppe ${t.groupTitle}, mit ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} Option`,other:()=>`${e.number(t.groupCount)} Optionen`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", ausgewählt",other:""},t.isSelected)}`,listboxLabel:"Empfehlungen",selectedAnnouncement:t=>`${t.optionText}, ausgewählt`};var Wa={};Wa={buttonLabel:"Προβολή προτάσεων",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} επιλογή`,other:()=>`${e.number(t.optionCount)} επιλογές `})} διαθέσιμες.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Εισαγμένη ομάδα ${t.groupTitle}, με ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} επιλογή`,other:()=>`${e.number(t.groupCount)} επιλογές`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", επιλεγμένο",other:""},t.isSelected)}`,listboxLabel:"Προτάσεις",selectedAnnouncement:t=>`${t.optionText}, επιλέχθηκε`};var Ga={};Ga={focusAnnouncement:(t,e)=>`${e.select({true:()=>`Entered group ${t.groupTitle}, with ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} option`,other:()=>`${e.number(t.groupCount)} options`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", selected",other:""},t.isSelected)}`,countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} option`,other:()=>`${e.number(t.optionCount)} options`})} available.`,selectedAnnouncement:t=>`${t.optionText}, selected`,buttonLabel:"Show suggestions",listboxLabel:"Suggestions"};var Ua={};Ua={buttonLabel:"Mostrar sugerencias",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opción`,other:()=>`${e.number(t.optionCount)} opciones`})} disponible(s).`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Se ha unido al grupo ${t.groupTitle}, con ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opción`,other:()=>`${e.number(t.groupCount)} opciones`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", seleccionado",other:""},t.isSelected)}`,listboxLabel:"Sugerencias",selectedAnnouncement:t=>`${t.optionText}, seleccionado`};var qa={};qa={buttonLabel:"Kuva soovitused",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} valik`,other:()=>`${e.number(t.optionCount)} valikud`})} saadaval.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Sisestatud rühm ${t.groupTitle}, valikuga ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} valik`,other:()=>`${e.number(t.groupCount)} valikud`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", valitud",other:""},t.isSelected)}`,listboxLabel:"Soovitused",selectedAnnouncement:t=>`${t.optionText}, valitud`};var Ya={};Ya={buttonLabel:"Näytä ehdotukset",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} vaihtoehto`,other:()=>`${e.number(t.optionCount)} vaihtoehdot`})} saatavilla.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Mentiin ryhmään ${t.groupTitle}, ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} vaihtoehdon`,other:()=>`${e.number(t.groupCount)} vaihtoehdon`})} kanssa.`,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", valittu",other:""},t.isSelected)}`,listboxLabel:"Ehdotukset",selectedAnnouncement:t=>`${t.optionText}, valittu`};var Xa={};Xa={buttonLabel:"Afficher les suggestions",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} option`,other:()=>`${e.number(t.optionCount)} options`})} disponible(s).`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Groupe ${t.groupTitle} rejoint, avec ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} option`,other:()=>`${e.number(t.groupCount)} options`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", sélectionné(s)",other:""},t.isSelected)}`,listboxLabel:"Suggestions",selectedAnnouncement:t=>`${t.optionText}, sélectionné`};var Za={};Za={buttonLabel:"הצג הצעות",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`אפשרות ${e.number(t.optionCount)}`,other:()=>`${e.number(t.optionCount)} אפשרויות`})} במצב זמין.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`נכנס לקבוצה ${t.groupTitle}, עם ${e.plural(t.groupCount,{one:()=>`אפשרות ${e.number(t.groupCount)}`,other:()=>`${e.number(t.groupCount)} אפשרויות`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", נבחר",other:""},t.isSelected)}`,listboxLabel:"הצעות",selectedAnnouncement:t=>`${t.optionText}, נבחר`};var Ja={};Ja={buttonLabel:"Prikaži prijedloge",countAnnouncement:(t,e)=>`Dostupno još: ${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opcija`,other:()=>`${e.number(t.optionCount)} opcije/a`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Unesena skupina ${t.groupTitle}, s ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opcijom`,other:()=>`${e.number(t.groupCount)} opcije/a`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", odabranih",other:""},t.isSelected)}`,listboxLabel:"Prijedlozi",selectedAnnouncement:t=>`${t.optionText}, odabrano`};var Qa={};Qa={buttonLabel:"Javaslatok megjelenítése",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} lehetőség`,other:()=>`${e.number(t.optionCount)} lehetőség`})} áll rendelkezésre.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Belépett a(z) ${t.groupTitle} csoportba, amely ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} lehetőséget`,other:()=>`${e.number(t.groupCount)} lehetőséget`})} tartalmaz. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", kijelölve",other:""},t.isSelected)}`,listboxLabel:"Javaslatok",selectedAnnouncement:t=>`${t.optionText}, kijelölve`};var eu={};eu={buttonLabel:"Mostra suggerimenti",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opzione disponibile`,other:()=>`${e.number(t.optionCount)} opzioni disponibili`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Ingresso nel gruppo ${t.groupTitle}, con ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opzione`,other:()=>`${e.number(t.groupCount)} opzioni`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", selezionato",other:""},t.isSelected)}`,listboxLabel:"Suggerimenti",selectedAnnouncement:t=>`${t.optionText}, selezionato`};var tu={};tu={buttonLabel:"候補を表示",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} 個のオプション`,other:()=>`${e.number(t.optionCount)} 個のオプション`})}を利用できます。`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`入力されたグループ ${t.groupTitle}、${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} 個のオプション`,other:()=>`${e.number(t.groupCount)} 個のオプション`})}を含む。`,other:""},t.isGroupChange)}${t.optionText}${e.select({true:"、選択済み",other:""},t.isSelected)}`,listboxLabel:"候補",selectedAnnouncement:t=>`${t.optionText}、選択済み`};var nu={};nu={buttonLabel:"제안 사항 표시",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)}개 옵션`,other:()=>`${e.number(t.optionCount)}개 옵션`})}을 사용할 수 있습니다.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`입력한 그룹 ${t.groupTitle}, ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)}개 옵션`,other:()=>`${e.number(t.groupCount)}개 옵션`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", 선택됨",other:""},t.isSelected)}`,listboxLabel:"제안",selectedAnnouncement:t=>`${t.optionText}, 선택됨`};var ru={};ru={buttonLabel:"Rodyti pasiūlymus",countAnnouncement:(t,e)=>`Yra ${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} parinktis`,other:()=>`${e.number(t.optionCount)} parinktys (-ių)`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Įvesta grupė ${t.groupTitle}, su ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} parinktimi`,other:()=>`${e.number(t.groupCount)} parinktimis (-ių)`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", pasirinkta",other:""},t.isSelected)}`,listboxLabel:"Pasiūlymai",selectedAnnouncement:t=>`${t.optionText}, pasirinkta`};var ou={};ou={buttonLabel:"Rādīt ieteikumus",countAnnouncement:(t,e)=>`Pieejamo opciju skaits: ${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opcija`,other:()=>`${e.number(t.optionCount)} opcijas`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Ievadīta grupa ${t.groupTitle}, ar ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opciju`,other:()=>`${e.number(t.groupCount)} opcijām`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", atlasīta",other:""},t.isSelected)}`,listboxLabel:"Ieteikumi",selectedAnnouncement:t=>`${t.optionText}, atlasīta`};var lu={};lu={buttonLabel:"Vis forslag",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} alternativ`,other:()=>`${e.number(t.optionCount)} alternativer`})} finnes.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Angitt gruppe ${t.groupTitle}, med ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} alternativ`,other:()=>`${e.number(t.groupCount)} alternativer`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", valgt",other:""},t.isSelected)}`,listboxLabel:"Forslag",selectedAnnouncement:t=>`${t.optionText}, valgt`};var iu={};iu={buttonLabel:"Suggesties weergeven",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} optie`,other:()=>`${e.number(t.optionCount)} opties`})} beschikbaar.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Groep ${t.groupTitle} ingevoerd met ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} optie`,other:()=>`${e.number(t.groupCount)} opties`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", geselecteerd",other:""},t.isSelected)}`,listboxLabel:"Suggesties",selectedAnnouncement:t=>`${t.optionText}, geselecteerd`};var su={};su={buttonLabel:"Wyświetlaj sugestie",countAnnouncement:(t,e)=>`dostępna/dostępne(-nych) ${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opcja`,other:()=>`${e.number(t.optionCount)} opcje(-i)`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Dołączono do grupy ${t.groupTitle}, z ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opcją`,other:()=>`${e.number(t.groupCount)} opcjami`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", wybrano",other:""},t.isSelected)}`,listboxLabel:"Sugestie",selectedAnnouncement:t=>`${t.optionText}, wybrano`};var au={};au={buttonLabel:"Mostrar sugestões",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opção`,other:()=>`${e.number(t.optionCount)} opções`})} disponível.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Grupo inserido ${t.groupTitle}, com ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opção`,other:()=>`${e.number(t.groupCount)} opções`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", selecionado",other:""},t.isSelected)}`,listboxLabel:"Sugestões",selectedAnnouncement:t=>`${t.optionText}, selecionado`};var uu={};uu={buttonLabel:"Apresentar sugestões",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opção`,other:()=>`${e.number(t.optionCount)} opções`})} disponível.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Grupo introduzido ${t.groupTitle}, com ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opção`,other:()=>`${e.number(t.groupCount)} opções`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", selecionado",other:""},t.isSelected)}`,listboxLabel:"Sugestões",selectedAnnouncement:t=>`${t.optionText}, selecionado`};var cu={};cu={buttonLabel:"Afișare sugestii",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opțiune`,other:()=>`${e.number(t.optionCount)} opțiuni`})} disponibile.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Grup ${t.groupTitle} introdus, cu ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opțiune`,other:()=>`${e.number(t.groupCount)} opțiuni`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", selectat",other:""},t.isSelected)}`,listboxLabel:"Sugestii",selectedAnnouncement:t=>`${t.optionText}, selectat`};var du={};du={buttonLabel:"Показать предложения",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} параметр`,other:()=>`${e.number(t.optionCount)} параметров`})} доступно.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Введенная группа ${t.groupTitle}, с ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} параметром`,other:()=>`${e.number(t.groupCount)} параметрами`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", выбранными",other:""},t.isSelected)}`,listboxLabel:"Предложения",selectedAnnouncement:t=>`${t.optionText}, выбрано`};var fu={};fu={buttonLabel:"Zobraziť návrhy",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} možnosť`,other:()=>`${e.number(t.optionCount)} možnosti/-í`})} k dispozícii.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Zadaná skupina ${t.groupTitle}, s ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} možnosťou`,other:()=>`${e.number(t.groupCount)} možnosťami`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", vybraté",other:""},t.isSelected)}`,listboxLabel:"Návrhy",selectedAnnouncement:t=>`${t.optionText}, vybraté`};var pu={};pu={buttonLabel:"Prikaži predloge",countAnnouncement:(t,e)=>`Na voljo je ${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opcija`,other:()=>`${e.number(t.optionCount)} opcije`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Vnesena skupina ${t.groupTitle}, z ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opcija`,other:()=>`${e.number(t.groupCount)} opcije`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", izbrano",other:""},t.isSelected)}`,listboxLabel:"Predlogi",selectedAnnouncement:t=>`${t.optionText}, izbrano`};var bu={};bu={buttonLabel:"Prikaži predloge",countAnnouncement:(t,e)=>`Dostupno još: ${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opcija`,other:()=>`${e.number(t.optionCount)} opcije/a`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Unesena grupa ${t.groupTitle}, s ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opcijom`,other:()=>`${e.number(t.groupCount)} optione/a`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", izabranih",other:""},t.isSelected)}`,listboxLabel:"Predlozi",selectedAnnouncement:t=>`${t.optionText}, izabrano`};var hu={};hu={buttonLabel:"Visa förslag",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} alternativ`,other:()=>`${e.number(t.optionCount)} alternativ`})} tillgängliga.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Ingick i gruppen ${t.groupTitle} med ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} alternativ`,other:()=>`${e.number(t.groupCount)} alternativ`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", valda",other:""},t.isSelected)}`,listboxLabel:"Förslag",selectedAnnouncement:t=>`${t.optionText}, valda`};var mu={};mu={buttonLabel:"Önerileri göster",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} seçenek`,other:()=>`${e.number(t.optionCount)} seçenekler`})} kullanılabilir.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Girilen grup ${t.groupTitle}, ile ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} seçenek`,other:()=>`${e.number(t.groupCount)} seçenekler`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", seçildi",other:""},t.isSelected)}`,listboxLabel:"Öneriler",selectedAnnouncement:t=>`${t.optionText}, seçildi`};var gu={};gu={buttonLabel:"Показати пропозиції",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} параметр`,other:()=>`${e.number(t.optionCount)} параметри(-ів)`})} доступно.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Введена група ${t.groupTitle}, з ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} параметр`,other:()=>`${e.number(t.groupCount)} параметри(-ів)`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", вибрано",other:""},t.isSelected)}`,listboxLabel:"Пропозиції",selectedAnnouncement:t=>`${t.optionText}, вибрано`};var $u={};$u={buttonLabel:"显示建议",countAnnouncement:(t,e)=>`有 ${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} 个选项`,other:()=>`${e.number(t.optionCount)} 个选项`})}可用。`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`进入了 ${t.groupTitle} 组,其中有 ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} 个选项`,other:()=>`${e.number(t.groupCount)} 个选项`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", 已选择",other:""},t.isSelected)}`,listboxLabel:"建议",selectedAnnouncement:t=>`${t.optionText}, 已选择`};var yu={};yu={buttonLabel:"顯示建議",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} 選項`,other:()=>`${e.number(t.optionCount)} 選項`})} 可用。`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`輸入的群組 ${t.groupTitle}, 有 ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} 選項`,other:()=>`${e.number(t.groupCount)} 選項`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", 已選取",other:""},t.isSelected)}`,listboxLabel:"建議",selectedAnnouncement:t=>`${t.optionText}, 已選取`};var vu={};vu={"ar-AE":Va,"bg-BG":_a,"cs-CZ":ja,"da-DK":za,"de-DE":Ha,"el-GR":Wa,"en-US":Ga,"es-ES":Ua,"et-EE":qa,"fi-FI":Ya,"fr-FR":Xa,"he-IL":Za,"hr-HR":Ja,"hu-HU":Qa,"it-IT":eu,"ja-JP":tu,"ko-KR":nu,"lt-LT":ru,"lv-LV":ou,"nb-NO":lu,"nl-NL":iu,"pl-PL":su,"pt-BR":au,"pt-PT":uu,"ro-RO":cu,"ru-RU":du,"sk-SK":fu,"sl-SI":pu,"sr-SP":bu,"sv-SE":hu,"tr-TR":mu,"uk-UA":gu,"zh-CN":$u,"zh-TW":yu};function dh(t){return t&&t.__esModule?t.default:t}function fh(t,e){let{buttonRef:n,popoverRef:r,inputRef:o,listBoxRef:l,keyboardDelegate:i,layoutDelegate:s,shouldFocusWrap:u,isReadOnly:c,isDisabled:d}=t,f=a.useRef(null);n=n??f;let b=Yr(dh(vu),"@react-aria/combobox"),{menuTriggerProps:p,menuProps:m}=Op({type:"listbox",isDisabled:d||c},e,n);Rn.set(e,{id:m.id});let{collection:v}=e,{disabledKeys:g}=e.selectionManager,x=a.useMemo(()=>i||new Qr({collection:v,disabledKeys:g,ref:l,layoutDelegate:s}),[i,s,v,g,l]),{collectionProps:$}=ga({selectionManager:e.selectionManager,keyboardDelegate:x,disallowTypeAhead:!0,disallowEmptySelection:!0,shouldFocusWrap:u,ref:o,isVirtualized:!0}),D=zt(),P=L=>{if(!L.nativeEvent.isComposing)switch(L.key){case"Enter":case"Tab":if(e.isOpen&&L.key==="Enter"&&L.preventDefault(),e.isOpen&&l.current&&e.selectionManager.focusedKey!=null){let H=e.collection.getItem(e.selectionManager.focusedKey);if(H!=null&&H.props.href){let oe=l.current.querySelector(`[data-key="${CSS.escape(e.selectionManager.focusedKey.toString())}"]`);L.key==="Enter"&&oe instanceof HTMLAnchorElement&&D.open(oe,L,H.props.href,H.props.routerOptions),e.close();break}else if(H!=null&&H.props.onAction){H.props.onAction(),e.close();break}}(L.key==="Enter"||e.isOpen)&&e.commit();break;case"Escape":(!e.selectionManager.isEmpty||e.inputValue===""||t.allowsCustomValue)&&L.continuePropagation(),e.revert();break;case"ArrowDown":e.open("first","manual");break;case"ArrowUp":e.open("last","manual");break;case"ArrowLeft":case"ArrowRight":e.selectionManager.setFocusedKey(null);break}},F=L=>{let H=(n==null?void 0:n.current)&&n.current===L.relatedTarget,oe=te(r.current,L.relatedTarget);H||oe||(t.onBlur&&t.onBlur(L),e.setFocused(!1))},R=L=>{e.isFocused||(t.onFocus&&t.onFocus(L),e.setFocused(!0))},I=ph([e.selectionManager.selectedKeys,e.selectionManager.selectionMode]),{isInvalid:k,validationErrors:B,validationDetails:K}=e.displayValidation,{labelProps:_,inputProps:U,descriptionProps:z,errorMessageProps:h}=Oa({...t,isRequired:t.selectionMode==="multiple"?t.isRequired&&e.selectionManager.isEmpty:t.isRequired,onChange:e.setInputValue,onKeyDown:c?t.onKeyDown:tt(e.isOpen&&$.onKeyDown,P,t.onKeyDown),onBlur:F,value:e.inputValue,defaultValue:e.defaultInputValue,onFocus:R,autoComplete:"off",validate:void 0,[Mr]:e,"aria-describedby":[I,t["aria-describedby"]].filter(Boolean).join(" ")||void 0},o);Xl(o,e.defaultValue,e.setValue);let C=L=>{var H;L.pointerType==="touch"&&((H=o.current)==null||H.focus(),e.toggle(null,"manual"))},M=L=>{var H;L.pointerType!=="touch"&&((H=o.current)==null||H.focus(),e.toggle(L.pointerType==="keyboard"||L.pointerType==="virtual"?"first":null,"manual"))},E=dn({id:p.id,"aria-label":b.format("buttonLabel"),"aria-labelledby":t["aria-labelledby"]||_.id}),w=dn({id:m.id,"aria-label":b.format("listboxLabel"),"aria-labelledby":t["aria-labelledby"]||_.id}),T=a.useRef(0),S=L=>{var it,Yt;if(d||c)return;if(L.timeStamp-T.current<500){L.preventDefault(),(it=o.current)==null||it.focus();return}let H=j(L).getBoundingClientRect(),oe=L.changedTouches[0],Se=Math.ceil(H.left+.5*H.width),Bn=Math.ceil(H.top+.5*H.height);oe.clientX===Se&&oe.clientY===Bn&&(L.preventDefault(),(Yt=o.current)==null||Yt.focus(),e.toggle(null,"manual"),T.current=L.timeStamp)},N=e.selectionManager.focusedKey!=null&&e.isOpen?e.collection.getItem(e.selectionManager.focusedKey):void 0,q=(N==null?void 0:N.parentKey)??null,W=e.selectionManager.focusedKey??null,X=a.useRef(q),Q=a.useRef(W);a.useEffect(()=>{if(ln()&&N!=null&&W!=null&&W!==Q.current){let L=e.selectionManager.isSelected(W),H=q!=null?e.collection.getItem(q):null,oe=(H==null?void 0:H["aria-label"])||(typeof(H==null?void 0:H.rendered)=="string"?H.rendered:"")||"",Se=b.format("focusAnnouncement",{isGroupChange:(H&&q!==X.current)??!1,groupTitle:oe,groupCount:H?[...$a(H,e.collection)].length:0,optionText:N["aria-label"]||N.textValue||"",isSelected:L});Lt(Se)}X.current=q,Q.current=W});let le=ya(e.collection),Z=a.useRef(le),be=a.useRef(e.isOpen);a.useEffect(()=>{let L=e.isOpen!==be.current&&(e.selectionManager.focusedKey==null||ln());if(e.isOpen&&(L||le!==Z.current)){let H=b.format("countAnnouncement",{optionCount:le});Lt(H)}Z.current=le,be.current=e.isOpen});let we=a.useRef(e.selectedKey);return a.useEffect(()=>{if(ln()&&e.isFocused&&e.selectedItem&&e.selectedKey!==we.current){let L=e.selectedItem["aria-label"]||e.selectedItem.textValue||"",H=b.format("selectedAnnouncement",{optionText:L});Lt(H)}we.current=e.selectedKey}),a.useEffect(()=>{if(e.isOpen)return Ur([o.current,r.current].filter(L=>L!=null))},[e.isOpen,o,r]),cc(()=>{!N&&o.current&&re(ee(o.current))===o.current&&Jr(o.current,null)},[N]),Tt(l,"react-aria-item-action",e.isOpen?()=>{e.close()}:void 0),{labelProps:_,buttonProps:{...p,...E,excludeFromTabOrder:!0,preventFocusOnPress:!0,onPress:C,onPressStart:M,isDisabled:d||c},inputProps:J(U,{role:"combobox","aria-expanded":p["aria-expanded"],"aria-controls":e.isOpen?m.id:void 0,"aria-autocomplete":"list","aria-activedescendant":N?Da(e,N.key):void 0,onTouchEnd:S,autoCorrect:"off",spellCheck:"false"}),listBoxProps:J(m,w,{autoFocus:e.focusStrategy||!0,shouldUseVirtualFocus:!0,shouldSelectOnPressUp:!0,shouldFocusOnHover:!0,linkBehavior:"selection",UNSTABLE_itemBehavior:"action"}),valueProps:{id:I},descriptionProps:z,errorMessageProps:h,isInvalid:k,validationErrors:B,validationDetails:K}}function ph(t=[]){let e=ve(),[n,r]=a.useState(!0),[o,l]=a.useState(t);return o.some((i,s)=>!Object.is(i,t[s]))&&(r(!0),l(t)),a.useEffect(()=>{n&&!document.getElementById(e)&&r(!1)},[e,n,o]),n?e:void 0}function bh(t){var fo;let{defaultFilter:e,menuTrigger:n="input",allowsEmptyCollection:r=!1,allowsCustomValue:o,shouldCloseOnBlur:l=!0,selectionMode:i="single"}=t,[s,u]=a.useState(!1),[c,d]=a.useState(!1),[f,b]=a.useState(null),p=a.useMemo(()=>t.defaultValue!==void 0?t.defaultValue:i==="single"?t.defaultSelectedKey??null:[],[t.defaultValue,t.defaultSelectedKey,i]),m=a.useMemo(()=>t.value!==void 0?t.value:i==="single"?t.selectedKey:void 0,[t.value,t.selectedKey,i]),[v,g]=$n(m,p,t.onChange),x=i==="single"&&Array.isArray(v)?v[0]:v,$=G=>{var se;if(i==="single"){let ue=Array.isArray(G)?G[0]??null:G;g(ue),ue!==x&&((se=t.onSelectionChange)==null||se.call(t,ue))}else{let ue=[];Array.isArray(G)?ue=G:G!=null&&(ue=[G]),g(ue)}},{collection:D,selectionManager:P,disabledKeys:F}=Ma({...t,items:t.items??t.defaultItems,selectionMode:i,disallowEmptySelection:i==="single",allowDuplicateSelectionEvents:!0,selectedKeys:a.useMemo(()=>mh(x),[x]),onSelectionChange:G=>{var se;if(G!=="all")if(i==="single"){let ue=G.values().next().value??null;ue===x?((se=t.onSelectionChange)==null||se.call(t,ue),le(),W()):$(ue)}else $([...G])}}),R=i==="single"?P.firstSelectedKey:null,I=a.useMemo(()=>[...P.selectedKeys].map(G=>D.getItem(G)).filter(G=>G!=null),[P.selectedKeys,D]),[k,B]=$n(t.inputValue,Al(t.defaultInputValue,R,D)||"",t.onInputChange),[K]=a.useState(x),[_]=a.useState(k),U=D,z=a.useMemo(()=>t.items!=null||!e?D:hh(D,k,e),[D,k,e,t.items]),[h,C]=a.useState(z),M=a.useRef("focus"),w=Ln({...t,onOpenChange:G=>{t.onOpenChange&&t.onOpenChange(G,G?M.current:void 0),P.setFocused(G),G||P.setFocusedKey(null)},isOpen:void 0,defaultOpen:void 0}),T=(G=null,se)=>{let ue=se==="manual"||se==="focus"&&n==="focus";(r||z.size>0||ue&&U.size>0||t.items)&&(ue&&!w.isOpen&&t.items===void 0&&u(!0),M.current=se,b(G),w.open())},S=(G=null,se)=>{let ue=se==="manual"||se==="focus"&&n==="focus";!(r||z.size>0||ue&&U.size>0||t.items)&&!w.isOpen||(ue&&!w.isOpen&&t.items===void 0&&u(!0),w.isOpen||(M.current=se),q(G))},N=a.useCallback(()=>{C(s?U:z)},[s,U,z]),q=a.useCallback((G=null)=>{w.isOpen&&N(),b(G),w.toggle()},[w,N]),W=a.useCallback(()=>{w.isOpen&&(N(),w.close())},[w,N]),[X,Q]=a.useState(k),le=()=>{var se;let G=R!=null?((se=D.getItem(R))==null?void 0:se.textValue)??"":"";Q(G),B(G)},Z=a.useRef(x),be=a.useRef(R!=null?((fo=D.getItem(R))==null?void 0:fo.textValue)??"":"");a.useEffect(()=>{var se;c&&(z.size>0||r)&&!w.isOpen&&k!==X&&n!=="manual"&&T(null,"input"),!s&&!r&&w.isOpen&&z.size===0&&W(),x!=null&&x!==Z.current&&i==="single"&&W(),k!==X&&(P.setFocusedKey(null),u(!1),i==="single"&&k===""&&(t.inputValue===void 0||m===void 0)&&$(null)),x!==Z.current&&(t.inputValue===void 0||m===void 0)?le():X!==k&&Q(k);let G=R!=null?((se=D.getItem(R))==null?void 0:se.textValue)??"":"";!c&&R!=null&&t.inputValue===void 0&&R===Z.current&&be.current!==G&&(Q(G),B(G)),Z.current=x,be.current=G});let we=wb({...t,value:a.useMemo(()=>Array.isArray(x)&&x.length===0?null:{inputValue:k,value:x,selectedKey:R},[k,R,x])}),L=()=>{o&&R==null?H():oe()},H=()=>{if(i==="multiple"){Q(k),W();return}let G=null;Z.current=G,$(G),W()},oe=(G=!1)=>{var se,ue,po;if(m!==void 0&&t.inputValue!==void 0){let bo=R!=null?((se=D.getItem(R))==null?void 0:se.textValue)??"":"";(G||i==="multiple"||k!==bo)&&((ue=t.onSelectionChange)==null||ue.call(t,R),(po=t.onChange)==null||po.call(t,x)),Q(bo),W()}else le(),W()};const Se=()=>{var G;if(o){const se=R!=null?((G=D.getItem(R))==null?void 0:G.textValue)??"":"";k===se?oe():H()}else oe()};let Bn=()=>{w.isOpen&&P.focusedKey!=null?P.isSelected(P.focusedKey)&&i==="single"?oe(!0):P.select(P.focusedKey):Se()},it=a.useRef([k,x]),Yt=G=>{G?(it.current=[k,x],n==="focus"&&!t.isReadOnly&&T(null,"focus")):(l&&Se(),(k!==it.current[0]||x!==it.current[1])&&we.commitValidation()),d(G)},Pu=a.useMemo(()=>w.isOpen?s?U:z:h,[w.isOpen,U,z,s,h]),co=t.defaultSelectedKey??(i==="single"?K:null);return{...we,...w,focusStrategy:f,toggle:S,open:T,close:Se,selectionManager:P,value:x,defaultValue:p??K,setValue:$,selectedKey:R,selectedItems:I,defaultSelectedKey:co,setSelectedKey:$,disabledKeys:F,isFocused:c,setFocused:Yt,selectedItem:I[0]??null,collection:Pu,inputValue:k,defaultInputValue:Al(t.defaultInputValue,co,D)??_,setInputValue:B,commit:Bn,revert:L}}function hh(t,e,n){return new Dr(xu(t,t,e,n))}function xu(t,e,n,r){let o=[];for(let l of e)if(l.type==="section"&&l.hasChildNodes){let i=xu(t,va(l,t),n,r);[...i].some(s=>s.type==="item")&&o.push({...l,childNodes:i})}else l.type==="item"&&r(l.textValue,n)?o.push({...l}):l.type!=="item"&&o.push({...l});return o}function Al(t,e,n){var r;return t==null&&e!=null?((r=n.getItem(e))==null?void 0:r.textValue)??"":t}function mh(t){if(t!==void 0)return t===null?[]:Array.isArray(t)?t:[t]}const gh=a.createContext(null),Cu=a.createContext(null),$h=Ht(function(e,n){[e,n]=Ce(e,n,gh);let{children:r,isDisabled:o=!1,isInvalid:l=!1,isRequired:i=!1,isReadOnly:s=!1}=e,u=a.useMemo(()=>y.createElement(Fn.Provider,{value:{items:e.items??e.defaultItems}},typeof r=="function"?r({isOpen:!1,isDisabled:o,isInvalid:l,isRequired:i,defaultChildren:null,isReadOnly:s}):r),[r,o,l,i,s,e.items,e.defaultItems]);return y.createElement(ks,{content:u},c=>y.createElement(vh,{props:e,collection:c,comboBoxRef:n}))}),yh=[wn,Dn,In,ro,Ut];function vh({props:t,collection:e,comboBoxRef:n}){let{name:r,formValue:o="key",allowsCustomValue:l}=t;l&&(o="text");let{validationBehavior:i}=_r(Pa)||{},s=t.validationBehavior??i??"native",{contains:u}=Cb({sensitivity:"base"}),c=bh({...t,defaultFilter:t.defaultFilter||u,items:t.items,children:void 0,collection:e,validationBehavior:s}),d=a.useRef(null),f=a.useRef(null),b=a.useRef(null),p=a.useRef(null),m=a.useRef(null),[v,g]=jr(!t["aria-label"]&&!t["aria-labelledby"]),{buttonProps:x,inputProps:$,listBoxProps:D,labelProps:P,descriptionProps:F,errorMessageProps:R,valueProps:I,...k}=fh({...gi(t),label:g,inputRef:f,buttonRef:d,listBoxRef:p,popoverRef:m,name:o==="text"?r:void 0,validationBehavior:s},c),[B,K]=a.useState(null),_=a.useCallback(()=>{var E;if(f.current&&!b.current){let w=(E=d.current)==null?void 0:E.getBoundingClientRect(),T=f.current.getBoundingClientRect(),S=w?Math.min(w.left,T.left):T.left,N=w?Math.max(w.right,T.right):T.right;K(N-S+"px")}},[d,f,K]);fn({ref:f,onResize:_});let U=a.useMemo(()=>({get current(){return b.current||f.current}}),[b,f]),z=a.useMemo(()=>({isOpen:c.isOpen,isDisabled:t.isDisabled||!1,isInvalid:k.isInvalid||!1,isRequired:t.isRequired||!1,isReadOnly:t.isReadOnly||!1}),[c.isOpen,t.isDisabled,k.isInvalid,t.isRequired,t.isReadOnly]),h=Ee({...t,values:z,defaultClassName:"react-aria-ComboBox"}),C=pe(t,{global:!0});delete C.id;let M=[];if(r&&o==="key"){let E=Array.isArray(c.value)?c.value:[c.value];E.length===0&&(E=[null]),M=E.map((w,T)=>y.createElement("input",{key:T,type:"hidden",name:r,form:t.form,value:w??""}))}return y.createElement(rt,{values:[[Cu,c],[wn,{...P,ref:v}],[Dn,{...x,ref:d,isPressed:c.isOpen}],[In,{...$,ref:f}],[lt,c],[Xr,{ref:m,triggerRef:U,scrollRef:p,placement:"bottom start",isNonModal:!0,trigger:"ComboBox",style:{"--trigger-width":B},clearContexts:yh}],[Fn,{...D,ref:p}],[vt,c],[Ut,{slots:{description:F,errorMessage:R}}],[ro,{ref:b,isInvalid:k.isInvalid,isDisabled:t.isDisabled||!1}],[Ea,k],[xh,I]]},y.createElement(fe.div,{...C,...h,ref:n,slot:t.slot||void 0,"data-focused":c.isFocused||void 0,"data-open":c.isOpen||void 0,"data-disabled":t.isDisabled||void 0,"data-readonly":t.isReadOnly||void 0,"data-invalid":k.isInvalid||void 0,"data-required":t.isRequired||void 0},h.children,M))}const xh=a.createContext(null),qt=a.createContext({}),Ll=({children:t,className:e,fullWidth:n,menuTrigger:r="focus",variant:o,...l})=>{const i=y.useMemo(()=>Td({fullWidth:n}),[n]);return A.jsx(qt,{value:{slots:i,variant:o},children:A.jsx($h,{"data-slot":"combo-box",menuTrigger:r,...l,className:Te(e,i==null?void 0:i.base()),children:s=>A.jsx(A.Fragment,{children:typeof t=="function"?t(s):t})})})},Ch=({children:t,className:e,...n})=>{const{slots:r}=a.useContext(qt),o=he(r==null?void 0:r.inputGroup,e);return A.jsx("div",{className:o,"data-slot":"combo-box-input-group",...n,children:t})},Eh=({children:t,className:e,...n})=>{const{slots:r}=a.useContext(qt),o=a.useContext(Cu);return A.jsx(Gr,{className:Te(e,r==null?void 0:r.trigger()),"data-open":Ai(o==null?void 0:o.isOpen),"data-slot":"combo-box-trigger",...n,children:t??A.jsx(mf,{"data-slot":"combo-box-trigger-default-icon"})})},wh=({children:t,className:e,placement:n="bottom",...r})=>{const{slots:o}=a.useContext(qt);return A.jsx(Li,{value:{variant:"default"},children:A.jsx(ap,{...r,className:Te(e,o==null?void 0:o.popover()),"data-slot":"combo-box-popover",placement:n,children:t})})},Vh=Object.assign(Ll,{Root:Ll,InputGroup:Ch,Trigger:Eh,Popover:wh}),Sh=({...t})=>{const e=a.useId();return A.jsxs("svg",{"data-slot":"spinner-icon",viewBox:"0 0 24 24",...t,children:[A.jsxs("defs",{children:[A.jsxs("linearGradient",{id:`«data-slot-icon-def-1»-${e}`,x1:"50%",x2:"50%",y1:"5.271%",y2:"91.793%",children:[A.jsx("stop",{offset:"0%",stopColor:"currentColor"}),A.jsx("stop",{offset:"100%",stopColor:"currentColor",stopOpacity:.55})]}),A.jsxs("linearGradient",{id:`«data-slot-icon-def-2»-${e}`,x1:"50%",x2:"50%",y1:"15.24%",y2:"87.15%",children:[A.jsx("stop",{offset:"0%",stopColor:"currentColor",stopOpacity:0}),A.jsx("stop",{offset:"100%",stopColor:"currentColor",stopOpacity:.55})]})]}),A.jsxs("g",{fill:"none",children:[A.jsx("path",{d:"m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"}),A.jsx("path",{d:"M8.749.021a1.5 1.5 0 0 1 .497 2.958A7.5 7.5 0 0 0 3 10.375a7.5 7.5 0 0 0 7.5 7.5v3c-5.799 0-10.5-4.7-10.5-10.5C0 5.23 3.726.865 8.749.021",fill:`url(#«data-slot-icon-def-1»-${e})`,transform:"translate(1.5 1.625)"}),A.jsx("path",{d:"M15.392 2.673a1.5 1.5 0 0 1 2.119-.115A10.48 10.48 0 0 1 21 10.375c0 5.8-4.701 10.5-10.5 10.5v-3a7.5 7.5 0 0 0 5.007-13.084a1.5 1.5 0 0 1-.115-2.118",fill:`url(#«data-slot-icon-def-2»-${e})`,transform:"translate(1.5 1.625)"})]})]})},Kl=({className:t,color:e,size:n,...r})=>A.jsx(Ae.span,{"data-slot":"spinner",...r,className:Fd({className:t,color:e,size:n}),children:A.jsx(Sh,{"aria-hidden":!0,"aria-label":"Loading",role:"presentation"})}),_h=Object.assign(Kl,{Root:Kl}),Ph=a.createContext({}),Th=a.createContext(null),kh=Ht(function(e,n){[e,n]=Ce(e,n,Th);let{validationBehavior:r}=_r(Pa)||{},o=e.validationBehavior??r??"native",l=a.useRef(null);[e,l]=Ce(e,l,Mp);let[i,s]=jr(!e["aria-label"]&&!e["aria-labelledby"]),[u,c]=a.useState("input"),{labelProps:d,inputProps:f,descriptionProps:b,errorMessageProps:p,...m}=Oa({...gi(e),inputElementType:u,label:s,validationBehavior:o},l),v=a.useCallback($=>{l.current=$,$&&c($ instanceof HTMLTextAreaElement?"textarea":"input")},[l]),g=Ee({...e,values:{isDisabled:e.isDisabled||!1,isInvalid:m.isInvalid,isReadOnly:e.isReadOnly||!1,isRequired:e.isRequired||!1},defaultClassName:"react-aria-TextField"}),x=pe(e,{global:!0});return delete x.id,y.createElement(fe.div,{...x,...g,ref:n,slot:e.slot||void 0,"data-disabled":e.isDisabled||void 0,"data-invalid":m.isInvalid||void 0,"data-readonly":e.isReadOnly||void 0,"data-required":e.isRequired||void 0},y.createElement(rt,{values:[[wn,{...d,ref:i}],[In,{...f,ref:v}],[Ph,{...f,ref:v}],[ro,{role:"presentation",isInvalid:m.isInvalid,isDisabled:e.isDisabled||!1}],[Ut,{slots:{description:b,errorMessage:p}}],[Ea,m]]},g.children))}),Eu=a.createContext({}),Rl=({children:t,className:e,fullWidth:n,variant:r,...o})=>{const l=y.useMemo(()=>Id({fullWidth:n}),[n]);return A.jsx(kh,{"data-slot":"textfield",...o,className:Te(e,l),children:i=>A.jsx(Eu,{value:{variant:r},children:A.jsx(A.Fragment,{children:typeof t=="function"?t(i):t})})})},Fl=({className:t,fullWidth:e,variant:n,...r})=>{const o=a.useContext(Eu),l=a.useContext(qt),i=n??o.variant??l.variant;return A.jsx(ch,{className:Te(t,Dd({fullWidth:e,variant:i})),"data-slot":"input",...r})},jh=Object.assign(Fl,{Root:Fl}),zh=Object.assign(Rl,{Root:Rl}),Il=({children:t,className:e,isDisabled:n,isInvalid:r,isRequired:o,...l})=>A.jsx(_d,{className:Md({isRequired:o,isDisabled:n,isInvalid:r,className:e}),"data-slot":"label",...l,children:t}),Hh=Object.assign(Il,{Root:Il}),Bl=({children:t,className:e,...n})=>A.jsx(Ip,{className:kd({className:e}),"data-slot":"description",slot:"description",...n,children:t}),Wh=Object.assign(Bl,{Root:Bl}),wu=a.createContext({}),Nl=({children:t,className:e,variant:n,...r})=>{const o=y.useMemo(()=>Kd({variant:n}),[n]);return A.jsx(Bb,{className:Te(e,o.item()),"data-slot":"list-box-item",...r,children:l=>A.jsx(wu,{value:{slots:o,state:l},children:typeof t=="function"?t(l):t})})},Su=({children:t,className:e,...n})=>{const{slots:r,state:o}=a.useContext(wu),l=o==null?void 0:o.isSelected,i=typeof t=="function"?t(o??{}):t||A.jsx("svg",{"aria-hidden":"true","data-slot":"list-box-item-indicator--checkmark",fill:"none",role:"presentation",stroke:"currentColor",strokeDasharray:22,strokeDashoffset:l?44:66,strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,viewBox:"0 0 17 18",children:A.jsx("polyline",{points:"1 9 7 14 15 4"})});return A.jsx(Ae.span,{"aria-hidden":"true",className:he(r==null?void 0:r.indicator,e),"data-slot":"list-box-item-indicator","data-visible":l||void 0,...n,children:i})},Dh=Object.assign(Nl,{Root:Nl,Indicator:Su}),Mh=({children:t,className:e,...n})=>{const r=y.useMemo(()=>Rd({class:typeof e=="string"?e:void 0}),[e]);return A.jsx(Ib,{className:r,...n,children:t})},Ah=Mh;function Ol({className:t,variant:e,...n}){const r=y.useMemo(()=>Ld({variant:e}),[e]);return A.jsx(Rb,{className:Te(t,r),"data-slot":"list-box",...n})}const Gh=Object.assign(Ol,{Root:Ol,Item:Dh,ItemIndicator:Su,Section:Ah});export{Fh as A,Bh as B,Vh as C,Wh as D,jh as I,Hh as L,_h as S,zh as T,Gh as a,Dh as b,nc as c,Nh as d,Ih as e,Oh as f,Ed as g,bp as r}; diff --git a/src/gateway/static/dashboard/assets/heroui-DZj66Arc.js b/src/gateway/static/dashboard/assets/heroui-DZj66Arc.js new file mode 100644 index 00000000..c2d80b0a --- /dev/null +++ b/src/gateway/static/dashboard/assets/heroui-DZj66Arc.js @@ -0,0 +1,20 @@ +var vo=t=>{throw TypeError(t)};var xo=(t,e,n)=>e.has(t)||vo("Cannot "+n);var Co=(t,e,n)=>(xo(t,e,"read from private field"),n?n.call(t):e.get(t)),Eo=(t,e,n)=>e.has(t)?vo("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),ml=(t,e,n,l)=>(xo(t,e,"write to private field"),l?l.call(t,n):e.set(t,n),n);import{r as s,$ as g,a as gr,b as Yi,c as up}from"./react-dgEcD0HR.js";import{j as M}from"./tanstack-query-1t81HyiD.js";const ap="react-aria-clear-focus",sp="react-aria-focus";function Jn(t){var n;if(typeof window>"u"||window.navigator==null)return!1;let e=(n=window.navigator.userAgentData)==null?void 0:n.brands;return Array.isArray(e)&&e.some(l=>t.test(l.brand))||t.test(window.navigator.userAgent)}function yr(t){var e;return typeof window<"u"&&window.navigator!=null?t.test(((e=window.navigator.userAgentData)==null?void 0:e.platform)||window.navigator.platform):!1}function rt(t){let e=null;return()=>(e==null&&(e=t()),e)}const yt=rt(function(){return yr(/^Mac/i)}),cp=rt(function(){return yr(/^iPhone/i)}),Xi=rt(function(){return yr(/^iPad/i)||yt()&&navigator.maxTouchPoints>1}),$t=rt(function(){return cp()||Xi()}),Fn=rt(function(){return yt()||$t()}),Ji=rt(function(){return Jn(/AppleWebKit/i)&&!Qi()}),Qi=rt(function(){return Jn(/Chrome/i)}),rn=rt(function(){return Jn(/Android/i)}),dp=rt(function(){return Jn(/Firefox/i)});function Ve(t){if(fp())t.focus({preventScroll:!0});else{let e=pp(t);t.focus(),bp(e)}}let Dn=null;function fp(){if(Dn==null){Dn=!1;try{document.createElement("div").focus({get preventScroll(){return Dn=!0,!0}})}catch{}}return Dn}function pp(t){let e=t.parentNode,n=[],l=document.scrollingElement||document.documentElement;for(;e instanceof HTMLElement&&e!==l;)(e.offsetHeightt});function Nt(){return s.useContext(hp)}function mp(t,e){let n=t.getAttribute("target");return(!n||n==="_self")&&t.origin===location.origin&&!t.hasAttribute("download")&&!e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey}function tt(t,e,n=!0){var a,c;let{metaKey:l,ctrlKey:r,altKey:o,shiftKey:i}=e;dp()&&((c=(a=window.event)==null?void 0:a.type)!=null&&c.startsWith("key"))&&t.target==="_blank"&&(yt()?l=!0:r=!0);let u=Ji()&&yt()&&!Xi()?new KeyboardEvent("keydown",{keyIdentifier:"Enter",metaKey:l,ctrlKey:r,altKey:o,shiftKey:i}):new MouseEvent("click",{metaKey:l,ctrlKey:r,altKey:o,shiftKey:i,detail:1,bubbles:!0,cancelable:!0});tt.isOpening=n,Ve(t),t.dispatchEvent(u),tt.isOpening=!1}tt.isOpening=!1;function gp(t,e){if(t instanceof HTMLAnchorElement)e(t);else if(t.hasAttribute("data-href")){let n=document.createElement("a");n.href=t.getAttribute("data-href"),t.hasAttribute("data-target")&&(n.target=t.getAttribute("data-target")),t.hasAttribute("data-rel")&&(n.rel=t.getAttribute("data-rel")),t.hasAttribute("data-download")&&(n.download=t.getAttribute("data-download")),t.hasAttribute("data-ping")&&(n.ping=t.getAttribute("data-ping")),t.hasAttribute("data-referrer-policy")&&(n.referrerPolicy=t.getAttribute("data-referrer-policy")),t.appendChild(n),e(n),t.removeChild(n)}}function yp(t,e){gp(t,n=>tt(n,e))}function $p(t){const n=Nt().useHref(t.href??"");return{"data-href":t.href?n:void 0,"data-target":t.target,"data-rel":t.rel,"data-download":t.download,"data-ping":t.ping,"data-referrer-policy":t.referrerPolicy}}function eu(t){const n=Nt().useHref((t==null?void 0:t.href)??"");let l={};if(t)for(let r of["href","target","rel","download","ping","referrerPolicy"])r in t&&(l[r]=r==="href"?n:t[r]);return l}function vp(t,e,n,l){!e.isNative&&t.currentTarget instanceof HTMLAnchorElement&&t.currentTarget.href&&!t.isDefaultPrevented()&&mp(t.currentTarget,t)&&n&&(t.preventDefault(),e.open(t.currentTarget,t,n,l))}const ne=typeof document<"u"?g.useLayoutEffect:()=>{},tu={prefix:String(Math.round(Math.random()*1e10)),current:0},nu=g.createContext(tu),xp=g.createContext(!1);let gl=new WeakMap;function Cp(t=!1){var l,r;let e=s.useContext(nu),n=s.useRef(null);if(n.current===null&&!t){let o=(r=(l=g.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED)==null?void 0:l.ReactCurrentOwner)==null?void 0:r.current;if(o){let i=gl.get(o);i==null?gl.set(o,{id:e.current,state:o.memoizedState}):o.memoizedState!==i.state&&(e.current=i.id,gl.delete(o))}n.current=++e.current}return n.current}function Ep(t){let e=s.useContext(nu),n=Cp(!!t),l=`react-aria${e.prefix}`;return t||`${l}-${n}`}function wp(t){let e=g.useId(),[n]=s.useState(ct()),l=n?"react-aria":`react-aria${tu.prefix}`;return t||`${l}-${e}`}const Sp=typeof g.useId=="function"?wp:Ep;function Dp(){return!1}function kp(){return!0}function Pp(t){return()=>{}}function ct(){return typeof g.useSyncExternalStore=="function"?g.useSyncExternalStore(Pp,Dp,kp):s.useContext(xp)}function Ap(t){let[e,n]=s.useState(t),l=s.useRef(e),r=s.useRef(null),o=s.useRef(()=>{if(!r.current)return;let u=r.current.next();if(u.done){r.current=null;return}l.current===u.value?o.current():n(u.value)});ne(()=>{l.current=e,r.current&&o.current()});let i=s.useCallback(u=>{r.current=u(l.current),o.current()},[o]);return[e,i]}let Tp=!!(typeof window<"u"&&window.document&&window.document.createElement),Bt=new Map,Zt;typeof FinalizationRegistry<"u"&&(Zt=new FinalizationRegistry(t=>{Bt.delete(t)}));function $e(t){let[e,n]=s.useState(t),l=s.useRef(null),r=Sp(e),o=s.useRef(null);if(Zt&&Zt.register(o,r),Tp){const i=Bt.get(r);i&&!i.includes(l)?i.push(l):Bt.set(r,[l])}return ne(()=>{let i=r;return()=>{Zt&&Zt.unregister(o),Bt.delete(i)}},[r]),s.useEffect(()=>{let i=l.current;return i&&n(i),()=>{i&&(l.current=null)}}),r}function Bp(t,e){if(t===e)return t;let n=Bt.get(t);if(n)return n.forEach(r=>r.current=e),e;let l=Bt.get(e);return l?(l.forEach(r=>r.current=t),t):e}function on(t=[]){let e=$e(),[n,l]=Ap(e),r=s.useCallback(()=>{l(function*(){yield e,yield document.getElementById(e)?e:void 0})},[e,l]);return ne(r,[e,r,...t]),n}function dt(...t){return(...e)=>{for(let n of t)typeof n=="function"&&n(...e)}}const re=t=>(t==null?void 0:t.ownerDocument)??document,we=t=>t&&"window"in t&&t.window===t?t:re(t).defaultView||window;function Kp(t){return t!==null&&typeof t=="object"&&"nodeType"in t&&typeof t.nodeType=="number"}function Rp(t){return Kp(t)&&t.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&"host"in t}let Mp=!1;function Qe(){return Mp}function te(t,e){if(!Qe())return e&&t?t.contains(e):!1;if(!t||!e)return!1;let n=e;for(;n!==null;){if(n===t)return!0;n.tagName==="SLOT"&&n.assignedSlot?n=n.assignedSlot.parentNode:Rp(n)?n=n.host:n=n.parentNode}return!1}const oe=(t=document)=>{var n;if(!Qe())return t.activeElement;let e=t.activeElement;for(;e&&"shadowRoot"in e&&((n=e.shadowRoot)!=null&&n.activeElement);)e=e.shadowRoot.activeElement;return e};function j(t){if(Qe()&&t.target instanceof Element&&t.target.shadowRoot){if("composedPath"in t)return t.composedPath()[0]??null;if("composedPath"in t.nativeEvent)return t.nativeEvent.composedPath()[0]??null}return t.target}function vt(t){if(!t)return!1;let e=t.getRootNode(),n=we(t);if(!(e instanceof n.Document||e instanceof n.ShadowRoot))return!1;let l=e.activeElement;return l!=null&&t.contains(l)}class Ip{constructor(e,n,l,r){this._walkerStack=[],this._currentSetFor=new Set,this._acceptNode=i=>{var u;if(i.nodeType===Node.ELEMENT_NODE){const a=i.shadowRoot;if(a){const c=this._doc.createTreeWalker(a,this.whatToShow,{acceptNode:this._acceptNode});return this._walkerStack.unshift(c),NodeFilter.FILTER_ACCEPT}else{if(typeof this.filter=="function")return this.filter(i);if((u=this.filter)!=null&&u.acceptNode)return this.filter.acceptNode(i);if(this.filter===null)return NodeFilter.FILTER_ACCEPT}}return NodeFilter.FILTER_SKIP},this._doc=e,this.root=n,this.filter=r??null,this.whatToShow=l??NodeFilter.SHOW_ALL,this._currentNode=n,this._walkerStack.unshift(e.createTreeWalker(n,l,this._acceptNode));const o=n.shadowRoot;if(o){const i=this._doc.createTreeWalker(o,this.whatToShow,{acceptNode:this._acceptNode});this._walkerStack.unshift(i)}}get currentNode(){return this._currentNode}set currentNode(e){if(!te(this.root,e))throw new Error("Cannot set currentNode to a node that is not contained by the root node.");const n=[];let l=e,r=e;for(this._currentNode=e;l&&l!==this.root;)if(l.nodeType===Node.DOCUMENT_FRAGMENT_NODE){const i=l,u=this._doc.createTreeWalker(i,this.whatToShow,{acceptNode:this._acceptNode});n.push(u),u.currentNode=r,this._currentSetFor.add(u),l=r=i.host}else l=l.parentNode;const o=this._doc.createTreeWalker(this.root,this.whatToShow,{acceptNode:this._acceptNode});n.push(o),o.currentNode=r,this._currentSetFor.add(o),this._walkerStack=n}get doc(){return this._doc}firstChild(){let e=this.currentNode,n=this.nextNode();return te(e,n)?(n&&(this.currentNode=n),n):(this.currentNode=e,null)}lastChild(){let n=this._walkerStack[0].lastChild();return n&&(this.currentNode=n),n}nextNode(){var n;const e=this._walkerStack[0].nextNode();if(e){if(e.shadowRoot){let r;if(typeof this.filter=="function"?r=this.filter(e):(n=this.filter)!=null&&n.acceptNode&&(r=this.filter.acceptNode(e)),r===NodeFilter.FILTER_ACCEPT)return this.currentNode=e,e;let o=this.nextNode();return o&&(this.currentNode=o),o}return e&&(this.currentNode=e),e}else if(this._walkerStack.length>1){this._walkerStack.shift();let l=this.nextNode();return l&&(this.currentNode=l),l}else return null}previousNode(){var l;const e=this._walkerStack[0];if(e.currentNode===e.root){if(this._currentSetFor.has(e))if(this._currentSetFor.delete(e),this._walkerStack.length>1){this._walkerStack.shift();let r=this.previousNode();return r&&(this.currentNode=r),r}else return null;return null}const n=e.previousNode();if(n){if(n.shadowRoot){let o;if(typeof this.filter=="function"?o=this.filter(n):(l=this.filter)!=null&&l.acceptNode&&(o=this.filter.acceptNode(n)),o===NodeFilter.FILTER_ACCEPT)return n&&(this.currentNode=n),n;let i=this.lastChild();return i&&(this.currentNode=i),i}return n&&(this.currentNode=n),n}else if(this._walkerStack.length>1){this._walkerStack.shift();let r=this.previousNode();return r&&(this.currentNode=r),r}else return null}nextSibling(){return null}previousSibling(){return null}parentNode(){return null}}function lu(t,e,n,l){return Qe()?new Ip(t,e,n,l):t.createTreeWalker(e,n,l)}function ft(...t){return t.length===1&&t[0]?t[0]:e=>{let n=!1;const l=t.map(r=>{const o=wo(r,e);return n||(n=typeof o=="function"),o});if(n)return()=>{l.forEach((r,o)=>{typeof r=="function"?r():wo(t[o],null)})}}}function wo(t,e){if(typeof t=="function")return t(e);t!=null&&(t.current=e)}function ru(t){var e,n,l="";if(typeof t=="string"||typeof t=="number")l+=t;else if(typeof t=="object")if(Array.isArray(t)){var r=t.length;for(e=0;e=65&&r.charCodeAt(2)<=90?e[r]=dt(o,i):(r==="className"||r==="UNSAFE_className")&&typeof o=="string"&&typeof i=="string"?e[r]=Fp(o,i):r==="id"&&o&&i?e.id=Bp(o,i):r==="ref"&&o&&i?e.ref=ft(o,i):e[r]=i!==void 0?i:o}}return e}const Lp=new Set(["id"]),zp=new Set(["aria-label","aria-labelledby","aria-describedby","aria-details"]),Np=new Set(["href","hrefLang","target","rel","download","ping","referrerPolicy"]),Op=new Set(["dir","lang","hidden","inert","translate"]),So=new Set(["onClick","onAuxClick","onContextMenu","onDoubleClick","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onTouchCancel","onTouchEnd","onTouchMove","onTouchStart","onPointerDown","onPointerMove","onPointerUp","onPointerCancel","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onGotPointerCapture","onLostPointerCapture","onScroll","onWheel","onAnimationStart","onAnimationEnd","onAnimationIteration","onTransitionCancel","onTransitionEnd","onTransitionRun","onTransitionStart"]),Vp=/^(data-.*)$/;function ie(t,e={}){let{labelable:n,isLink:l,global:r,events:o=r,propNames:i}=e,u={};for(const a in t)Object.prototype.hasOwnProperty.call(t,a)&&(Lp.has(a)||n&&zp.has(a)||l&&Np.has(a)||r&&Op.has(a)||o&&(So.has(a)||a.endsWith("Capture")&&So.has(a.slice(0,-7)))||i!=null&&i.has(a)||Vp.test(a))&&(u[a]=t[a]);return u}let ut=new Map,Fl=new Set;function Do(){if(typeof window>"u")return;function t(l){return"propertyName"in l}let e=l=>{let r=j(l);if(!t(l)||!r)return;let o=ut.get(r);o||(o=new Set,ut.set(r,o),r.addEventListener("transitioncancel",n,{once:!0})),o.add(l.propertyName)},n=l=>{let r=j(l);if(!t(l)||!r)return;let o=ut.get(r);if(o&&(o.delete(l.propertyName),o.size===0&&(r.removeEventListener("transitioncancel",n),ut.delete(r)),ut.size===0)){for(let i of Fl)i();Fl.clear()}};document.body.addEventListener("transitionrun",e),document.body.addEventListener("transitionend",n)}typeof document<"u"&&(document.readyState!=="loading"?Do():document.addEventListener("DOMContentLoaded",Do));function jp(){for(const[t]of ut)"isConnected"in t&&!t.isConnected&&ut.delete(t)}function ou(t){requestAnimationFrame(()=>{jp(),ut.size===0?t():Fl.add(t)})}function hn(){let t=s.useRef(new Map),e=s.useCallback((r,o,i,u)=>{let a=u!=null&&u.once?(...c)=>{t.current.delete(i),i(...c)}:i;t.current.set(i,{type:o,eventTarget:r,fn:a,options:u}),r.addEventListener(o,a,u)},[]),n=s.useCallback((r,o,i,u)=>{var c;let a=((c=t.current.get(i))==null?void 0:c.fn)||i;r.removeEventListener(o,a,u),t.current.delete(i)},[]),l=s.useCallback(()=>{t.current.forEach((r,o)=>{n(r.eventTarget,r.type,o,r.options)})},[n]);return s.useEffect(()=>l,[l]),{addGlobalListener:e,removeGlobalListener:n,removeAllGlobalListeners:l}}function un(t,e){let{id:n,"aria-label":l,"aria-labelledby":r}=t;return n=$e(n),r&&l?r=[...new Set([n,...r.trim().split(/\s+/)])].join(" "):r&&(r=r.trim().split(/\s+/).join(" ")),!l&&!r&&e&&(l=e),{id:n,"aria-label":l,"aria-labelledby":r}}function ke(t){const e=s.useRef(null),n=s.useRef(void 0),l=s.useCallback(r=>{if(typeof t=="function"){const o=t,i=o(r);return()=>{typeof i=="function"?i():o(null)}}else if(t)return t.current=r,()=>{t.current=null}},[t]);return s.useMemo(()=>({get current(){return e.current},set current(r){e.current=r,n.current&&(n.current(),n.current=void 0),r!=null&&(n.current=l(r))}}),[l])}const _p=g.useInsertionEffect??ne;function Ee(t){const e=s.useRef(null);return _p(()=>{e.current=t},[t]),s.useCallback((...n)=>{const l=e.current;return l==null?void 0:l(...n)},[])}function $r(t,e){const n=s.useRef(!0),l=s.useRef(null);let r=Ee(t);s.useEffect(()=>(n.current=!0,()=>{n.current=!1}),[]),s.useEffect(()=>{let o=l.current;n.current?n.current=!1:(!o||e.some((i,u)=>!Object.is(i,o[u])))&&r(),l.current=e},e)}function ko(t,e){const n=s.useRef(!0),l=s.useRef(null);ne(()=>(n.current=!0,()=>{n.current=!1}),[]),ne(()=>{n.current?n.current=!1:(!l.current||e.some((r,o)=>!Object.is(r,l[o])))&&t(),l.current=e},e)}function Hp(){return typeof window.ResizeObserver<"u"}function an(t){const{ref:e,box:n,onResize:l}=t;let r=Ee(l);s.useEffect(()=>{let o=e==null?void 0:e.current;if(o)if(Hp()){const i=new window.ResizeObserver(u=>{u.length&&r()});return i.observe(o,{box:n}),()=>{o&&i.unobserve(o)}}else return window.addEventListener("resize",r,!1),()=>{window.removeEventListener("resize",r,!1)}},[e,n])}function vr(t,e){ne(()=>{if(t&&t.ref&&e)return t.ref.current=e.current,()=>{t.ref&&(t.ref.current=null)}})}function st(t,e){if(!t)return!1;let n=window.getComputedStyle(t),l=document.scrollingElement||document.documentElement,r=/(auto|scroll)/.test(n.overflow+n.overflowX+n.overflowY);return t===l&&n.overflow!=="hidden"&&(r=!0),r&&e&&(r=t.scrollHeight!==t.clientHeight||t.scrollWidth!==t.clientWidth),r}function Xe(t,e){let n=t;for(st(n,e)&&(n=n.parentElement);n&&!st(n,e);)n=n.parentElement;return n||document.scrollingElement||document.documentElement}function yl(t,e){let n=[],l=document.scrollingElement||document.documentElement;for(;t&&(st(t,e)&&n.push(t),t!==l);)t=t.parentElement;return n}function kt(t){return yt()?t.metaKey:t.ctrlKey}const Wp=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function tn(t){return t instanceof HTMLInputElement&&!Wp.has(t.type)||t instanceof HTMLTextAreaElement||t instanceof HTMLElement&&t.isContentEditable}let Te=typeof document<"u"&&window.visualViewport;function Up(){let t=ct(),[e,n]=s.useState(()=>t?{width:0,height:0}:$l());return s.useEffect(()=>{let l=u=>{n(a=>u.width===a.width&&u.height===a.height?a:u)},r=()=>{Te&&Te.scale>1||l($l())},o,i=u=>{Te&&Te.scale>1||tn(j(u))&&(o=requestAnimationFrame(()=>{let a=oe();(!a||!tn(a))&&l({width:document.documentElement.clientWidth,height:document.documentElement.clientHeight})}))};return l($l()),$t()&&window.addEventListener("blur",i,!0),Te?Te.addEventListener("resize",r):window.addEventListener("resize",r),()=>{cancelAnimationFrame(o),$t()&&window.removeEventListener("blur",i,!0),Te?Te.removeEventListener("resize",r):window.removeEventListener("resize",r)}},[]),e}function $l(){return{width:Te?Math.min(Te.width*Te.scale,document.documentElement.clientWidth):document.documentElement.clientWidth,height:Te?Te.height*Te.scale:document.documentElement.clientHeight}}let Gp=0;const vl=new Map;function mn(t){let[e,n]=s.useState();return ne(()=>{if(!t)return;let l=vl.get(t);if(l)n(l.element.id);else{let r=`react-aria-description-${Gp++}`;n(r);let o=document.createElement("div");o.id=r,o.style.display="none",o.textContent=t,document.body.appendChild(o),l={refCount:0,element:o},vl.set(t,l)}return l.refCount++,()=>{l&&--l.refCount===0&&(l.element.remove(),vl.delete(t))}},[t]),{"aria-describedby":t?e:void 0}}function Yt(t,e,n,l){let r=Ee(n),o=n==null;s.useEffect(()=>{if(o||!t.current)return;let i=t.current;return i.addEventListener(e,r,l),()=>{i.removeEventListener(e,r,l)}},[t,e,l,o])}function Ln(t,e,n={}){let{block:l="nearest",inline:r="nearest"}=n;if(t===e)return;let o=t.scrollTop,i=t.scrollLeft,u=e.getBoundingClientRect(),a=t.getBoundingClientRect(),c=window.getComputedStyle(e),f=window.getComputedStyle(t),d=document.scrollingElement||document.documentElement,b=t===d,p=t===d?0:a.top,h=t===d?t.clientHeight:a.bottom,$=t===d?0:a.left,y=t===d?t.clientWidth:a.right,m=parseFloat(c.scrollMarginTop)||0,v=parseFloat(c.scrollMarginBottom)||0,E=parseFloat(c.scrollMarginLeft)||0,C=parseFloat(c.scrollMarginRight)||0,R=parseFloat(f.scrollPaddingTop)||0,A=parseFloat(f.scrollPaddingBottom)||0,K=parseFloat(f.scrollPaddingLeft)||0,P=parseFloat(f.scrollPaddingRight)||0,z=parseFloat(f.borderTopWidth)||0,B=parseFloat(f.borderBottomWidth)||0,N=parseFloat(f.borderLeftWidth)||0,U=parseFloat(f.borderRightWidth)||0,_=u.top-m,x=u.bottom+v,S=u.left-E,I=u.right+C,w=t===d?0:N+U,k=t===d?0:z+B,D=t===d?0:t.offsetWidth-t.clientWidth-w,T=t===d?0:t.offsetHeight-t.clientHeight-k,O=p+(b?0:z)+R,Z=h-(b?0:B)-A-T,F=$+(b?0:N)+K,V=y-(b?0:U)-P;f.direction==="rtl"&&!$t()?F+=D:V-=D;let q=_Z,Q=SV;if(q&&l==="start")o+=_-O;else if(q&&l==="center")o+=(_+x)/2-(O+Z)/2;else if(q&&l==="end")o+=x-Z;else if(q&&l==="nearest"){let J=_-O,ge=x-Z;o+=Math.abs(J)<=Math.abs(ge)?J:ge}if(Q&&r==="start")i+=S-F;else if(Q&&r==="center")i+=(S+I)/2-(F+V)/2;else if(Q&&r==="end")i+=I-V;else if(Q&&r==="nearest"){let J=S-F,ge=I-V;i+=Math.abs(J)<=Math.abs(ge)?J:ge}t.scrollTo({left:i,top:o})}function it(t,e={}){var l,r,o;let{containingElement:n}=e;if(t&&t.isConnected){let i=document.scrollingElement||document.documentElement;if(window.getComputedStyle(i).overflow==="hidden"){let{left:a,top:c}=t.getBoundingClientRect(),f=yl(t,!0);for(let p of f)Ln(p,t);let{left:d,top:b}=t.getBoundingClientRect();if(Math.abs(a-d)>1||Math.abs(c-b)>1){f=n?yl(n,!0):[];for(let p of f)Ln(p,n,{block:"center",inline:"center"});for(let p of yl(t,!0))Ln(p,t)}}else{let{left:a,top:c}=t.getBoundingClientRect();(l=t==null?void 0:t.scrollIntoView)==null||l.call(t,{block:"nearest"});let{left:f,top:d}=t.getBoundingClientRect();(Math.abs(a-f)>1||Math.abs(c-d)>1)&&((r=n==null?void 0:n.scrollIntoView)==null||r.call(n,{block:"center",inline:"center"}),(o=t.scrollIntoView)==null||o.call(t,{block:"nearest"}))}}}function iu(t){return t.pointerType===""&&t.isTrusted?!0:rn()&&t.pointerType?t.type==="click"&&t.buttons===1:t.detail===0&&!t.pointerType}function qp(t){return!rn()&&t.width===0&&t.height===0||t.width===1&&t.height===1&&t.pressure===0&&t.detail===0&&t.pointerType==="mouse"}function xr(t,e,n){let l=Ee(r=>{n&&!r.defaultPrevented&&n(e)});s.useEffect(()=>{var o;let r=(o=t==null?void 0:t.current)==null?void 0:o.form;return r==null||r.addEventListener("reset",l),()=>{r==null||r.removeEventListener("reset",l)}},[t])}function uu(t,e){let{collection:n,onLoadMore:l,scrollOffset:r=1}=t,o=s.useRef(null),i=Ee(u=>{for(let a of u)a.isIntersecting&&l&&l()});ne(()=>(e.current&&(o.current=new IntersectionObserver(i,{root:Xe(e==null?void 0:e.current),rootMargin:`0px ${100*r}% ${100*r}% ${100*r}%`}),o.current.observe(e.current)),()=>{o.current&&o.current.disconnect()}),[n,e,r])}function au(t){const e=s.version.split(".");return parseInt(e[0],10)>=19?t:t?"true":void 0}function Cr(t,e=!0){let[n,l]=s.useState(!0),r=n&&e;return ne(()=>{if(r&&t.current&&"getAnimations"in t.current)for(let o of t.current.getAnimations())o instanceof CSSTransition&&o.cancel()},[t,r]),su(t,r,s.useCallback(()=>l(!1),[])),r}function Ll(t,e){let[n,l]=s.useState(e?"open":"closed");switch(n){case"open":e||l("exiting");break;case"closed":case"exiting":e&&l("open");break}let r=n==="exiting";return su(t,r,s.useCallback(()=>{l(o=>o==="exiting"?"closed":o)},[])),r}function su(t,e,n){ne(()=>{if(e&&t.current){if(!("getAnimations"in t.current)){n();return}let l=t.current.getAnimations();if(l.length===0){n();return}let r=!1;return Promise.allSettled(l.map(o=>o.finished)).then(()=>{r||gr.flushSync(()=>{n()})}),()=>{r=!0}}},[t,e,n])}const Zp=typeof Element<"u"&&"checkVisibility"in Element.prototype;function Yp(t){const e=we(t);if(!(t instanceof e.HTMLElement)&&!(t instanceof e.SVGElement))return!1;let{display:n,visibility:l}=t.style,r=n!=="none"&&l!=="hidden"&&l!=="collapse";if(r){const{getComputedStyle:o}=t.ownerDocument.defaultView;let{display:i,visibility:u}=o(t);r=i!=="none"&&u!=="hidden"&&u!=="collapse"}return r}function Xp(t,e){return!t.hasAttribute("hidden")&&!t.hasAttribute("data-react-aria-prevent-focus")&&(t.nodeName==="DETAILS"&&e&&e.nodeName!=="SUMMARY"?t.hasAttribute("open"):!0)}function Er(t,e){return Zp?t.checkVisibility({visibilityProperty:!0})&&!t.closest("[data-react-aria-prevent-focus]"):t.nodeName!=="#comment"&&Yp(t)&&Xp(t,e)&&(!t.parentElement||Er(t.parentElement,t))}const wr=["input:not([disabled]):not([type=hidden])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable^="false"])',"permission"],Jp=wr.join(":not([hidden]),")+",[tabindex]:not([disabled]):not([hidden])";wr.push('[tabindex]:not([tabindex="-1"]):not([disabled])');const Qp=wr.join(':not([hidden]):not([tabindex="-1"]),');function cu(t,e){return t.matches(Jp)&&!fu(t)&&((e==null?void 0:e.skipVisibilityCheck)||Er(t))}function du(t){return t.matches(Qp)&&Er(t)&&!fu(t)}function fu(t){let e=t;for(;e!=null;){if(e instanceof e.ownerDocument.defaultView.HTMLElement&&e.inert)return!0;e=e.parentElement}return!1}function Po(t){let e=t==null?void 0:t.defaultView;return(e==null?void 0:e.__webpack_nonce__)||globalThis.__webpack_nonce__||void 0}let xl=new WeakMap;function pu(t){let e=t??(typeof document<"u"?document:void 0);if(!e)return Po(e);if(xl.has(e))return xl.get(e);let n=e.querySelector('meta[property="csp-nonce"]'),l=n&&n instanceof we(n).HTMLMetaElement&&(n.nonce||n.content)||Po(e)||void 0;return l!==void 0&&xl.set(e,l),l}function eb(t,e,n){const{render:l,...r}=e,o=s.useRef(null),i=s.useMemo(()=>ft(n,o),[n,o]);ne(()=>{},[t,l]);const u={...r,ref:i};return l?l(u,void 0):M.jsx(t,{...u})}const Ao={},Se=new Proxy({},{get(t,e){if(typeof e!="string")return;let n=Ao[e];return n||(n=s.forwardRef(eb.bind(null,e)),Ao[e]=n),n}});var tb=/\s+/g,nb=t=>typeof t!="string"||!t?t:t.replace(tb," ").trim(),It=(...t)=>{const e=[],n=l=>{if(!l&&l!==0&&l!==0n)return;if(Array.isArray(l)){for(let o=0,i=l.length;o0?nb(e.join(" ")):void 0},To=t=>t===!1?"false":t===!0?"true":t===0?"0":t,Pe=t=>{if(!t||typeof t!="object")return!0;for(const e in t)return!1;return!0},lb=(t,e)=>{if(t===e)return!0;if(!t||!e)return!1;const n=Object.keys(t),l=Object.keys(e);if(n.length!==l.length)return!1;for(let r=0;r{for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)){const l=e[n];n in t?t[n]=It(t[n],l):t[n]=l}return t},bu=(t,e)=>{for(let n=0;n{const e=[];bu(t,e);const n=[];for(let l=0;l{const n={};for(const l in t){const r=t[l];if(l in e){const o=e[l];Array.isArray(r)||Array.isArray(o)?n[l]=hu(o,r):typeof r=="object"&&typeof o=="object"&&r&&o?n[l]=zl(r,o):n[l]=o+" "+r}else n[l]=r}for(const l in e)l in t||(n[l]=e[l]);return n},ob={twMerge:!0,twMergeConfig:{}};function ib(){let t=null,e={},n=!1;return{get cachedTwMerge(){return t},set cachedTwMerge(l){t=l},get cachedTwMergeConfig(){return e},set cachedTwMergeConfig(l){e=l},get didTwMergeConfigChange(){return n},set didTwMergeConfigChange(l){n=l},reset(){t=null,e={},n=!1}}}var Je=ib(),ub=t=>{const e=(l,r)=>{const{extend:o=null,slots:i={},variants:u={},compoundVariants:a=[],compoundSlots:c=[],defaultVariants:f={}}=l,d={...ob,...r},b=o!=null&&o.base?It(o.base,l==null?void 0:l.base):l==null?void 0:l.base,p=o!=null&&o.variants&&!Pe(o.variants)?zl(u,o.variants):u,h=o!=null&&o.defaultVariants&&!Pe(o.defaultVariants)?{...o.defaultVariants,...f}:f;!Pe(d.twMergeConfig)&&!lb(d.twMergeConfig,Je.cachedTwMergeConfig)&&(Je.didTwMergeConfigChange=!0,Je.cachedTwMergeConfig=d.twMergeConfig);const $=Pe(o==null?void 0:o.slots),y=Pe(i)?{}:{base:It(l==null?void 0:l.base,$&&(o==null?void 0:o.base)),...i},m=$?y:rb({...o==null?void 0:o.slots},Pe(y)?{base:l==null?void 0:l.base}:y),v=Pe(o==null?void 0:o.compoundVariants)?a:hu(o==null?void 0:o.compoundVariants,a),E=R=>{if(Pe(p)&&Pe(i)&&$)return t(b,R==null?void 0:R.class,R==null?void 0:R.className)(d);if(v&&!Array.isArray(v))throw new TypeError(`The "compoundVariants" prop must be an array. Received: ${typeof v}`);if(c&&!Array.isArray(c))throw new TypeError(`The "compoundSlots" prop must be an array. Received: ${typeof c}`);const A=(x,S=p,I=null,w=null)=>{const k=S[x];if(!k||Pe(k))return null;const D=(w==null?void 0:w[x])??(R==null?void 0:R[x]);if(D===null)return null;const T=To(D);if(typeof T=="object")return null;const O=h==null?void 0:h[x],Z=T??To(O);return k[Z||"false"]},K=()=>{if(!p)return null;const x=Object.keys(p),S=[];for(let I=0;I{if(!p||typeof p!="object")return null;const I=[];for(const w in p){const k=A(w,p,x,S),D=x==="base"&&typeof k=="string"?k:k&&k[x];D&&I.push(D)}return I},z={};for(const x in R){const S=R[x];S!==void 0&&(z[x]=S)}const B=(x,S)=>{var w;const I=typeof(R==null?void 0:R[x])=="object"?{[x]:(w=R[x])==null?void 0:w.initial}:{};return{...h,...z,...I,...S}},N=(x=[],S)=>{const I=[],w=x.length;for(let k=0;k{const S=N(v,x);if(!Array.isArray(S))return S;const I={},w=t;for(let k=0;k{if(c.length<1)return null;const S={},I=B(null,x);for(let w=0;w{const k=U(w),D=_(w);return S(m[I],P(I,w),k?k[I]:void 0,D?D[I]:void 0,w==null?void 0:w.class,w==null?void 0:w.className)(d)}}return x}return t(b,K(),N(v),R==null?void 0:R.class,R==null?void 0:R.className)(d)},C=()=>{if(!(!p||typeof p!="object"))return Object.keys(p)};return E.variantKeys=C(),E.extend=o,E.base=b,E.slots=m,E.variants=p,E.defaultVariants=h,E.compoundSlots=c,E.compoundVariants=v,E};return{tv:e,createTV:l=>(r,o)=>e(r,o?zl(l,o):l)}};const ab=(t,e)=>{const n=new Array(t.length+e.length);for(let l=0;l({classGroupId:t,validator:e}),mu=(t=new Map,e=null,n)=>({nextPart:t,validators:e,classGroupId:n}),Vn="-",Bo=[],cb="arbitrary..",db=t=>{const e=pb(t),{conflictingClassGroups:n,conflictingClassGroupModifiers:l}=t;return{getClassGroupId:i=>{if(i.startsWith("[")&&i.endsWith("]"))return fb(i);const u=i.split(Vn),a=u[0]===""&&u.length>1?1:0;return gu(u,a,e)},getConflictingClassGroupIds:(i,u)=>{if(u){const a=l[i],c=n[i];return a?c?ab(c,a):a:c||Bo}return n[i]||Bo}}},gu=(t,e,n)=>{if(t.length-e===0)return n.classGroupId;const r=t[e],o=n.nextPart.get(r);if(o){const c=gu(t,e+1,o);if(c)return c}const i=n.validators;if(i===null)return;const u=e===0?t.join(Vn):t.slice(e).join(Vn),a=i.length;for(let c=0;ct.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const e=t.slice(1,-1),n=e.indexOf(":"),l=e.slice(0,n);return l?cb+l:void 0})(),pb=t=>{const{theme:e,classGroups:n}=t;return bb(n,e)},bb=(t,e)=>{const n=mu();for(const l in t){const r=t[l];Sr(r,n,l,e)}return n},Sr=(t,e,n,l)=>{const r=t.length;for(let o=0;o{if(typeof t=="string"){mb(t,e,n);return}if(typeof t=="function"){gb(t,e,n,l);return}yb(t,e,n,l)},mb=(t,e,n)=>{const l=t===""?e:yu(e,t);l.classGroupId=n},gb=(t,e,n,l)=>{if($b(t)){Sr(t(l),e,n,l);return}e.validators===null&&(e.validators=[]),e.validators.push(sb(n,t))},yb=(t,e,n,l)=>{const r=Object.entries(t),o=r.length;for(let i=0;i{let n=t;const l=e.split(Vn),r=l.length;for(let o=0;o"isThemeGetter"in t&&t.isThemeGetter===!0,vb=t=>{if(t<1)return{get:()=>{},set:()=>{}};let e=0,n=Object.create(null),l=Object.create(null);const r=(o,i)=>{n[o]=i,e++,e>t&&(e=0,l=n,n=Object.create(null))};return{get(o){let i=n[o];if(i!==void 0)return i;if((i=l[o])!==void 0)return r(o,i),i},set(o,i){o in n?n[o]=i:r(o,i)}}},Nl="!",Ko=":",xb=[],Ro=(t,e,n,l,r)=>({modifiers:t,hasImportantModifier:e,baseClassName:n,maybePostfixModifierPosition:l,isExternal:r}),Cb=t=>{const{prefix:e,experimentalParseClassName:n}=t;let l=r=>{const o=[];let i=0,u=0,a=0,c;const f=r.length;for(let $=0;$a?c-a:void 0;return Ro(o,p,b,h)};if(e){const r=e+Ko,o=l;l=i=>i.startsWith(r)?o(i.slice(r.length)):Ro(xb,!1,i,void 0,!0)}if(n){const r=l;l=o=>n({className:o,parseClassName:r})}return l},Eb=t=>{const e=new Map;return t.orderSensitiveModifiers.forEach((n,l)=>{e.set(n,1e6+l)}),n=>{const l=[];let r=[];for(let o=0;o0&&(r.sort(),l.push(...r),r=[]),l.push(i)):r.push(i)}return r.length>0&&(r.sort(),l.push(...r)),l}},wb=t=>({cache:vb(t.cacheSize),parseClassName:Cb(t),sortModifiers:Eb(t),...db(t)}),Sb=/\s+/,Db=(t,e)=>{const{parseClassName:n,getClassGroupId:l,getConflictingClassGroupIds:r,sortModifiers:o}=e,i=[],u=t.trim().split(Sb);let a="";for(let c=u.length-1;c>=0;c-=1){const f=u[c],{isExternal:d,modifiers:b,hasImportantModifier:p,baseClassName:h,maybePostfixModifierPosition:$}=n(f);if(d){a=f+(a.length>0?" "+a:a);continue}let y=!!$,m=l(y?h.substring(0,$):h);if(!m){if(!y){a=f+(a.length>0?" "+a:a);continue}if(m=l(h),!m){a=f+(a.length>0?" "+a:a);continue}y=!1}const v=b.length===0?"":b.length===1?b[0]:o(b).join(":"),E=p?v+Nl:v,C=E+m;if(i.indexOf(C)>-1)continue;i.push(C);const R=r(m,y);for(let A=0;A0?" "+a:a)}return a},kb=(...t)=>{let e=0,n,l,r="";for(;e{if(typeof t=="string")return t;let e,n="";for(let l=0;l{let n,l,r,o;const i=a=>{const c=e.reduce((f,d)=>d(f),t());return n=wb(c),l=n.cache.get,r=n.cache.set,o=u,u(a)},u=a=>{const c=l(a);if(c)return c;const f=Db(a,n);return r(a,f),f};return o=i,(...a)=>o(kb(...a))},Pb=[],ye=t=>{const e=n=>n[t]||Pb;return e.isThemeGetter=!0,e},vu=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,xu=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Ab=/^\d+\/\d+$/,Tb=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Bb=/\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$/,Kb=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Rb=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Mb=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,St=t=>Ab.test(t),ee=t=>!!t&&!Number.isNaN(Number(t)),ot=t=>!!t&&Number.isInteger(Number(t)),Cl=t=>t.endsWith("%")&&ee(t.slice(0,-1)),Ye=t=>Tb.test(t),Ib=()=>!0,Fb=t=>Bb.test(t)&&!Kb.test(t),Cu=()=>!1,Lb=t=>Rb.test(t),zb=t=>Mb.test(t),Nb=t=>!H(t)&&!W(t),Ob=t=>Ot(t,Su,Cu),H=t=>vu.test(t),pt=t=>Ot(t,Du,Fb),El=t=>Ot(t,Wb,ee),Mo=t=>Ot(t,Eu,Cu),Vb=t=>Ot(t,wu,zb),kn=t=>Ot(t,ku,Lb),W=t=>xu.test(t),Ut=t=>Vt(t,Du),jb=t=>Vt(t,Ub),Io=t=>Vt(t,Eu),_b=t=>Vt(t,Su),Hb=t=>Vt(t,wu),Pn=t=>Vt(t,ku,!0),Ot=(t,e,n)=>{const l=vu.exec(t);return l?l[1]?e(l[1]):n(l[2]):!1},Vt=(t,e,n=!1)=>{const l=xu.exec(t);return l?l[1]?e(l[1]):n:!1},Eu=t=>t==="position"||t==="percentage",wu=t=>t==="image"||t==="url",Su=t=>t==="length"||t==="size"||t==="bg-size",Du=t=>t==="length",Wb=t=>t==="number",Ub=t=>t==="family-name",ku=t=>t==="shadow",Vl=()=>{const t=ye("color"),e=ye("font"),n=ye("text"),l=ye("font-weight"),r=ye("tracking"),o=ye("leading"),i=ye("breakpoint"),u=ye("container"),a=ye("spacing"),c=ye("radius"),f=ye("shadow"),d=ye("inset-shadow"),b=ye("text-shadow"),p=ye("drop-shadow"),h=ye("blur"),$=ye("perspective"),y=ye("aspect"),m=ye("ease"),v=ye("animate"),E=()=>["auto","avoid","all","avoid-page","page","left","right","column"],C=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],R=()=>[...C(),W,H],A=()=>["auto","hidden","clip","visible","scroll"],K=()=>["auto","contain","none"],P=()=>[W,H,a],z=()=>[St,"full","auto",...P()],B=()=>[ot,"none","subgrid",W,H],N=()=>["auto",{span:["full",ot,W,H]},ot,W,H],U=()=>[ot,"auto",W,H],_=()=>["auto","min","max","fr",W,H],x=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],S=()=>["start","end","center","stretch","center-safe","end-safe"],I=()=>["auto",...P()],w=()=>[St,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...P()],k=()=>[t,W,H],D=()=>[...C(),Io,Mo,{position:[W,H]}],T=()=>["no-repeat",{repeat:["","x","y","space","round"]}],O=()=>["auto","cover","contain",_b,Ob,{size:[W,H]}],Z=()=>[Cl,Ut,pt],F=()=>["","none","full",c,W,H],V=()=>["",ee,Ut,pt],q=()=>["solid","dashed","dotted","double"],Q=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],J=()=>[ee,Cl,Io,Mo],ge=()=>["","none",h,W,H],Be=()=>["none",ee,W,H],L=()=>["none",ee,W,H],Y=()=>[ee,W,H],ue=()=>[St,"full",...P()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[Ye],breakpoint:[Ye],color:[Ib],container:[Ye],"drop-shadow":[Ye],ease:["in","out","in-out"],font:[Nb],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[Ye],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[Ye],shadow:[Ye],spacing:["px",ee],text:[Ye],"text-shadow":[Ye],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",St,H,W,y]}],container:["container"],columns:[{columns:[ee,H,W,u]}],"break-after":[{"break-after":E()}],"break-before":[{"break-before":E()}],"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:R()}],overflow:[{overflow:A()}],"overflow-x":[{"overflow-x":A()}],"overflow-y":[{"overflow-y":A()}],overscroll:[{overscroll:K()}],"overscroll-x":[{"overscroll-x":K()}],"overscroll-y":[{"overscroll-y":K()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:z()}],"inset-x":[{"inset-x":z()}],"inset-y":[{"inset-y":z()}],start:[{start:z()}],end:[{end:z()}],top:[{top:z()}],right:[{right:z()}],bottom:[{bottom:z()}],left:[{left:z()}],visibility:["visible","invisible","collapse"],z:[{z:[ot,"auto",W,H]}],basis:[{basis:[St,"full","auto",u,...P()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[ee,St,"auto","initial","none",H]}],grow:[{grow:["",ee,W,H]}],shrink:[{shrink:["",ee,W,H]}],order:[{order:[ot,"first","last","none",W,H]}],"grid-cols":[{"grid-cols":B()}],"col-start-end":[{col:N()}],"col-start":[{"col-start":U()}],"col-end":[{"col-end":U()}],"grid-rows":[{"grid-rows":B()}],"row-start-end":[{row:N()}],"row-start":[{"row-start":U()}],"row-end":[{"row-end":U()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":_()}],"auto-rows":[{"auto-rows":_()}],gap:[{gap:P()}],"gap-x":[{"gap-x":P()}],"gap-y":[{"gap-y":P()}],"justify-content":[{justify:[...x(),"normal"]}],"justify-items":[{"justify-items":[...S(),"normal"]}],"justify-self":[{"justify-self":["auto",...S()]}],"align-content":[{content:["normal",...x()]}],"align-items":[{items:[...S(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...S(),{baseline:["","last"]}]}],"place-content":[{"place-content":x()}],"place-items":[{"place-items":[...S(),"baseline"]}],"place-self":[{"place-self":["auto",...S()]}],p:[{p:P()}],px:[{px:P()}],py:[{py:P()}],ps:[{ps:P()}],pe:[{pe:P()}],pt:[{pt:P()}],pr:[{pr:P()}],pb:[{pb:P()}],pl:[{pl:P()}],m:[{m:I()}],mx:[{mx:I()}],my:[{my:I()}],ms:[{ms:I()}],me:[{me:I()}],mt:[{mt:I()}],mr:[{mr:I()}],mb:[{mb:I()}],ml:[{ml:I()}],"space-x":[{"space-x":P()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":P()}],"space-y-reverse":["space-y-reverse"],size:[{size:w()}],w:[{w:[u,"screen",...w()]}],"min-w":[{"min-w":[u,"screen","none",...w()]}],"max-w":[{"max-w":[u,"screen","none","prose",{screen:[i]},...w()]}],h:[{h:["screen","lh",...w()]}],"min-h":[{"min-h":["screen","lh","none",...w()]}],"max-h":[{"max-h":["screen","lh",...w()]}],"font-size":[{text:["base",n,Ut,pt]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[l,W,El]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Cl,H]}],"font-family":[{font:[jb,H,e]}],"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:[r,W,H]}],"line-clamp":[{"line-clamp":[ee,"none",W,El]}],leading:[{leading:[o,...P()]}],"list-image":[{"list-image":["none",W,H]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",W,H]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:k()}],"text-color":[{text:k()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...q(),"wavy"]}],"text-decoration-thickness":[{decoration:[ee,"from-font","auto",W,pt]}],"text-decoration-color":[{decoration:k()}],"underline-offset":[{"underline-offset":[ee,"auto",W,H]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:P()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",W,H]}],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",W,H]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:D()}],"bg-repeat":[{bg:T()}],"bg-size":[{bg:O()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},ot,W,H],radial:["",W,H],conic:[ot,W,H]},Hb,Vb]}],"bg-color":[{bg:k()}],"gradient-from-pos":[{from:Z()}],"gradient-via-pos":[{via:Z()}],"gradient-to-pos":[{to:Z()}],"gradient-from":[{from:k()}],"gradient-via":[{via:k()}],"gradient-to":[{to:k()}],rounded:[{rounded:F()}],"rounded-s":[{"rounded-s":F()}],"rounded-e":[{"rounded-e":F()}],"rounded-t":[{"rounded-t":F()}],"rounded-r":[{"rounded-r":F()}],"rounded-b":[{"rounded-b":F()}],"rounded-l":[{"rounded-l":F()}],"rounded-ss":[{"rounded-ss":F()}],"rounded-se":[{"rounded-se":F()}],"rounded-ee":[{"rounded-ee":F()}],"rounded-es":[{"rounded-es":F()}],"rounded-tl":[{"rounded-tl":F()}],"rounded-tr":[{"rounded-tr":F()}],"rounded-br":[{"rounded-br":F()}],"rounded-bl":[{"rounded-bl":F()}],"border-w":[{border:V()}],"border-w-x":[{"border-x":V()}],"border-w-y":[{"border-y":V()}],"border-w-s":[{"border-s":V()}],"border-w-e":[{"border-e":V()}],"border-w-t":[{"border-t":V()}],"border-w-r":[{"border-r":V()}],"border-w-b":[{"border-b":V()}],"border-w-l":[{"border-l":V()}],"divide-x":[{"divide-x":V()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":V()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...q(),"hidden","none"]}],"divide-style":[{divide:[...q(),"hidden","none"]}],"border-color":[{border:k()}],"border-color-x":[{"border-x":k()}],"border-color-y":[{"border-y":k()}],"border-color-s":[{"border-s":k()}],"border-color-e":[{"border-e":k()}],"border-color-t":[{"border-t":k()}],"border-color-r":[{"border-r":k()}],"border-color-b":[{"border-b":k()}],"border-color-l":[{"border-l":k()}],"divide-color":[{divide:k()}],"outline-style":[{outline:[...q(),"none","hidden"]}],"outline-offset":[{"outline-offset":[ee,W,H]}],"outline-w":[{outline:["",ee,Ut,pt]}],"outline-color":[{outline:k()}],shadow:[{shadow:["","none",f,Pn,kn]}],"shadow-color":[{shadow:k()}],"inset-shadow":[{"inset-shadow":["none",d,Pn,kn]}],"inset-shadow-color":[{"inset-shadow":k()}],"ring-w":[{ring:V()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:k()}],"ring-offset-w":[{"ring-offset":[ee,pt]}],"ring-offset-color":[{"ring-offset":k()}],"inset-ring-w":[{"inset-ring":V()}],"inset-ring-color":[{"inset-ring":k()}],"text-shadow":[{"text-shadow":["none",b,Pn,kn]}],"text-shadow-color":[{"text-shadow":k()}],opacity:[{opacity:[ee,W,H]}],"mix-blend":[{"mix-blend":[...Q(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":Q()}],"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":[ee]}],"mask-image-linear-from-pos":[{"mask-linear-from":J()}],"mask-image-linear-to-pos":[{"mask-linear-to":J()}],"mask-image-linear-from-color":[{"mask-linear-from":k()}],"mask-image-linear-to-color":[{"mask-linear-to":k()}],"mask-image-t-from-pos":[{"mask-t-from":J()}],"mask-image-t-to-pos":[{"mask-t-to":J()}],"mask-image-t-from-color":[{"mask-t-from":k()}],"mask-image-t-to-color":[{"mask-t-to":k()}],"mask-image-r-from-pos":[{"mask-r-from":J()}],"mask-image-r-to-pos":[{"mask-r-to":J()}],"mask-image-r-from-color":[{"mask-r-from":k()}],"mask-image-r-to-color":[{"mask-r-to":k()}],"mask-image-b-from-pos":[{"mask-b-from":J()}],"mask-image-b-to-pos":[{"mask-b-to":J()}],"mask-image-b-from-color":[{"mask-b-from":k()}],"mask-image-b-to-color":[{"mask-b-to":k()}],"mask-image-l-from-pos":[{"mask-l-from":J()}],"mask-image-l-to-pos":[{"mask-l-to":J()}],"mask-image-l-from-color":[{"mask-l-from":k()}],"mask-image-l-to-color":[{"mask-l-to":k()}],"mask-image-x-from-pos":[{"mask-x-from":J()}],"mask-image-x-to-pos":[{"mask-x-to":J()}],"mask-image-x-from-color":[{"mask-x-from":k()}],"mask-image-x-to-color":[{"mask-x-to":k()}],"mask-image-y-from-pos":[{"mask-y-from":J()}],"mask-image-y-to-pos":[{"mask-y-to":J()}],"mask-image-y-from-color":[{"mask-y-from":k()}],"mask-image-y-to-color":[{"mask-y-to":k()}],"mask-image-radial":[{"mask-radial":[W,H]}],"mask-image-radial-from-pos":[{"mask-radial-from":J()}],"mask-image-radial-to-pos":[{"mask-radial-to":J()}],"mask-image-radial-from-color":[{"mask-radial-from":k()}],"mask-image-radial-to-color":[{"mask-radial-to":k()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":C()}],"mask-image-conic-pos":[{"mask-conic":[ee]}],"mask-image-conic-from-pos":[{"mask-conic-from":J()}],"mask-image-conic-to-pos":[{"mask-conic-to":J()}],"mask-image-conic-from-color":[{"mask-conic-from":k()}],"mask-image-conic-to-color":[{"mask-conic-to":k()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:D()}],"mask-repeat":[{mask:T()}],"mask-size":[{mask:O()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",W,H]}],filter:[{filter:["","none",W,H]}],blur:[{blur:ge()}],brightness:[{brightness:[ee,W,H]}],contrast:[{contrast:[ee,W,H]}],"drop-shadow":[{"drop-shadow":["","none",p,Pn,kn]}],"drop-shadow-color":[{"drop-shadow":k()}],grayscale:[{grayscale:["",ee,W,H]}],"hue-rotate":[{"hue-rotate":[ee,W,H]}],invert:[{invert:["",ee,W,H]}],saturate:[{saturate:[ee,W,H]}],sepia:[{sepia:["",ee,W,H]}],"backdrop-filter":[{"backdrop-filter":["","none",W,H]}],"backdrop-blur":[{"backdrop-blur":ge()}],"backdrop-brightness":[{"backdrop-brightness":[ee,W,H]}],"backdrop-contrast":[{"backdrop-contrast":[ee,W,H]}],"backdrop-grayscale":[{"backdrop-grayscale":["",ee,W,H]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[ee,W,H]}],"backdrop-invert":[{"backdrop-invert":["",ee,W,H]}],"backdrop-opacity":[{"backdrop-opacity":[ee,W,H]}],"backdrop-saturate":[{"backdrop-saturate":[ee,W,H]}],"backdrop-sepia":[{"backdrop-sepia":["",ee,W,H]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":P()}],"border-spacing-x":[{"border-spacing-x":P()}],"border-spacing-y":[{"border-spacing-y":P()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",W,H]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[ee,"initial",W,H]}],ease:[{ease:["linear","initial",m,W,H]}],delay:[{delay:[ee,W,H]}],animate:[{animate:["none",v,W,H]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[$,W,H]}],"perspective-origin":[{"perspective-origin":R()}],rotate:[{rotate:Be()}],"rotate-x":[{"rotate-x":Be()}],"rotate-y":[{"rotate-y":Be()}],"rotate-z":[{"rotate-z":Be()}],scale:[{scale:L()}],"scale-x":[{"scale-x":L()}],"scale-y":[{"scale-y":L()}],"scale-z":[{"scale-z":L()}],"scale-3d":["scale-3d"],skew:[{skew:Y()}],"skew-x":[{"skew-x":Y()}],"skew-y":[{"skew-y":Y()}],transform:[{transform:[W,H,"","none","gpu","cpu"]}],"transform-origin":[{origin:R()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:ue()}],"translate-x":[{"translate-x":ue()}],"translate-y":[{"translate-y":ue()}],"translate-z":[{"translate-z":ue()}],"translate-none":["translate-none"],accent:[{accent:k()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:k()}],"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",W,H]}],"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":P()}],"scroll-mx":[{"scroll-mx":P()}],"scroll-my":[{"scroll-my":P()}],"scroll-ms":[{"scroll-ms":P()}],"scroll-me":[{"scroll-me":P()}],"scroll-mt":[{"scroll-mt":P()}],"scroll-mr":[{"scroll-mr":P()}],"scroll-mb":[{"scroll-mb":P()}],"scroll-ml":[{"scroll-ml":P()}],"scroll-p":[{"scroll-p":P()}],"scroll-px":[{"scroll-px":P()}],"scroll-py":[{"scroll-py":P()}],"scroll-ps":[{"scroll-ps":P()}],"scroll-pe":[{"scroll-pe":P()}],"scroll-pt":[{"scroll-pt":P()}],"scroll-pr":[{"scroll-pr":P()}],"scroll-pb":[{"scroll-pb":P()}],"scroll-pl":[{"scroll-pl":P()}],"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",W,H]}],fill:[{fill:["none",...k()]}],"stroke-w":[{stroke:[ee,Ut,pt,El]}],stroke:[{stroke:["none",...k()]}],"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"]}},Gb=(t,{cacheSize:e,prefix:n,experimentalParseClassName:l,extend:r={},override:o={}})=>(Xt(t,"cacheSize",e),Xt(t,"prefix",n),Xt(t,"experimentalParseClassName",l),An(t.theme,o.theme),An(t.classGroups,o.classGroups),An(t.conflictingClassGroups,o.conflictingClassGroups),An(t.conflictingClassGroupModifiers,o.conflictingClassGroupModifiers),Xt(t,"orderSensitiveModifiers",o.orderSensitiveModifiers),Tn(t.theme,r.theme),Tn(t.classGroups,r.classGroups),Tn(t.conflictingClassGroups,r.conflictingClassGroups),Tn(t.conflictingClassGroupModifiers,r.conflictingClassGroupModifiers),Pu(t,r,"orderSensitiveModifiers"),t),Xt=(t,e,n)=>{n!==void 0&&(t[e]=n)},An=(t,e)=>{if(e)for(const n in e)Xt(t,n,e[n])},Tn=(t,e)=>{if(e)for(const n in e)Pu(t,e,n)},Pu=(t,e,n)=>{const l=e[n];l!==void 0&&(t[n]=t[n]?t[n].concat(l):l)},qb=(t,...e)=>typeof t=="function"?Ol(Vl,t,...e):Ol(()=>Gb(Vl(),t),...e),Zb=Ol(Vl);var Yb=t=>Pe(t)?Zb:qb({...t,extend:{theme:t.theme,classGroups:t.classGroups,conflictingClassGroupModifiers:t.conflictingClassGroupModifiers,conflictingClassGroups:t.conflictingClassGroups,...t.extend}}),Xb=(t,e)=>{const n=It(t);return!n||!((e==null?void 0:e.twMerge)??!0)?n:((!Je.cachedTwMerge||Je.didTwMergeConfigChange)&&(Je.didTwMergeConfigChange=!1,Je.cachedTwMerge=Yb(Je.cachedTwMergeConfig)),Je.cachedTwMerge(n)||void 0)},Jb=(...t)=>e=>Xb(t,e),{tv:De}=ub(Jb);const Qn=De({defaultVariants:{size:"md",status:"danger",variant:"opaque"},slots:{backdrop:"alert-dialog__backdrop",body:"alert-dialog__body",closeTrigger:"alert-dialog__close-trigger",container:"alert-dialog__container",dialog:"alert-dialog__dialog",footer:"alert-dialog__footer",header:"alert-dialog__header",heading:"alert-dialog__heading",icon:"alert-dialog__icon",trigger:"alert-dialog__trigger"},variants:{size:{cover:{dialog:"alert-dialog__dialog--cover"},lg:{dialog:"alert-dialog__dialog--lg"},md:{dialog:"alert-dialog__dialog--md"},sm:{dialog:"alert-dialog__dialog--sm"},xs:{dialog:"alert-dialog__dialog--xs"}},status:{accent:{icon:"alert-dialog__icon--accent"},danger:{icon:"alert-dialog__icon--danger"},default:{icon:"alert-dialog__icon--default"},success:{icon:"alert-dialog__icon--success"},warning:{icon:"alert-dialog__icon--warning"}},variant:{blur:{backdrop:"alert-dialog__backdrop--blur"},opaque:{backdrop:"alert-dialog__backdrop--opaque"},transparent:{backdrop:"alert-dialog__backdrop--transparent"}}}}),Qb=De({base:"button",defaultVariants:{fullWidth:!1,isIconOnly:!1,size:"md",variant:"primary"},variants:{fullWidth:{false:"",true:"button--full-width"},isIconOnly:{true:"button--icon-only"},size:{lg:"button--lg",md:"button--md",sm:"button--sm"},variant:{danger:"button--danger","danger-soft":"button--danger-soft",ghost:"button--ghost",outline:"button--outline",primary:"button--primary",secondary:"button--secondary",tertiary:"button--tertiary"}}}),eh=De({defaultVariants:{variant:"default"},slots:{base:"card",content:"card__content",description:"card__description",footer:"card__footer",header:"card__header",title:"card__title"},variants:{variant:{default:{base:"card--default"},secondary:{base:"card--secondary"},tertiary:{base:"card--tertiary"},transparent:{base:"card--transparent"}}}}),th=De({defaultVariants:{color:"default",variant:"secondary"},slots:{base:"chip",label:"chip__label"},variants:{color:{accent:{base:"chip--accent"},danger:{base:"chip--danger"},default:{base:"chip--default"},success:{base:"chip--success"},warning:{base:"chip--warning"}},size:{lg:{base:"chip--lg"},md:{base:"chip--md"},sm:{base:"chip--sm"}},variant:{primary:{base:"chip--primary"},secondary:{base:"chip--secondary"},soft:{base:"chip--soft"},tertiary:{base:"chip--tertiary"}}}}),nh=De({base:"close-button",defaultVariants:{variant:"default"},variants:{variant:{default:"close-button--default"}}}),lh=De({defaultVariants:{fullWidth:!1},slots:{base:"combo-box",inputGroup:"combo-box__input-group",popover:"combo-box__popover",trigger:"combo-box__trigger"},variants:{fullWidth:{false:{},true:{base:"combo-box--full-width",inputGroup:"combo-box__input-group--full-width"}}}}),rh=De({base:"description"}),oh=De({base:"input",defaultVariants:{fullWidth:!1,variant:"primary"},variants:{fullWidth:{false:"",true:"input--full-width"},variant:{primary:"input--primary",secondary:"input--secondary"}}}),ih=De({base:"label",defaultVariants:{isDisabled:!1,isInvalid:!1,isRequired:!1},variants:{isDisabled:{true:"label--disabled"},isInvalid:{true:"label--invalid"},isRequired:{true:"label--required"}}}),uh=De({slots:{base:"link",icon:"link__icon"}}),ah=De({base:"list-box",defaultVariants:{variant:"default"},variants:{variant:{danger:"list-box--danger",default:"list-box--default"}}}),sh=De({defaultVariants:{variant:"default"},slots:{indicator:"list-box-item__indicator",item:"list-box-item"},variants:{variant:{danger:{item:"list-box-item--danger"},default:{item:"list-box-item--default"}}}}),ch=De({base:"list-box-section"}),dh=De({base:"spinner",defaultVariants:{color:"accent",size:"md"},variants:{color:{accent:"spinner--accent",current:"spinner--current",danger:"spinner--danger",success:"spinner--success",warning:"spinner--warning"},size:{lg:"spinner--lg",md:"spinner--md",sm:"spinner--sm",xl:"spinner--xl"}}}),fh=De({defaultVariants:{variant:"primary"},slots:{base:"table-root",body:"table__body",cell:"table__cell",column:"table__column",columnResizer:"table__column-resizer",content:"table__content",footer:"table__footer",header:"table__header",loadMore:"table__load-more",loadMoreContent:"table__load-more-content",resizableContainer:"table__resizable-container",row:"table__row",scrollContainer:"table__scroll-container",sortableColumnHeader:"table__sortable-column-header",sortableColumnIndicator:"table__sortable-column-indicator"},variants:{variant:{primary:{base:"table-root--primary"},secondary:{base:"table-root--secondary"}}}}),ph=De({base:"textfield",defaultVariants:{fullWidth:!1},variants:{fullWidth:{false:"",true:"textfield--full-width"}}}),mt=Symbol("default");function _e({values:t,children:e}){for(let[n,l]of t)e=g.createElement(n.Provider,{value:l},e);return e}function ce(t){let{className:e,style:n,children:l,defaultClassName:r,defaultChildren:o,defaultStyle:i,values:u,render:a}=t;return s.useMemo(()=>{let c,f,d;return typeof e=="function"?c=e({...u,defaultClassName:r}):c=e,typeof n=="function"?f=n({...u,defaultStyle:i||{}}):f=n,typeof l=="function"?d=l({...u,defaultChildren:o}):l==null?d=o:d=l,{className:c??r,style:f||i?{...i,...f}:void 0,children:d??o,"data-rac":"",render:a?b=>a(b,u):void 0}},[e,n,l,r,o,i,u,a])}function bh(t,e){return n=>e(typeof t=="function"?t(n):t,n)}function el(t,e){let n=s.useContext(t);if(e===null)return null;if(n&&typeof n=="object"&&"slots"in n&&n.slots){let l=e||mt;if(!n.slots[l]){let r=new Intl.ListFormat().format(Object.keys(n.slots).map(i=>`"${i}"`)),o=e?`Invalid slot "${e}".`:"A slot prop is required.";throw new Error(`${o} Valid slot names are ${r}.`)}return n.slots[l]}return n}function xe(t,e,n){let l=el(n,t.slot)||{},{ref:r,...o}=l,i=ke(s.useMemo(()=>ft(e,r),[e,r])),u=G(o,t);return"style"in o&&o.style&&"style"in t&&t.style&&(typeof o.style=="function"||typeof t.style=="function"?u.style=a=>{let c=typeof o.style=="function"?o.style(a):o.style,f={...a.defaultStyle,...c},d=typeof t.style=="function"?t.style({...a,defaultStyle:f}):t.style;return{...f,...d}}:u.style={...o.style,...t.style}),[u,i]}function Dr(t=!0){let[e,n]=s.useState(t),l=s.useRef(!1),r=s.useCallback(o=>{l.current=!0,n(!!o)},[]);return ne(()=>{l.current||n(!1)},[]),[r,e]}function kr(t){const e=/^(data-.*)$/;let n={};for(const l in t)e.test(l)||(n[l]=t[l]);return n}function hh(t,e,n){let{render:l,...r}=e,o=s.useRef(null),i=s.useMemo(()=>ft(n,o),[n,o]);ne(()=>{},[t,l]);let u={...r,ref:i};return l?l(u,void 0):g.createElement(t,u)}const Fo={},le=new Proxy({},{get(t,e){if(typeof e!="string")return;let n=Fo[e];return n||(n=s.forwardRef(hh.bind(null,e)),Fo[e]=n),n}});typeof HTMLTemplateElement<"u"&&(Object.defineProperty(HTMLTemplateElement.prototype,"firstChild",{configurable:!0,enumerable:!0,get:function(){return this.content.firstChild}}),Object.defineProperty(HTMLTemplateElement.prototype,"appendChild",{configurable:!0,enumerable:!0,value:function(t){return this.content.appendChild(t)}}),Object.defineProperty(HTMLTemplateElement.prototype,"removeChild",{configurable:!0,enumerable:!0,value:function(t){return this.content.removeChild(t)}}),Object.defineProperty(HTMLTemplateElement.prototype,"insertBefore",{configurable:!0,enumerable:!0,value:function(t,e){return this.content.insertBefore(t,e)}}));const jn=s.createContext(!1);function mh(t){if(s.useContext(jn))return g.createElement(g.Fragment,null,t.children);let n=g.createElement(jn.Provider,{value:!0},t.children);return g.createElement("template",null,n)}function gn(t){let e=(n,l)=>s.useContext(jn)?null:t(n,l);return e.displayName=t.displayName||t.name,s.forwardRef(e)}function gh(){return s.useContext(jn)}const tl=s.createContext({}),yh=gn(function(e,n){[e,n]=xe(e,n,tl);let{elementType:l="label",...r}=e,o=le[l];return g.createElement(o,{className:"react-aria-Label",...r,ref:n})});function Au(t){let{id:e,label:n,"aria-labelledby":l,"aria-label":r,labelElementType:o="label"}=t;e=$e(e);let i=$e(),u={};n&&(l=l?`${i} ${l}`:i,u={id:i,htmlFor:o==="label"?e:void 0});let a=un({id:e,"aria-label":r,"aria-labelledby":l});return{labelProps:u,fieldProps:a}}const $h=new Set(["Arab","Syrc","Samr","Mand","Thaa","Mend","Nkoo","Adlm","Rohg","Hebr"]),vh=new Set(["ae","ar","arc","bcc","bqi","ckb","dv","fa","glk","he","ku","mzn","nqo","pnb","ps","sd","ug","ur","yi"]);function xh(t){if(Intl.Locale){let n=new Intl.Locale(t).maximize(),l=typeof n.getTextInfo=="function"?n.getTextInfo():n.textInfo;if(l)return l.direction==="rtl";if(n.script)return $h.has(n.script)}let e=t.split("-")[0];return vh.has(e)}const Tu=Symbol.for("react-aria.i18n.locale");function Bu(){let t=typeof window<"u"&&window[Tu]||typeof navigator<"u"&&(navigator.language||navigator.userLanguage)||"en-US";try{Intl.DateTimeFormat.supportedLocalesOf([t])}catch{t="en-US"}return{locale:t,direction:xh(t)?"rtl":"ltr"}}let jl=Bu(),Jt=new Set;function Lo(){jl=Bu();for(let t of Jt)t(jl)}function Ch(){let t=ct(),[e,n]=s.useState(jl);return s.useEffect(()=>(Jt.size===0&&window.addEventListener("languagechange",Lo),Jt.add(n),()=>{Jt.delete(n),Jt.size===0&&window.removeEventListener("languagechange",Lo)}),[]),t?{locale:typeof window<"u"&&window[Tu]||"en-US",direction:"ltr"}:e}const Eh=g.createContext(null);function Re(){let t=Ch();return s.useContext(Eh)||t}function _l(t,e=-1/0,n=1/0){return Math.min(Math.max(t,e),n)}const wh=s.createContext(null),Ku=7e3;let We=null;function gt(t,e="assertive",n=Ku){We?We.announce(t,e,n):(We=new Sh,(typeof IS_REACT_ACT_ENVIRONMENT=="boolean"?IS_REACT_ACT_ENVIRONMENT:typeof jest<"u")?We.announce(t,e,n):setTimeout(()=>{We!=null&&We.isAttached()&&(We==null||We.announce(t,e,n))},100))}class Sh{constructor(){this.node=null,this.assertiveLog=null,this.politeLog=null,typeof document<"u"&&(this.node=document.createElement("div"),this.node.dataset.liveAnnouncer="true",Object.assign(this.node.style,{border:0,clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap"}),this.assertiveLog=this.createLog("assertive"),this.node.appendChild(this.assertiveLog),this.politeLog=this.createLog("polite"),this.node.appendChild(this.politeLog),document.body.prepend(this.node))}isAttached(){var e;return(e=this.node)==null?void 0:e.isConnected}createLog(e){let n=document.createElement("div");return n.setAttribute("role","log"),n.setAttribute("aria-live",e),n.setAttribute("aria-relevant","additions"),n}destroy(){this.node&&(document.body.removeChild(this.node),this.node=null)}announce(e,n="assertive",l=Ku){var o,i;if(!this.node)return;let r=document.createElement("div");typeof e=="object"?(r.setAttribute("role","img"),r.setAttribute("aria-labelledby",e["aria-labelledby"])):r.textContent=e,n==="assertive"?(o=this.assertiveLog)==null||o.appendChild(r):(i=this.politeLog)==null||i.appendChild(r),e!==""&&setTimeout(()=>{r.remove()},l)}clear(e){this.node&&((!e||e==="assertive")&&this.assertiveLog&&(this.assertiveLog.innerHTML=""),(!e||e==="polite")&&this.politeLog&&(this.politeLog.innerHTML=""))}}function Pr(t){let e=t;return e.nativeEvent=t,e.isDefaultPrevented=()=>e.defaultPrevented,e.isPropagationStopped=()=>e.cancelBubble,e.persist=()=>{},e}function Ru(t,e){Object.defineProperty(t,"target",{value:e}),Object.defineProperty(t,"currentTarget",{value:e})}function Mu(t){let e=s.useRef({isFocused:!1,observer:null});return ne(()=>{const n=e.current;return()=>{n.observer&&(n.observer.disconnect(),n.observer=null)}},[]),s.useCallback(n=>{let l=j(n);if(l instanceof HTMLButtonElement||l instanceof HTMLInputElement||l instanceof HTMLTextAreaElement||l instanceof HTMLSelectElement){e.current.isFocused=!0;let r=l,o=i=>{if(e.current.isFocused=!1,r.disabled){let u=Pr(i);t==null||t(u)}e.current.observer&&(e.current.observer.disconnect(),e.current.observer=null)};r.addEventListener("focusout",o,{once:!0}),e.current.observer=new MutationObserver(()=>{var i;if(e.current.isFocused&&r.disabled){(i=e.current.observer)==null||i.disconnect();let u=r===oe()?null:oe();r.dispatchEvent(new FocusEvent("blur",{relatedTarget:u})),r.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:u}))}}),e.current.observer.observe(r,{attributes:!0,attributeFilter:["disabled"]})}},[t])}let _n=!1;function Dh(t){for(;t&&!cu(t,{skipVisibilityCheck:!0});)t=t.parentElement;let e=we(t),n=e.document.activeElement;if(!n||n===t)return;_n=!0;let l=!1,r=f=>{(j(f)===n||l)&&f.stopImmediatePropagation()},o=f=>{(j(f)===n||l)&&(f.stopImmediatePropagation(),!t&&!l&&(l=!0,Ve(n),a()))},i=f=>{(j(f)===t||l)&&f.stopImmediatePropagation()},u=f=>{(j(f)===t||l)&&(f.stopImmediatePropagation(),l||(l=!0,Ve(n),a()))};e.addEventListener("blur",r,!0),e.addEventListener("focusout",o,!0),e.addEventListener("focusin",u,!0),e.addEventListener("focus",i,!0);let a=()=>{cancelAnimationFrame(c),e.removeEventListener("blur",r,!0),e.removeEventListener("focusout",o,!0),e.removeEventListener("focusin",u,!0),e.removeEventListener("focus",i,!0),_n=!1,l=!1},c=requestAnimationFrame(a);return a}let nt=null;const sn=new Set;let nn=new Map,xt=!1,Hl=!1;const kh={Tab:!0,Escape:!0};function nl(t,e){for(let n of sn)n(t,e)}function Ph(t){return!(t.metaKey||!yt()&&t.altKey||t.ctrlKey||t.key==="Control"||t.key==="Shift"||t.key==="Meta")}function Hn(t){xt=!0,!tt.isOpening&&Ph(t)&&(nt="keyboard",nl("keyboard",t))}function Kt(t){nt="pointer","pointerType"in t&&t.pointerType,(t.type==="mousedown"||t.type==="pointerdown")&&(xt=!0,nl("pointer",t))}function Iu(t){!tt.isOpening&&iu(t)&&(xt=!0,nt="virtual")}function Fu(t){let e=we(j(t)),n=re(j(t));j(t)===e||j(t)===n||_n||!t.isTrusted||(!xt&&!Hl&&(nt="virtual",nl("virtual",t)),xt=!1,Hl=!1)}function Lu(){_n||(xt=!1,Hl=!0)}function Wn(t){if(typeof window>"u"||typeof document>"u")return;const e=we(t),n=re(t);if(nn.get(e))return;let l=e.HTMLElement.prototype.focus;e.HTMLElement.prototype.focus=function(){xt=!0,l.apply(this,arguments)},n.addEventListener("keydown",Hn,!0),n.addEventListener("keyup",Hn,!0),n.addEventListener("click",Iu,!0),e.addEventListener("focus",Fu,!0),e.addEventListener("blur",Lu,!1),typeof PointerEvent<"u"&&(n.addEventListener("pointerdown",Kt,!0),n.addEventListener("pointermove",Kt,!0),n.addEventListener("pointerup",Kt,!0)),e.addEventListener("beforeunload",()=>{zu(t)},{once:!0}),nn.set(e,{focus:l})}const zu=(t,e)=>{const n=we(t),l=re(t);e&&l.removeEventListener("DOMContentLoaded",e),nn.has(n)&&(n.HTMLElement.prototype.focus=nn.get(n).focus,l.removeEventListener("keydown",Hn,!0),l.removeEventListener("keyup",Hn,!0),l.removeEventListener("click",Iu,!0),n.removeEventListener("focus",Fu,!0),n.removeEventListener("blur",Lu,!1),typeof PointerEvent<"u"&&(l.removeEventListener("pointerdown",Kt,!0),l.removeEventListener("pointermove",Kt,!0),l.removeEventListener("pointerup",Kt,!0)),nn.delete(n))};function Ah(t){const e=re(t);let n;return e.readyState!=="loading"?Wn(t):(n=()=>{Wn(t)},e.addEventListener("DOMContentLoaded",n)),()=>zu(t,n)}typeof document<"u"&&Ah();function Ft(){return nt!=="pointer"}function cn(){return nt}function Th(t){nt=t,nl(t,null)}function Nu(){Wn();let[t,e]=s.useState(nt);return s.useEffect(()=>{let n=()=>{e(nt)};return sn.add(n),()=>{sn.delete(n)}},[]),ct()?null:t}const Bh=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function Kh(t,e,n){let l=n?j(n):void 0,r=re(l),o=we(l);const i=typeof o<"u"?o.HTMLInputElement:HTMLInputElement,u=typeof o<"u"?o.HTMLTextAreaElement:HTMLTextAreaElement,a=typeof o<"u"?o.HTMLElement:HTMLElement,c=typeof o<"u"?o.KeyboardEvent:KeyboardEvent;let f=oe(r);return t=t||f instanceof i&&!Bh.has(f.type)||f instanceof u||f instanceof a&&f.isContentEditable,!(t&&e==="keyboard"&&n instanceof c&&!kh[n.key])}function Rh(t,e,n){Wn(),s.useEffect(()=>{if((n==null?void 0:n.enabled)===!1)return;let l=(r,o)=>{Kh(!!(n!=null&&n.isTextInput),r,o)&&t(Ft())};return sn.add(l),()=>{sn.delete(l)}},e)}function ve(t){if(!t.isConnected)return;const e=re(t);if(cn()==="virtual"){let n=oe(e);ou(()=>{const l=oe(e);(l===n||l===e.body)&&t.isConnected&&Ve(t)})}else Ve(t)}function Ar(t){let{isDisabled:e,onFocus:n,onBlur:l,onFocusChange:r}=t;const o=s.useCallback(a=>{if(j(a)===a.currentTarget)return l&&l(a),r&&r(!1),!0},[l,r]),i=Mu(o),u=s.useCallback(a=>{let c=j(a);const f=re(c),d=f?oe(f):oe();c===a.currentTarget&&c===d&&(n&&n(a),r&&r(!0),i(a))},[r,n,i]);return{focusProps:{onFocus:!e&&(n||r||l)?u:void 0,onBlur:!e&&(l||r)?o:void 0}}}function zo(t){if(!t)return;let e=!0;return n=>{let l={...n,preventDefault(){n.preventDefault()},isDefaultPrevented(){return n.isDefaultPrevented()},stopPropagation(){e=!0},continuePropagation(){e=!1},isPropagationStopped(){return e}};t(l),e&&n.stopPropagation()}}function Tr(t){return{keyboardProps:t.isDisabled?{}:{onKeyDown:zo(t.onKeyDown),onKeyUp:zo(t.onKeyUp)}}}let Wl=g.createContext(null);function Mh(t){let e=s.useContext(Wl)||{};vr(e,t);let{ref:n,...l}=e;return l}function jt(t,e){let{focusProps:n}=Ar(t),{keyboardProps:l}=Tr(t),r=G(n,l),o=Mh(e),i=t.isDisabled?{}:o,u=s.useRef(t.autoFocus);s.useEffect(()=>{u.current&&e.current&&ve(e.current),u.current=!1},[e]);let a=t.excludeFromTabOrder?-1:0;return t.isDisabled&&(a=void 0),{focusableProps:G({...r,tabIndex:a},i)}}let Tt="default",Ul="",zn=new WeakMap;function Ou(t){if($t()){if(Tt==="default"){const e=re(t);Ul=e.documentElement.style.webkitUserSelect,e.documentElement.style.webkitUserSelect="none"}Tt="disabled"}else if(t instanceof HTMLElement||t instanceof SVGElement){let e="userSelect"in t.style?"userSelect":"webkitUserSelect";zn.set(t,t.style[e]),t.style[e]="none"}}function Gl(t){if($t()){if(Tt!=="disabled")return;Tt="restoring",setTimeout(()=>{ou(()=>{if(Tt==="restoring"){const e=re(t);e.documentElement.style.webkitUserSelect==="none"&&(e.documentElement.style.webkitUserSelect=Ul||""),Ul="",Tt="default"}})},300)}else if((t instanceof HTMLElement||t instanceof SVGElement)&&t&&zn.has(t)){let e=zn.get(t),n="userSelect"in t.style?"userSelect":"webkitUserSelect";t.style[n]==="none"&&(t.style[n]=e),t.getAttribute("style")===""&&t.removeAttribute("style"),zn.delete(t)}}const dn=g.createContext({register:()=>{}});dn.displayName="PressResponderContext";function Ih(t){let e=s.useContext(dn);if(e){let{register:n,ref:l,...r}=e;t=G(r,t),n()}return vr(e,t.ref),t}var Mt;class Bn{constructor(e,n,l,r){Eo(this,Mt);ml(this,Mt,!0);let o=(r==null?void 0:r.target)??l.currentTarget;const i=o==null?void 0:o.getBoundingClientRect();let u,a=0,c,f=null;l.clientX!=null&&l.clientY!=null&&(c=l.clientX,f=l.clientY),i&&(c!=null&&f!=null?(u=c-i.left,a=f-i.top):(u=i.width/2,a=i.height/2)),this.type=e,this.pointerType=n,this.target=l.currentTarget,this.shiftKey=l.shiftKey,this.metaKey=l.metaKey,this.ctrlKey=l.ctrlKey,this.altKey=l.altKey,this.x=u,this.y=a,this.key=l.key}continuePropagation(){ml(this,Mt,!1)}get shouldStopPropagation(){return Co(this,Mt)}}Mt=new WeakMap;const No=Symbol("linkClicked"),Oo="react-aria-pressable-style",Vo="data-react-aria-pressable";function lt(t){let{onPress:e,onPressChange:n,onPressStart:l,onPressEnd:r,onPressUp:o,onClick:i,isDisabled:u,isPressed:a,preventFocusOnPress:c,shouldCancelOnPointerExit:f,allowTextSelectionOnPress:d,ref:b,...p}=Ih(t),[h,$]=s.useState(!1),y=s.useRef({isPressed:!1,ignoreEmulatedMouseEvents:!1,didFirePressStart:!1,isTriggeringEvent:!1,activePointerId:null,target:null,isOverTarget:!1,pointerType:null,disposables:[]}),{addGlobalListener:m,removeAllGlobalListeners:v}=hn(),E=s.useCallback((x,S)=>{let I=y.current;if(u||I.didFirePressStart)return!1;let w=!0;if(I.isTriggeringEvent=!0,l){let k=new Bn("pressstart",S,x);l(k),w=k.shouldStopPropagation}return n&&n(!0),I.isTriggeringEvent=!1,I.didFirePressStart=!0,$(!0),w},[u,l,n]),C=s.useCallback((x,S,I=!0)=>{let w=y.current;if(!w.didFirePressStart)return!1;w.didFirePressStart=!1,w.isTriggeringEvent=!0;let k=!0;if(r){let D=new Bn("pressend",S,x);r(D),k=D.shouldStopPropagation}if(n&&n(!1),$(!1),e&&I&&!u){let D=new Bn("press",S,x);e(D),k&&(k=D.shouldStopPropagation)}return w.isTriggeringEvent=!1,k},[u,r,n,e]),R=Ee(C),A=s.useCallback((x,S)=>{let I=y.current;if(u)return!1;if(o){I.isTriggeringEvent=!0;let w=new Bn("pressup",S,x);return o(w),I.isTriggeringEvent=!1,w.shouldStopPropagation}return!0},[u,o]),K=Ee(A),P=s.useCallback(x=>{let S=y.current;if(S.isPressed&&S.target){S.didFirePressStart&&S.pointerType!=null&&C(bt(S.target,x),S.pointerType,!1),S.isPressed=!1,S.isOverTarget=!1,S.activePointerId=null,S.pointerType=null,v(),d||Gl(S.target);for(let I of S.disposables)I();S.disposables=[]}},[d,v,C]),z=Ee(P);s.useEffect(()=>{u&&y.current.isPressed&&z({currentTarget:y.current.target,shiftKey:!1,ctrlKey:!1,metaKey:!1,altKey:!1})},[u]);let B=s.useCallback(x=>{f&&P(x)},[f,P]),N=s.useCallback(x=>{u||i==null||i(x)},[u,i]),U=s.useCallback((x,S)=>{if(!u&&i){let I=new MouseEvent("click",x);Ru(I,S),i(Pr(I))}},[u,i]),_=s.useMemo(()=>{let x=y.current,S={onKeyDown(w){var k;if(wl(w.nativeEvent,w.currentTarget)&&te(w.currentTarget,j(w))){jo(j(w),w.key)&&w.preventDefault();let D=!0;!x.isPressed&&!w.repeat&&(x.target=w.currentTarget,x.isPressed=!0,x.pointerType="keyboard",D=E(w,"keyboard"));let T=w.currentTarget,O=Z=>{wl(Z,T)&&!Z.repeat&&te(T,j(Z))&&x.target&&K(bt(x.target,Z),"keyboard")};m(re(w.currentTarget),"keyup",dt(O,I),!0),D&&w.stopPropagation(),w.metaKey&&yt()&&((k=x.metaKeyEvents)==null||k.set(w.key,w.nativeEvent))}else w.key==="Meta"&&(x.metaKeyEvents=new Map)},onClick(w){if(!(w&&!te(w.currentTarget,j(w)))&&w&&w.button===0&&!x.isTriggeringEvent&&!tt.isOpening){let k=!0;if(u&&w.preventDefault(),!x.ignoreEmulatedMouseEvents&&!x.isPressed&&(x.pointerType==="virtual"||iu(w.nativeEvent))){let D=E(w,"virtual"),T=K(w,"virtual"),O=R(w,"virtual");N(w),k=D&&T&&O}else if(x.isPressed&&x.pointerType!=="keyboard"){let D=x.pointerType||w.nativeEvent.pointerType||"virtual",T=K(bt(w.currentTarget,w),D),O=R(bt(w.currentTarget,w),D,!0);k=T&&O,x.isOverTarget=!1,N(w),z(w)}x.ignoreEmulatedMouseEvents=!1,k&&w.stopPropagation()}}},I=w=>{var k,D,T;if(x.isPressed&&x.target&&wl(w,x.target)){jo(j(w),w.key)&&w.preventDefault();let O=j(w),Z=te(x.target,O);R(bt(x.target,w),"keyboard",Z),Z&&U(w,x.target),v(),w.key!=="Enter"&&Br(x.target)&&te(x.target,O)&&!w[No]&&(w[No]=!0,tt(x.target,w,!1)),x.isPressed=!1,(k=x.metaKeyEvents)==null||k.delete(w.key)}else if(w.key==="Meta"&&((D=x.metaKeyEvents)!=null&&D.size)){let O=x.metaKeyEvents;x.metaKeyEvents=void 0;for(let Z of O.values())(T=x.target)==null||T.dispatchEvent(new KeyboardEvent("keyup",Z))}};if(typeof PointerEvent<"u"){S.onPointerDown=D=>{if(D.button!==0||!te(D.currentTarget,j(D)))return;if(qp(D.nativeEvent)){x.pointerType="virtual";return}x.pointerType=D.pointerType;let T=!0;if(!x.isPressed){x.isPressed=!0,x.isOverTarget=!0,x.activePointerId=D.pointerId,x.target=D.currentTarget,d||Ou(x.target),T=E(D,x.pointerType);let O=j(D);"releasePointerCapture"in O&&("hasPointerCapture"in O?O.hasPointerCapture(D.pointerId)&&O.releasePointerCapture(D.pointerId):O.releasePointerCapture(D.pointerId)),m(re(D.currentTarget),"pointerup",w,!1),m(re(D.currentTarget),"pointercancel",k,!1)}T&&D.stopPropagation()},S.onMouseDown=D=>{if(te(D.currentTarget,j(D))&&D.button===0){if(c){let T=Dh(D.target);T&&x.disposables.push(T)}D.stopPropagation()}},S.onPointerUp=D=>{!te(D.currentTarget,j(D))||x.pointerType==="virtual"||D.button===0&&!x.isPressed&&K(D,x.pointerType||D.pointerType)},S.onPointerEnter=D=>{D.pointerId===x.activePointerId&&x.target&&!x.isOverTarget&&x.pointerType!=null&&(x.isOverTarget=!0,E(bt(x.target,D),x.pointerType))},S.onPointerLeave=D=>{D.pointerId===x.activePointerId&&x.target&&x.isOverTarget&&x.pointerType!=null&&(x.isOverTarget=!1,R(bt(x.target,D),x.pointerType,!1),B(D))};let w=D=>{if(D.pointerId===x.activePointerId&&x.isPressed&&D.button===0&&x.target){if(te(x.target,j(D))&&x.pointerType!=null){let T=!1,O=setTimeout(()=>{x.isPressed&&x.target instanceof HTMLElement&&(T?z(D):(Ve(x.target),x.target.click()))},80);m(D.currentTarget,"click",()=>T=!0,!0),x.disposables.push(()=>clearTimeout(O))}else z(D);x.isOverTarget=!1}},k=D=>{z(D)};S.onDragStart=D=>{te(D.currentTarget,j(D))&&z(D)}}return S},[m,u,c,v,d,B,E,N,U]);return s.useEffect(()=>{if(!b)return;const x=re(b.current);if(!x||!x.head||x.getElementById(Oo))return;const S=x.createElement("style");S.id=Oo;let I=pu(x);I&&(S.nonce=I),S.textContent=` +@layer { + [${Vo}] { + touch-action: pan-x pan-y pinch-zoom; + } +} + `.trim(),x.head.prepend(S)},[b]),s.useEffect(()=>{let x=y.current;return()=>{d||Gl(x.target??void 0);for(let S of x.disposables)S();x.disposables=[]}},[d]),{isPressed:a||h,pressProps:G(p,_,{[Vo]:!0})}}function Br(t){return t.tagName==="A"&&t.hasAttribute("href")}function wl(t,e){const{key:n,code:l}=t,r=e,o=r.getAttribute("role");return(n==="Enter"||n===" "||n==="Spacebar"||l==="Space")&&!(r instanceof we(r).HTMLInputElement&&!Vu(r,n)||r instanceof we(r).HTMLTextAreaElement||r.isContentEditable)&&!((o==="link"||!o&&Br(r))&&n!=="Enter")}function bt(t,e){let n=e.clientX,l=e.clientY;return{currentTarget:t,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,altKey:e.altKey,clientX:n,clientY:l,key:e.key}}function Fh(t){return t instanceof HTMLInputElement?!1:t instanceof HTMLButtonElement?t.type!=="submit"&&t.type!=="reset":!Br(t)}function jo(t,e){return t instanceof HTMLInputElement?!Vu(t,e):Fh(t)}const Lh=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function Vu(t,e){return t.type==="checkbox"||t.type==="radio"?e===" ":Lh.has(t.type)}function zh(t,e){let{elementType:n="button",isDisabled:l,onPress:r,onPressStart:o,onPressEnd:i,onPressUp:u,onPressChange:a,preventFocusOnPress:c,allowFocusWhenDisabled:f,onClick:d,href:b,target:p,rel:h,type:$="button"}=t,y;n==="button"?y={type:$,disabled:l,form:t.form,formAction:t.formAction,formEncType:t.formEncType,formMethod:t.formMethod,formNoValidate:t.formNoValidate,formTarget:t.formTarget,name:t.name,value:t.value}:y={role:"button",href:n==="a"&&!l?b:void 0,target:n==="a"?p:void 0,type:n==="input"?$:void 0,disabled:n==="input"?l:void 0,"aria-disabled":!l||n==="input"?void 0:l,rel:n==="a"?h:void 0};let{pressProps:m,isPressed:v}=lt({onPressStart:o,onPressEnd:i,onPressChange:a,onPress:r,onPressUp:u,onClick:d,isDisabled:l,preventFocusOnPress:c,ref:e}),{focusableProps:E}=jt(t,e);f&&(E.tabIndex=l?-1:E.tabIndex);let C=G(E,m,ie(t,{labelable:!0}));return{isPressed:v,buttonProps:G(y,C,{"aria-haspopup":t["aria-haspopup"],"aria-expanded":t["aria-expanded"],"aria-controls":t["aria-controls"],"aria-pressed":t["aria-pressed"],"aria-current":t["aria-current"],"aria-disabled":t["aria-disabled"]})}}function ll(t){let{isDisabled:e,onBlurWithin:n,onFocusWithin:l,onFocusWithinChange:r}=t,o=s.useRef({isFocusWithin:!1}),{addGlobalListener:i,removeAllGlobalListeners:u}=hn(),a=s.useCallback(d=>{te(d.currentTarget,j(d))&&o.current.isFocusWithin&&!te(d.currentTarget,d.relatedTarget)&&(o.current.isFocusWithin=!1,u(),n&&n(d),r&&r(!1))},[n,r,o,u]),c=Mu(a),f=s.useCallback(d=>{if(!te(d.currentTarget,j(d)))return;let b=j(d);const p=re(b),h=oe(p);if(!o.current.isFocusWithin&&h===b){l&&l(d),r&&r(!0),o.current.isFocusWithin=!0,c(d);let $=d.currentTarget;i(p,"focus",y=>{let m=j(y);if(o.current.isFocusWithin&&!te($,m)){let v=new p.defaultView.FocusEvent("blur",{relatedTarget:m});Ru(v,$);let E=Pr(v);a(E)}},{capture:!0})}},[l,r,c,i,a]);return e?{focusWithinProps:{onFocus:void 0,onBlur:void 0}}:{focusWithinProps:{onFocus:f,onBlur:a}}}function je(t={}){let{autoFocus:e=!1,isTextInput:n,within:l}=t,r=s.useRef({isFocused:!1,isFocusVisible:e||Ft()}),[o,i]=s.useState(!1),[u,a]=s.useState(()=>r.current.isFocused&&r.current.isFocusVisible),c=s.useCallback(()=>a(r.current.isFocused&&r.current.isFocusVisible),[]),f=s.useCallback(p=>{r.current.isFocused=p,r.current.isFocusVisible=Ft(),i(p),c()},[c]);Rh(p=>{r.current.isFocusVisible=p,c()},[n,o],{enabled:o,isTextInput:n});let{focusProps:d}=Ar({isDisabled:l,onFocusChange:f}),{focusWithinProps:b}=ll({isDisabled:!l,onFocusWithinChange:f});return{isFocused:o,isFocusVisible:u,focusProps:l?b:d}}let ql=!1,Kn=0;function Nh(){ql=!0,setTimeout(()=>{ql=!1},500)}function _o(t){t.pointerType==="touch"&&Nh()}function Oh(){let t=re(null);if(!(typeof t>"u"))return Kn===0&&typeof PointerEvent<"u"&&t.addEventListener("pointerup",_o),Kn++,()=>{Kn--,!(Kn>0)&&typeof PointerEvent<"u"&&t.removeEventListener("pointerup",_o)}}function He(t){let{onHoverStart:e,onHoverChange:n,onHoverEnd:l,isDisabled:r}=t,[o,i]=s.useState(!1),u=s.useRef({isHovered:!1,ignoreEmulatedMouseEvents:!1,pointerType:"",target:null}).current;s.useEffect(Oh,[]);let{addGlobalListener:a,removeAllGlobalListeners:c}=hn(),{hoverProps:f,triggerHoverEnd:d}=s.useMemo(()=>{let b=($,y)=>{if(u.pointerType=y,r||y==="touch"||u.isHovered||!te($.currentTarget,j($)))return;u.isHovered=!0;let m=$.currentTarget;u.target=m,a(re(j($)),"pointerover",v=>{u.isHovered&&u.target&&!te(u.target,j(v))&&p(v,v.pointerType)},{capture:!0}),e&&e({type:"hoverstart",target:m,pointerType:y}),n&&n(!0),i(!0)},p=($,y)=>{let m=u.target;u.pointerType="",u.target=null,!(y==="touch"||!u.isHovered||!m)&&(u.isHovered=!1,c(),l&&l({type:"hoverend",target:m,pointerType:y}),n&&n(!1),i(!1))},h={};return typeof PointerEvent<"u"&&(h.onPointerEnter=$=>{ql&&$.pointerType==="mouse"||b($,$.pointerType)},h.onPointerLeave=$=>{!r&&te($.currentTarget,j($))&&p($,$.pointerType)}),{hoverProps:h,triggerHoverEnd:p}},[e,n,l,r,u,a,c]);return s.useEffect(()=>{r&&d({currentTarget:u.target},u.pointerType)},[r]),{hoverProps:f,isHovered:o}}const yn=s.createContext({}),Kr=gn(function(e,n){[e,n]=xe(e,n,yn);let l=e,{isPending:r}=l,{buttonProps:o,isPressed:i}=zh(e,n);o=jh(o,r);let{focusProps:u,isFocused:a,isFocusVisible:c}=je(e),{hoverProps:f,isHovered:d}=He({...e,isDisabled:e.isDisabled||r}),b={isHovered:d,isPressed:(l.isPressed||i)&&!r,isFocused:a,isFocusVisible:c,isDisabled:e.isDisabled||!1,isPending:r??!1},p=ce({...e,values:b,defaultClassName:"react-aria-Button"}),h=$e(o.id),$=$e(),y=o["aria-labelledby"];r&&(y?y=`${y} ${$}`:o["aria-label"]&&(y=`${h} ${$}`));let m=s.useRef(r);s.useEffect(()=>{let E={"aria-labelledby":y||h};(!m.current&&a&&r||m.current&&a&&!r)&>(E,"assertive"),m.current=r},[r,a,y,h]);let v=ie(e,{global:!0});return delete v.onClick,g.createElement(le.button,{...G(v,p,o,u,f),type:o.type==="submit"&&r?"button":o.type,id:h,ref:n,"aria-labelledby":y,slot:e.slot||void 0,"aria-disabled":r?"true":o["aria-disabled"],"data-disabled":e.isDisabled||void 0,"data-pressed":b.isPressed||void 0,"data-hovered":d||void 0,"data-focused":a||void 0,"data-pending":r||void 0,"data-focus-visible":c||void 0},g.createElement(wh.Provider,{value:{id:$}},p.children))}),Vh=/Focus|Blur|Hover|Pointer(Enter|Leave|Over|Out)|Mouse(Enter|Leave|Over|Out)/;function jh(t,e){if(e){for(const n in t)n.startsWith("on")&&!Vh.test(n)&&(t[n]=void 0);t.href=void 0,t.target=void 0}return t}const _h=typeof document<"u"?g.useInsertionEffect??g.useLayoutEffect:()=>{};function Ct(t,e,n){let[l,r]=s.useState(t||e),o=s.useRef(l),i=s.useRef(t!==void 0),u=t!==void 0;s.useEffect(()=>{i.current,i.current=u},[u]);let a=u?t:l;_h(()=>{o.current=a});let[,c]=s.useReducer(()=>({}),{}),f=s.useCallback((d,...b)=>{let p=typeof d=="function"?d(o.current):d;Object.is(o.current,p)||(o.current=p,r(p),c(),n==null||n(p,...b))},[n]);return[a,f]}const ju=s.createContext({}),Hh=s.forwardRef(function(e,n){[e,n]=xe(e,n,ju);let{children:l,level:r=3,className:o,...i}=e,u=le[`h${r}`];return g.createElement(u,{...i,ref:n,className:o??"react-aria-Heading"},l)}),_u=t=>t?"true":void 0;function me(t,e){return bh(t,(n,l)=>{const r=typeof e=="function"?e(l)??"":e??"";return It(r,n??"")??""})}const de=(t,e,n)=>typeof t=="function"?t({className:e}):e,Wh=t=>M.jsx("svg",{"aria-hidden":"true","aria-label":"Chevron down icon",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...t,children:M.jsx("path",{clipRule:"evenodd",d:"M2.97 5.47a.75.75 0 0 1 1.06 0L8 9.44l3.97-3.97a.75.75 0 1 1 1.06 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0l-4.5-4.5a.75.75 0 0 1 0-1.06",fill:"currentColor",fillRule:"evenodd"})}),Uh=t=>M.jsx("svg",{"aria-hidden":"true","aria-label":"Chevron up icon",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...t,children:M.jsx("path",{clipRule:"evenodd",d:"M13.03 10.53a.75.75 0 0 1-1.06 0L8 6.56l-3.97 3.97a.75.75 0 0 1-1.06-1.06l4.5-4.5a.75.75 0 0 1 1.06 0l4.5 4.5a.75.75 0 0 1 0 1.06",fill:"currentColor",fillRule:"evenodd"})}),Gh=({height:t=9,width:e=9,...n})=>M.jsx("svg",{"aria-hidden":"true","aria-label":"External link icon",fill:"none",height:t,role:"presentation",viewBox:"0 0 7 7",width:e,xmlns:"http://www.w3.org/2000/svg",...n,children:M.jsx("path",{d:"M1.20592 6.84333L0.379822 6.01723L4.52594 1.8672H1.37819L1.38601 0.731812H6.48742V5.83714H5.34421L5.35203 2.6933L1.20592 6.84333Z",fill:"currentColor"})}),qh=t=>M.jsx("svg",{"aria-hidden":"true","aria-label":"Close icon",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...t,children:M.jsx("path",{clipRule:"evenodd",d:"M3.47 3.47a.75.75 0 0 1 1.06 0L8 6.94l3.47-3.47a.75.75 0 1 1 1.06 1.06L9.06 8l3.47 3.47a.75.75 0 1 1-1.06 1.06L8 9.06l-3.47 3.47a.75.75 0 0 1-1.06-1.06L6.94 8 3.47 4.53a.75.75 0 0 1 0-1.06Z",fill:"currentColor",fillRule:"evenodd"})}),Ho=t=>M.jsx("svg",{"aria-hidden":"true","aria-label":"Info icon",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...t,children:M.jsx("path",{clipRule:"evenodd",d:"M8 13.5a5.5 5.5 0 1 0 0-11a5.5 5.5 0 0 0 0 11M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14m1-9.5a1 1 0 1 1-2 0a1 1 0 0 1 2 0m-.25 3a.75.75 0 0 0-1.5 0V11a.75.75 0 0 0 1.5 0z",fill:"currentColor",fillRule:"evenodd"})}),Zh=t=>M.jsx("svg",{"aria-hidden":"true","aria-label":"Warning icon",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...t,children:M.jsx("path",{clipRule:"evenodd",d:"M7.134 2.994L2.217 11.5a1 1 0 0 0 .866 1.5h9.834a1 1 0 0 0 .866-1.5L8.866 2.993a1 1 0 0 0-1.732 0m3.03-.75c-.962-1.665-3.366-1.665-4.329 0L.918 10.749c-.963 1.666.24 3.751 2.165 3.751h9.834c1.925 0 3.128-2.085 2.164-3.751zM8 5a.75.75 0 0 1 .75.75v2a.75.75 0 0 1-1.5 0v-2A.75.75 0 0 1 8 5m1 5.75a1 1 0 1 1-2 0a1 1 0 0 1 2 0",fill:"currentColor",fillRule:"evenodd"})}),Wo=t=>M.jsx("svg",{"aria-hidden":"true","aria-label":"Danger icon",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...t,children:M.jsx("path",{clipRule:"evenodd",d:"M8 13.5a5.5 5.5 0 1 0 0-11a5.5 5.5 0 0 0 0 11M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14m1-4.5a1 1 0 1 1-2 0a1 1 0 0 1 2 0M8.75 5a.75.75 0 0 0-1.5 0v2.5a.75.75 0 0 0 1.5 0z",fill:"currentColor",fillRule:"evenodd"})}),Yh=t=>M.jsx("svg",{"aria-hidden":"true","aria-label":"Success icon",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...t,children:M.jsx("path",{clipRule:"evenodd",d:"M13.5 8a5.5 5.5 0 1 1-11 0a5.5 5.5 0 0 1 11 0M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0m-3.9-1.55a.75.75 0 1 0-1.2-.9L7.419 8.858L6.03 7.47a.75.75 0 0 0-1.06 1.06l2 2a.75.75 0 0 0 1.13-.08z",fill:"currentColor",fillRule:"evenodd"})}),Hu=s.createContext({}),Xh=s.createContext({placement:"bottom"}),Jh=typeof HTMLElement<"u"&&"inert"in HTMLElement.prototype;function Uo(t){return t.dataset.liveAnnouncer==="true"||t.dataset.reactAriaTopLayer!==void 0}let Gt=new WeakMap,Ae=[];function Rr(t,e){let n=we(t==null?void 0:t[0]),l=e instanceof n.Element?{root:e}:e,r=(l==null?void 0:l.root)??document.body,o=(l==null?void 0:l.shouldUseInert)&&Jh,i=new Set(t),u=new Set,a=y=>o&&y instanceof n.HTMLElement?y.inert:y.getAttribute("aria-hidden")==="true",c=(y,m)=>{o&&y instanceof n.HTMLElement?y.inert=m:m?y.setAttribute("aria-hidden","true"):(y.removeAttribute("aria-hidden"),y instanceof n.HTMLElement&&(y.inert=!1))},f=new Set;if(Qe())for(let y of t){let m=y;for(;m&&m!==r;){let v=m.getRootNode();"shadowRoot"in v&&f.add(v.shadowRoot),m=v.parentNode}}let d=y=>{for(let C of y.querySelectorAll("[data-live-announcer], [data-react-aria-top-layer]"))i.add(C);let m=C=>{if(u.has(C)||i.has(C)||C.parentElement&&u.has(C.parentElement)&&C.parentElement.getAttribute("role")!=="row")return NodeFilter.FILTER_REJECT;for(let R of i)if(te(C,R))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_ACCEPT},v=lu(re(y),y,NodeFilter.SHOW_ELEMENT,{acceptNode:m}),E=m(y);if(E===NodeFilter.FILTER_ACCEPT&&b(y),E!==NodeFilter.FILTER_REJECT){let C=v.nextNode();for(;C!=null;)b(C),C=v.nextNode()}},b=y=>{let m=Gt.get(y)??0;a(y)&&m===0||(m===0&&c(y,!0),u.add(y),Gt.set(y,m+1))};Ae.length&&Ae[Ae.length-1].disconnect(),d(r);let p=new MutationObserver(y=>{for(let m of y)if(m.type==="childList"){if(m.target.isConnected&&![...i,...u].some(v=>te(v,m.target)))for(let v of m.addedNodes)(v instanceof HTMLElement||v instanceof SVGElement)&&Uo(v)?i.add(v):v instanceof Element&&d(v);if(Qe()){for(let v of f)if(!v.isConnected){p.disconnect();break}}}});p.observe(r,{childList:!0,subtree:!0});let h=new Set;if(Qe())for(let y of f){let m=new MutationObserver(v=>{for(let E of v)if(E.type==="childList"){if(E.target.isConnected&&![...i,...u].some(C=>te(C,E.target)))for(let C of E.addedNodes)(C instanceof HTMLElement||C instanceof SVGElement)&&Uo(C)?i.add(C):C instanceof Element&&d(C);if(Qe()){for(let C of f)if(!C.isConnected){p.disconnect();break}}}});m.observe(y,{childList:!0,subtree:!0}),h.add(m)}let $={visibleNodes:i,hiddenNodes:u,observe(){p.observe(r,{childList:!0,subtree:!0})},disconnect(){p.disconnect()}};return Ae.push($),()=>{if(p.disconnect(),Qe())for(let y of h)y.disconnect();for(let y of u){let m=Gt.get(y);m!=null&&(m===1?(c(y,!1),Gt.delete(y)):Gt.set(y,m-1))}$===Ae[Ae.length-1]?(Ae.pop(),Ae.length&&Ae[Ae.length-1].observe()):Ae.splice(Ae.indexOf($),1)}}function Qh(t){let e=Ae[Ae.length-1];if(e&&!e.visibleNodes.has(t))return e.visibleNodes.add(t),()=>{e.visibleNodes.delete(t)}}const Ie={top:"top",bottom:"top",left:"left",right:"left"},Un={top:"bottom",bottom:"top",left:"right",right:"left"},e4={top:"left",left:"top"},Zl={top:"height",left:"width"},Wu={width:"totalWidth",height:"totalHeight"},Rn={};let t4=()=>typeof document<"u"?window.visualViewport:null;function Go(t,e){let n=0,l=0,r=0,o=0,i=0,u=0,a={},c=((e==null?void 0:e.scale)??1)>1;if(t.tagName==="BODY"||t.tagName==="HTML"){let f=document.documentElement;r=f.clientWidth,o=f.clientHeight,n=(e==null?void 0:e.width)??r,l=(e==null?void 0:e.height)??o,a.top=f.scrollTop||t.scrollTop,a.left=f.scrollLeft||t.scrollLeft,e&&(i=e.offsetTop,u=e.offsetLeft)}else({width:n,height:l,top:i,left:u}=fn(t,!1)),a.top=t.scrollTop,a.left=t.scrollLeft,r=n,o=l;return Ji()&&(t.tagName==="BODY"||t.tagName==="HTML")&&c&&(a.top=0,a.left=0,i=(e==null?void 0:e.pageTop)??0,u=(e==null?void 0:e.pageLeft)??0),{width:n,height:l,totalWidth:r,totalHeight:o,scroll:a,top:i,left:u}}function n4(t){return{top:t.scrollTop,left:t.scrollLeft,width:t.scrollWidth,height:t.scrollHeight}}function qo(t,e,n,l,r,o,i){let u=r.scroll[t]??0,a=l[Zl[t]],c=i[t]+l.scroll[Ie[t]]+o,f=i[t]+l.scroll[Ie[t]]+a-o,d=e-u+l.scroll[Ie[t]]+i[t]-l[Ie[t]],b=e-u+n+l.scroll[Ie[t]]+i[t]-l[Ie[t]];return df?Math.max(f-b,c-d):0}function l4(t){let e=window.getComputedStyle(t);return{top:parseInt(e.marginTop,10)||0,bottom:parseInt(e.marginBottom,10)||0,left:parseInt(e.marginLeft,10)||0,right:parseInt(e.marginRight,10)||0}}function Zo(t){if(Rn[t])return Rn[t];let[e,n]=t.split(" "),l=Ie[e]||"right",r=e4[l];Ie[n]||(n="center");let o=Zl[l],i=Zl[r];return Rn[t]={placement:e,crossPlacement:n,axis:l,crossAxis:r,size:o,crossSize:i},Rn[t]}function Sl(t,e,n,l,r,o,i,u,a,c,f){let{placement:d,crossPlacement:b,axis:p,crossAxis:h,size:$,crossSize:y}=l,m={};m[h]=t[h]??0,b==="center"?m[h]+=((t[y]??0)-(n[y]??0))/2:b!==h&&(m[h]+=(t[y]??0)-(n[y]??0)),m[h]+=o;const v=t[h]-n[y]+a+c,E=t[h]+t[y]-a-c;if(m[h]=_l(m[h],v,E),d===p){let C=u?f[$]:f[Wu[$]];m[Un[p]]=Math.floor(C-t[p]+r)}else m[p]=Math.floor(t[p]+t[$]+r);return m}function r4(t,e,n,l,r,o,i,u,a,c,f){let d=(t.top!=null?t.top:a[Wu.height]-(t.bottom??0)-i)-(a.scroll.top??0),b=c?n.top:0,p={top:Math.max(e.top+b,((f==null?void 0:f.offsetTop)??e.top)+b),bottom:Math.min(e.top+e.height+b,((f==null?void 0:f.offsetTop)??0)+((f==null?void 0:f.height)??0))};return u!=="top"?Math.max(0,p.bottom-d-((r.top??0)+(r.bottom??0)+o)):Math.max(0,d+i-p.top-((r.top??0)+(r.bottom??0)+o))}function Yo(t,e,n,l,r,o,i,u){let{placement:a,axis:c,size:f}=o;return a===c?Math.max(0,n[c]-(i.scroll[c]??0)-(t[c]+(u?e[c]:0))-(l[c]??0)-l[Un[c]]-r):Math.max(0,t[f]+t[c]+(u?e[c]:0)-n[c]-n[f]+(i.scroll[c]??0)-(l[c]??0)-l[Un[c]]-r)}function o4(t,e,n,l,r,o,i,u,a,c,f,d,b,p,h,$,y,m){let v=Zo(t),{size:E,crossAxis:C,crossSize:R,placement:A,crossPlacement:K}=v,P=Sl(e,u,n,v,f,d,c,b,h,$,a),z=f,B=Yo(u,c,e,r,o+f,v,a,y);if(i&&n[E]>B){let q=Zo(`${Un[A]} ${K}`),Q=Sl(e,u,n,q,f,d,c,b,h,$,a);Yo(u,c,e,r,o+f,q,a,y)>B&&(v=q,P=Q,z=f)}let N="bottom";v.axis==="top"?v.placement==="top"?N="top":v.placement==="bottom"&&(N="bottom"):v.crossAxis==="top"&&(v.crossPlacement==="top"?N="bottom":v.crossPlacement==="bottom"&&(N="top"));let U=qo(C,P[C],n[R],u,a,o,c);P[C]+=U;let _=r4(P,u,c,b,r,o,n.height,N,a,y,m);p&&p<_&&(_=p),n.height=Math.min(n.height,_),P=Sl(e,u,n,v,z,d,c,b,h,$,a),U=qo(C,P[C],n[R],u,a,o,c),P[C]+=U;let x={},S=e[C]-P[C]-r[Ie[C]],I=S+.5*e[R];const w=h/2+$,k=Ie[C]==="left"?(r.left??0)+(r.right??0):(r.top??0)+(r.bottom??0),D=n[R]-k-h/2-$,T=e[C]+h/2-(P[C]+r[Ie[C]]),O=e[C]+e[R]-h/2-(P[C]+r[Ie[C]]),Z=_l(I,T,O);x[C]=_l(Z,w,D),{placement:A,crossPlacement:K}=v,h?S=x[C]:K==="right"?S+=e[R]:K==="center"&&(S+=e[R]/2);let F=A==="left"||A==="top"?n[E]:0,V={x:A==="top"||A==="bottom"?S:F,y:A==="left"||A==="right"?S:F};return{position:P,maxHeight:_,arrowOffsetLeft:x.left,arrowOffsetTop:x.top,placement:A,triggerAnchorPoint:V}}function i4(t){let{placement:e,targetNode:n,overlayNode:l,scrollNode:r,padding:o,shouldFlip:i,boundaryElement:u,offset:a,crossOffset:c,maxHeight:f,arrowSize:d=0,arrowBoundaryOffset:b=0}=t,p=t4(),h=l instanceof HTMLElement?u4(l):document.documentElement,$=h===document.documentElement;const y=window.getComputedStyle(h).position;let m=!!y&&y!=="static",v=$?fn(n,!1):Xo(n,h,!1);if(!$){let{marginTop:B,marginLeft:N}=window.getComputedStyle(n);v.top+=parseInt(B,10)||0,v.left+=parseInt(N,10)||0}let E=fn(l,!0),C=l4(l);E.width+=(C.left??0)+(C.right??0),E.height+=(C.top??0)+(C.bottom??0);let R=n4(r),A=Go(u,p),K=Go(h,p),P;if((u.tagName==="BODY"||u.tagName==="HTML")&&!$){let B=rl(h,!1);P={top:-(B.top-A.top),left:-(B.left-A.left),width:0,height:0}}else(u.tagName==="BODY"||u.tagName==="HTML")&&$?P={top:0,left:0,width:0,height:0}:P=Xo(u,h,!1);let z=te(u,h);return o4(e,v,E,R,C,o,i,A,K,P,a,c,m,f,d,b,z,p)}function rl(t,e){let{top:n,left:l,width:r,height:o}=t.getBoundingClientRect();return e&&t instanceof t.ownerDocument.defaultView.HTMLElement&&(r=t.offsetWidth,o=t.offsetHeight),{top:n,left:l,width:r,height:o}}function fn(t,e){let{top:n,left:l,width:r,height:o}=rl(t,e),{scrollTop:i,scrollLeft:u,clientTop:a,clientLeft:c}=document.documentElement;return{top:n+i-a,left:l+u-c,width:r,height:o}}function Xo(t,e,n){let l=window.getComputedStyle(t),r;if(l.position==="fixed")r=rl(t,n);else{r=fn(t,n);let o=fn(e,n),i=window.getComputedStyle(e);o.top+=(parseInt(i.borderTopWidth,10)||0)-e.scrollTop,o.left+=(parseInt(i.borderLeftWidth,10)||0)-e.scrollLeft,r.top-=o.top,r.left-=o.left}return r.top-=parseInt(l.marginTop,10)||0,r.left-=parseInt(l.marginLeft,10)||0,r}function u4(t){let e=t.offsetParent;if(e&&e===document.body&&window.getComputedStyle(e).position==="static"&&!Jo(e)&&(e=document.documentElement),e==null)for(e=t.parentElement;e&&!Jo(e);)e=e.parentElement;return e||document.documentElement}function Jo(t){let e=window.getComputedStyle(t);return e.transform!=="none"||/transform|perspective/.test(e.willChange)||e.filter!=="none"||e.contain==="paint"||"backdropFilter"in e&&e.backdropFilter!=="none"||"WebkitBackdropFilter"in e&&e.WebkitBackdropFilter!=="none"}const Uu=new WeakMap;function a4(t){let{triggerRef:e,isOpen:n,onClose:l}=t;s.useEffect(()=>{if(!n||l===null)return;let r=o=>{let i=j(o);if(!e.current||i instanceof Node&&!te(i,e.current)||i instanceof HTMLInputElement||i instanceof HTMLTextAreaElement)return;let u=l||Uu.get(e.current);u&&u()};return window.addEventListener("scroll",r,!0),()=>{window.removeEventListener("scroll",r,!0)}},[n,l,e])}let pe=typeof document<"u"?window.visualViewport:null;function s4(t){let{direction:e}=Re(),{arrowSize:n,targetRef:l,overlayRef:r,arrowRef:o,scrollRef:i=r,placement:u="bottom",containerPadding:a=12,shouldFlip:c=!0,boundaryElement:f=typeof document<"u"?document.body:null,offset:d=0,crossOffset:b=0,shouldUpdatePosition:p=!0,isOpen:h=!0,onClose:$,maxHeight:y,arrowBoundaryOffset:m=0}=t,[v,E]=s.useState(null),C=[p,u,r.current,l.current,o==null?void 0:o.current,i.current,a,c,f,d,b,h,e,y,m,n],R=s.useRef(pe==null?void 0:pe.scale);s.useEffect(()=>{h&&(R.current=pe==null?void 0:pe.scale)},[h]);let A=s.useCallback(()=>{var _,x;if(p===!1||!h||!r.current||!l.current||!f||(pe==null?void 0:pe.scale)!==R.current)return;let z=null;if(i.current&&vt(i.current)){let S=(_=oe())==null?void 0:_.getBoundingClientRect(),I=i.current.getBoundingClientRect();z={type:"top",offset:((S==null?void 0:S.top)??0)-I.top},z.offset>I.height/2&&(z.type="bottom",z.offset=((S==null?void 0:S.bottom)??0)-I.bottom)}let B=r.current;!y&&r.current&&(B.style.top="0px",B.style.bottom="",B.style.maxHeight=(((x=window.visualViewport)==null?void 0:x.height)??window.innerHeight)+"px");let N=i4({placement:d4(u,e),overlayNode:r.current,targetNode:l.current,scrollNode:i.current||r.current,padding:a,shouldFlip:c,boundaryElement:f,offset:d,crossOffset:b,maxHeight:y,arrowSize:n??(o!=null&&o.current?rl(o.current,!0).width:0),arrowBoundaryOffset:m});if(!N.position)return;B.style.top="",B.style.bottom="",B.style.left="",B.style.right="",Object.keys(N.position).forEach(S=>B.style[S]=N.position[S]+"px"),B.style.maxHeight=N.maxHeight!=null?N.maxHeight+"px":"";let U=oe();if(z&&U&&i.current){let S=U.getBoundingClientRect(),I=i.current.getBoundingClientRect(),w=S[z.type]-I[z.type];i.current.scrollTop+=w-z.offset}E(N)},C);ne(A,C),c4(A),an({ref:r,onResize:A}),an({ref:l,onResize:A});let K=s.useRef(!1);ne(()=>{let z,B=()=>{K.current=!0,clearTimeout(z),z=setTimeout(()=>{K.current=!1},500),A()},N=()=>{K.current&&B()};return pe==null||pe.addEventListener("resize",B),pe==null||pe.addEventListener("scroll",N),()=>{pe==null||pe.removeEventListener("resize",B),pe==null||pe.removeEventListener("scroll",N)}},[A]);let P=s.useCallback(()=>{K.current||$==null||$()},[$,K]);return a4({triggerRef:l,isOpen:h,onClose:$&&P}),{overlayProps:{style:{position:v?"absolute":"fixed",top:v?void 0:0,left:v?void 0:0,zIndex:1e5,...v==null?void 0:v.position,maxHeight:(v==null?void 0:v.maxHeight)??"100vh"}},placement:(v==null?void 0:v.placement)??null,triggerAnchorPoint:(v==null?void 0:v.triggerAnchorPoint)??null,arrowProps:{"aria-hidden":"true",role:"presentation",style:{left:v==null?void 0:v.arrowOffsetLeft,top:v==null?void 0:v.arrowOffsetTop}},updatePosition:A}}function c4(t){ne(()=>(window.addEventListener("resize",t,!1),()=>{window.removeEventListener("resize",t,!1)}),[t])}function d4(t,e){return e==="rtl"?t.replace("start","right").replace("end","left"):t.replace("start","left").replace("end","right")}const Qo=g.createContext(null),Yl="react-aria-focus-scope-restore";let ae=null;function Mr(t){let{children:e,contain:n,restoreFocus:l,autoFocus:r}=t,o=s.useRef(null),i=s.useRef(null),u=s.useRef([]),{parentNode:a}=s.useContext(Qo)||{},c=s.useMemo(()=>new Jl({scopeRef:u}),[u]);ne(()=>{let b=a||he.root;if(he.getTreeNode(b.scopeRef)&&ae&&!Gn(ae,b.scopeRef)){let p=he.getTreeNode(ae);p&&(b=p)}b.addChild(c),he.addNode(c)},[c,a]),ne(()=>{let b=he.getTreeNode(u);b&&(b.contain=!!n)},[n]),ne(()=>{var $;let b=($=o.current)==null?void 0:$.nextSibling,p=[],h=y=>y.stopPropagation();for(;b&&b!==i.current;)p.push(b),b.addEventListener(Yl,h),b=b.nextSibling;return u.current=p,()=>{for(let y of p)y.removeEventListener(Yl,h)}},[e]),y4(u,l,n),h4(u,n),$4(u,l,n),g4(u,r),s.useEffect(()=>{const b=oe(re(u.current?u.current[0]:void 0));let p=null;if(Le(b,u.current)){for(let h of he.traverse())h.scopeRef&&Le(b,h.scopeRef.current)&&(p=h);p===he.getTreeNode(u)&&(ae=p.scopeRef)}},[u]),ne(()=>()=>{var p,h;let b=((h=(p=he.getTreeNode(u))==null?void 0:p.parent)==null?void 0:h.scopeRef)??null;(u===ae||Gn(u,ae))&&(!b||he.getTreeNode(b))&&(ae=b),he.removeTreeNode(u)},[u]);let f=s.useMemo(()=>f4(u),[]),d=s.useMemo(()=>({focusManager:f,parentNode:c}),[c,f]);return g.createElement(Qo.Provider,{value:d},g.createElement("span",{"data-focus-scope-start":!0,hidden:!0,ref:o}),e,g.createElement("span",{"data-focus-scope-end":!0,hidden:!0,ref:i}))}function f4(t){return{focusNext(e={}){let n=t.current,{from:l,tabbable:r,wrap:o,accept:i}=e,u=l||oe(re(n[0]??void 0)),a=n[0].previousElementSibling,c=ht(n),f=Fe(c,{tabbable:r,accept:i},n);f.currentNode=Le(u,n)?u:a;let d=f.nextNode();return!d&&o&&(f.currentNode=a,d=f.nextNode()),d&&et(d,!0),d},focusPrevious(e={}){let n=t.current,{from:l,tabbable:r,wrap:o,accept:i}=e,u=l||oe(re(n[0]??void 0)),a=n[n.length-1].nextElementSibling,c=ht(n),f=Fe(c,{tabbable:r,accept:i},n);f.currentNode=Le(u,n)?u:a;let d=f.previousNode();return!d&&o&&(f.currentNode=a,d=f.previousNode()),d&&et(d,!0),d},focusFirst(e={}){let n=t.current,{tabbable:l,accept:r}=e,o=ht(n),i=Fe(o,{tabbable:l,accept:r},n);i.currentNode=n[0].previousElementSibling;let u=i.nextNode();return u&&et(u,!0),u},focusLast(e={}){let n=t.current,{tabbable:l,accept:r}=e,o=ht(n),i=Fe(o,{tabbable:l,accept:r},n);i.currentNode=n[n.length-1].nextElementSibling;let u=i.previousNode();return u&&et(u,!0),u}}}function ht(t){return t[0].parentElement}function Qt(t){let e=he.getTreeNode(ae);for(;e&&e.scopeRef!==t;){if(e.contain)return!1;e=e.parent}return!0}function p4(t){if(!t.form)return Array.from(re(t).querySelectorAll(`input[type="radio"][name="${CSS.escape(t.name)}"]`)).filter(l=>!l.form);const e=t.form.elements.namedItem(t.name);let n=we(t);return e instanceof n.RadioNodeList?Array.from(e).filter(l=>l instanceof n.HTMLInputElement):e instanceof n.HTMLInputElement?[e]:[]}function b4(t){if(t.checked)return!0;const e=p4(t);return e.length>0&&!e.some(n=>n.checked)}function h4(t,e){let n=s.useRef(void 0),l=s.useRef(void 0);ne(()=>{let r=t.current;if(!e){l.current&&(cancelAnimationFrame(l.current),l.current=void 0);return}const o=re(r?r[0]:void 0);let i=c=>{if(c.key!=="Tab"||c.altKey||c.ctrlKey||c.metaKey||!Qt(t)||c.isComposing)return;let f=oe(o),d=t.current;if(!d||!Le(f,d))return;let b=ht(d),p=Fe(b,{tabbable:!0},d);if(!f)return;p.currentNode=f;let h=c.shiftKey?p.previousNode():p.nextNode();h||(p.currentNode=c.shiftKey?d[d.length-1].nextElementSibling:d[0].previousElementSibling,h=c.shiftKey?p.previousNode():p.nextNode()),c.preventDefault(),h&&(et(h,!0),h instanceof we(h).HTMLInputElement&&h.select())},u=c=>{(!ae||Gn(ae,t))&&Le(j(c),t.current)?(ae=t,n.current=j(c)):Qt(t)&&!at(j(c),t)?n.current?n.current.focus():ae&&ae.current&&Xl(ae.current):Qt(t)&&(n.current=j(c))},a=c=>{l.current&&cancelAnimationFrame(l.current),l.current=requestAnimationFrame(()=>{var p;let f=cn(),d=(f==="virtual"||f===null)&&rn()&&Qi(),b=oe(o);if(!d&&b&&Qt(t)&&!at(b,t)){ae=t;let h=j(c);h&&h.isConnected?(n.current=h,(p=n.current)==null||p.focus()):ae.current&&Xl(ae.current)}})};return o.addEventListener("keydown",i,!1),o.addEventListener("focusin",u,!1),r==null||r.forEach(c=>c.addEventListener("focusin",u,!1)),r==null||r.forEach(c=>c.addEventListener("focusout",a,!1)),()=>{o.removeEventListener("keydown",i,!1),o.removeEventListener("focusin",u,!1),r==null||r.forEach(c=>c.removeEventListener("focusin",u,!1)),r==null||r.forEach(c=>c.removeEventListener("focusout",a,!1))}},[t,e]),ne(()=>()=>{l.current&&cancelAnimationFrame(l.current)},[l])}function Gu(t){return at(t)}function Le(t,e){return!t||!e?!1:e.some(n=>te(n,t))}function at(t,e=null){if(t instanceof Element&&t.closest("[data-react-aria-top-layer]"))return!0;for(let{scopeRef:n}of he.traverse(he.getTreeNode(e)))if(n&&Le(t,n.current))return!0;return!1}function m4(t){return at(t,ae)}function Gn(t,e){var l;let n=(l=he.getTreeNode(e))==null?void 0:l.parent;for(;n;){if(n.scopeRef===t)return!0;n=n.parent}return!1}function et(t,e=!1){if(t!=null&&!e)try{ve(t)}catch{}else if(t!=null)try{t.focus()}catch{}}function qu(t,e=!0){let n=t[0].previousElementSibling,l=ht(t),r=Fe(l,{tabbable:e},t);r.currentNode=n;let o=r.nextNode();return e&&!o&&(l=ht(t),r=Fe(l,{tabbable:!1},t),r.currentNode=n,o=r.nextNode()),o}function Xl(t,e=!0){et(qu(t,e))}function g4(t,e){const n=g.useRef(e);s.useEffect(()=>{if(n.current){ae=t;const l=re(t.current?t.current[0]:void 0);!Le(oe(l),ae.current)&&t.current&&Xl(t.current)}n.current=!1},[t])}function y4(t,e,n){ne(()=>{if(e||n)return;let l=t.current;const r=re(l?l[0]:void 0);let o=i=>{let u=j(i);Le(u,t.current)?ae=t:Gu(u)||(ae=null)};return r.addEventListener("focusin",o,!1),l==null||l.forEach(i=>i.addEventListener("focusin",o,!1)),()=>{r.removeEventListener("focusin",o,!1),l==null||l.forEach(i=>i.removeEventListener("focusin",o,!1))}},[t,e,n])}function ei(t){let e=he.getTreeNode(ae);for(;e&&e.scopeRef!==t;){if(e.nodeToRestore)return!1;e=e.parent}return(e==null?void 0:e.scopeRef)===t}function $4(t,e,n){const l=s.useRef(typeof document<"u"?oe(re(t.current?t.current[0]:void 0)):null);ne(()=>{let r=t.current;const o=re(r?r[0]:void 0);if(!e||n)return;let i=()=>{(!ae||Gn(ae,t))&&Le(oe(o),t.current)&&(ae=t)};return o.addEventListener("focusin",i,!1),r==null||r.forEach(u=>u.addEventListener("focusin",i,!1)),()=>{o.removeEventListener("focusin",i,!1),r==null||r.forEach(u=>u.removeEventListener("focusin",i,!1))}},[t,n]),ne(()=>{const r=re(t.current?t.current[0]:void 0);if(!e)return;let o=i=>{if(i.key!=="Tab"||i.altKey||i.ctrlKey||i.metaKey||!Qt(t)||i.isComposing)return;let u=r.activeElement;if(!at(u,t)||!ei(t))return;let a=he.getTreeNode(t);if(!a)return;let c=a.nodeToRestore,f=Fe(r.body,{tabbable:!0});f.currentNode=u;let d=i.shiftKey?f.previousNode():f.nextNode();if((!c||!c.isConnected||c===r.body)&&(c=void 0,a.nodeToRestore=void 0),(!d||!at(d,t))&&c){f.currentNode=c;do d=i.shiftKey?f.previousNode():f.nextNode();while(at(d,t));i.preventDefault(),i.stopPropagation(),d?et(d,!0):Gu(c)?et(c,!0):u.blur()}};return n||r.addEventListener("keydown",o,!0),()=>{n||r.removeEventListener("keydown",o,!0)}},[t,e,n]),ne(()=>{const r=re(t.current?t.current[0]:void 0);if(!e)return;let o=he.getTreeNode(t);if(o)return o.nodeToRestore=l.current??void 0,()=>{let i=he.getTreeNode(t);if(!i)return;let u=i.nodeToRestore,a=oe(r);if(e&&u&&(a&&at(a,t)||a===r.body&&ei(t))){let c=he.clone();requestAnimationFrame(()=>{if(r.activeElement===r.body){let f=c.getTreeNode(t);for(;f;){if(f.nodeToRestore&&f.nodeToRestore.isConnected){ti(f.nodeToRestore);return}f=f.parent}for(f=c.getTreeNode(t);f;){if(f.scopeRef&&f.scopeRef.current&&he.getTreeNode(f.scopeRef)){let d=qu(f.scopeRef.current,!0);ti(d);return}f=f.parent}}})}}},[t,e])}function ti(t){t.dispatchEvent(new CustomEvent(Yl,{bubbles:!0,cancelable:!0}))&&et(t)}function Fe(t,e,n){let l=e!=null&&e.tabbable?du:cu,r=(t==null?void 0:t.nodeType)===Node.ELEMENT_NODE?t:null,o=re(r),i=lu(o,t||o,NodeFilter.SHOW_ELEMENT,{acceptNode(u){return te(e==null?void 0:e.from,u)||e!=null&&e.tabbable&&u.tagName==="INPUT"&&u.getAttribute("type")==="radio"&&(!b4(u)||i.currentNode.tagName==="INPUT"&&i.currentNode.type==="radio"&&i.currentNode.name===u.name)?NodeFilter.FILTER_REJECT:l(u)&&(!n||Le(u,n))&&(!(e!=null&&e.accept)||e.accept(u))?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});return e!=null&&e.from&&(i.currentNode=e.from),i}class Ir{constructor(){this.fastMap=new Map,this.root=new Jl({scopeRef:null}),this.fastMap.set(null,this.root)}get size(){return this.fastMap.size}getTreeNode(e){return this.fastMap.get(e)}addTreeNode(e,n,l){let r=this.fastMap.get(n??null);if(!r)return;let o=new Jl({scopeRef:e});r.addChild(o),o.parent=r,this.fastMap.set(e,o),l&&(o.nodeToRestore=l)}addNode(e){this.fastMap.set(e.scopeRef,e)}removeTreeNode(e){if(e===null)return;let n=this.fastMap.get(e);if(!n)return;let l=n.parent;for(let o of this.traverse())o!==n&&n.nodeToRestore&&o.nodeToRestore&&n.scopeRef&&n.scopeRef.current&&Le(o.nodeToRestore,n.scopeRef.current)&&(o.nodeToRestore=n.nodeToRestore);let r=n.children;l&&(l.removeChild(n),r.size>0&&r.forEach(o=>l&&l.addChild(o))),this.fastMap.delete(n.scopeRef)}*traverse(e=this.root){if(e.scopeRef!=null&&(yield e),e.children.size>0)for(let n of e.children)yield*this.traverse(n)}clone(){var n;let e=new Ir;for(let l of this.traverse())e.addTreeNode(l.scopeRef,((n=l.parent)==null?void 0:n.scopeRef)??null,l.nodeToRestore);return e}}class Jl{constructor(e){this.children=new Set,this.contain=!1,this.scopeRef=e.scopeRef}addChild(e){this.children.add(e),e.parent=this}removeChild(e){this.children.delete(e),e.parent=void 0}}let he=new Ir;function v4(t){let{ref:e,onInteractOutside:n,isDisabled:l,onInteractOutsideStart:r}=t,o=s.useRef({isPointerDown:!1,ignoreEmulatedMouseEvents:!1}),i=Ee(a=>{n&&ni(a,e)&&(r&&r(a),o.current.isPointerDown=!0)}),u=Ee(a=>{n&&n(a)});s.useEffect(()=>{let a=o.current;if(l)return;const c=e.current,f=re(c);if(typeof PointerEvent<"u"){let d=b=>{a.isPointerDown&&ni(b,e)&&u(b),a.isPointerDown=!1};return f.addEventListener("pointerdown",i,!0),f.addEventListener("click",d,!0),()=>{f.removeEventListener("pointerdown",i,!0),f.removeEventListener("click",d,!0)}}},[e,l])}function ni(t,e){if(t.button>0)return!1;let n=j(t);if(n){const l=n.ownerDocument;if(!l||!te(l.documentElement,n)||n.closest("[data-react-aria-top-layer]"))return!1}return e.current?!t.composedPath().includes(e.current):!1}const Ue=[];function Zu(t,e){let{onClose:n,shouldCloseOnBlur:l,isOpen:r,isDismissable:o=!1,isKeyboardDismissDisabled:i=!1,shouldCloseOnInteractOutside:u}=t,a=s.useRef(void 0);s.useEffect(()=>{if(r&&!Ue.includes(e))return Ue.push(e),()=>{let h=Ue.indexOf(e);h>=0&&Ue.splice(h,1)}},[r,e]);let c=()=>{Ue[Ue.length-1]===e&&n&&n()},f=h=>{const $=Ue[Ue.length-1];a.current=$,(!u||u(j(h)))&&$===e&&h.stopPropagation()},d=h=>{(!u||u(j(h)))&&(Ue[Ue.length-1]===e&&h.stopPropagation(),a.current===e&&c()),a.current=void 0},b=h=>{h.key==="Escape"&&!i&&!h.nativeEvent.isComposing&&(h.stopPropagation(),h.preventDefault(),c())};v4({ref:e,onInteractOutside:o&&r?d:void 0,onInteractOutsideStart:f});let{focusWithinProps:p}=ll({isDisabled:!l,onBlurWithin:h=>{!h.relatedTarget||m4(h.relatedTarget)||(!u||u(h.relatedTarget))&&(n==null||n())}});return{overlayProps:{onKeyDown:b,...p},underlayProps:{}}}const ln=typeof document<"u"&&window.visualViewport;let Mn=0,Dl;function Yu(t={}){let{isDisabled:e}=t;ne(()=>{if(!e)return Mn++,Mn===1&&($t()?Dl=C4():Dl=x4()),()=>{Mn--,Mn===0&&Dl()}},[e])}function x4(){let t=window.innerWidth-document.documentElement.clientWidth;return dt(t>0&&("scrollbarGutter"in document.documentElement.style?Nn(document.documentElement,"scrollbarGutter","stable"):Nn(document.documentElement,"paddingRight",`${t}px`)),Nn(document.documentElement,"overflow","hidden"))}function C4(){let t=Nn(document.documentElement,"overflow","hidden"),e,n=!1,l=f=>{let d=j(f);e=st(d)?d:Xe(d,!0),n=!1;let b=d.ownerDocument.defaultView.getSelection();b&&!b.isCollapsed&&b.containsNode(d,!0)&&(n=!0),f.composedPath().some(p=>p instanceof HTMLInputElement&&p.type==="range")&&(n=!0),"selectionStart"in d&&"selectionEnd"in d&&d.selectionStart{if(!(f.touches.length===2||n)){if(!e||e===document.documentElement||e===document.body){f.preventDefault();return}e.scrollHeight===e.clientHeight&&e.scrollWidth===e.clientWidth&&f.preventDefault()}},u=f=>{var p;let d=j(f),b=f.relatedTarget;if(b&&tn(b))b.focus({preventScroll:!0}),li(b,tn(d));else if(!b){let h=(p=d.parentElement)==null?void 0:p.closest("[tabindex]");h==null||h.focus({preventScroll:!0})}},a=HTMLElement.prototype.focus;HTMLElement.prototype.focus=function(f){let d=oe(),b=d!=null&&tn(d);a.call(this,{...f,preventScroll:!0}),(!f||!f.preventScroll)&&li(this,b)};let c=dt(kl(document,"touchstart",l,{passive:!1,capture:!0}),kl(document,"touchmove",i,{passive:!1,capture:!0}),kl(document,"blur",u,!0));return()=>{t(),c(),r.remove(),HTMLElement.prototype.focus=a}}function Nn(t,e,n){let l=t.style[e];return t.style[e]=n,()=>{t.style[e]=l}}function kl(t,e,n,l){return t.addEventListener(e,n,l),()=>{t.removeEventListener(e,n,l)}}function li(t,e){e||!ln?ri(t):ln.addEventListener("resize",()=>ri(t),{once:!0})}function ri(t){let e=document.scrollingElement||document.documentElement,n=t;for(;n&&n!==e;){let l=Xe(n);if(l!==document.documentElement&&l!==document.body&&l!==n){let r=l.getBoundingClientRect(),o=n.getBoundingClientRect();if(o.topr.top+n.clientHeight){let i=r.bottom;ln&&(i=Math.min(i,ln.offsetTop+ln.height));let u=o.top-r.top-((i-r.top)/2-o.height/2);l.scrollTo({top:Math.max(0,Math.min(l.scrollHeight-l.clientHeight,l.scrollTop+u)),behavior:"smooth"})}}n=l.parentElement}}function E4(t,e){let{triggerRef:n,popoverRef:l,groupRef:r,isNonModal:o,isKeyboardDismissDisabled:i,shouldCloseOnInteractOutside:u,...a}=t,c=a.trigger==="SubmenuTrigger",{overlayProps:f,underlayProps:d}=Zu({isOpen:e.isOpen,onClose:e.close,shouldCloseOnBlur:!0,isDismissable:!o||c,isKeyboardDismissDisabled:i,shouldCloseOnInteractOutside:u},r??l),{overlayProps:b,arrowProps:p,placement:h,triggerAnchorPoint:$}=s4({...a,targetRef:n,overlayRef:l,isOpen:e.isOpen,onClose:o&&!c?e.close:null});return Yu({isDisabled:o||!e.isOpen}),s.useEffect(()=>{if(e.isOpen&&l.current)return o?Qh((r==null?void 0:r.current)??l.current):Rr([(r==null?void 0:r.current)??l.current],{shouldUseInert:!0})},[o,e.isOpen,l,r]),{popoverProps:G(f,b),arrowProps:p,underlayProps:d,placement:h,triggerAnchorPoint:$}}var Xu={};Xu={dismiss:"تجاهل"};var Ju={};Ju={dismiss:"Отхвърляне"};var Qu={};Qu={dismiss:"Odstranit"};var ea={};ea={dismiss:"Luk"};var ta={};ta={dismiss:"Schließen"};var na={};na={dismiss:"Απόρριψη"};var la={};la={dismiss:"Dismiss"};var ra={};ra={dismiss:"Descartar"};var oa={};oa={dismiss:"Lõpeta"};var ia={};ia={dismiss:"Hylkää"};var ua={};ua={dismiss:"Rejeter"};var aa={};aa={dismiss:"התעלם"};var sa={};sa={dismiss:"Odbaci"};var ca={};ca={dismiss:"Elutasítás"};var da={};da={dismiss:"Ignora"};var fa={};fa={dismiss:"閉じる"};var pa={};pa={dismiss:"무시"};var ba={};ba={dismiss:"Atmesti"};var ha={};ha={dismiss:"Nerādīt"};var ma={};ma={dismiss:"Lukk"};var ga={};ga={dismiss:"Negeren"};var ya={};ya={dismiss:"Zignoruj"};var $a={};$a={dismiss:"Descartar"};var va={};va={dismiss:"Dispensar"};var xa={};xa={dismiss:"Revocare"};var Ca={};Ca={dismiss:"Пропустить"};var Ea={};Ea={dismiss:"Zrušiť"};var wa={};wa={dismiss:"Opusti"};var Sa={};Sa={dismiss:"Odbaci"};var Da={};Da={dismiss:"Avvisa"};var ka={};ka={dismiss:"Kapat"};var Pa={};Pa={dismiss:"Скасувати"};var Aa={};Aa={dismiss:"取消"};var Ta={};Ta={dismiss:"關閉"};var Ba={};Ba={"ar-AE":Xu,"bg-BG":Ju,"cs-CZ":Qu,"da-DK":ea,"de-DE":ta,"el-GR":na,"en-US":la,"es-ES":ra,"et-EE":oa,"fi-FI":ia,"fr-FR":ua,"he-IL":aa,"hr-HR":sa,"hu-HU":ca,"it-IT":da,"ja-JP":fa,"ko-KR":pa,"lt-LT":ba,"lv-LV":ha,"nb-NO":ma,"nl-NL":ga,"pl-PL":ya,"pt-BR":$a,"pt-PT":va,"ro-RO":xa,"ru-RU":Ca,"sk-SK":Ea,"sl-SI":wa,"sr-SP":Sa,"sv-SE":Da,"tr-TR":ka,"uk-UA":Pa,"zh-CN":Aa,"zh-TW":Ta};const w4=Symbol.for("react-aria.i18n.locale"),S4=Symbol.for("react-aria.i18n.strings");let Dt;class ol{constructor(e,n="en-US"){this.strings=Object.fromEntries(Object.entries(e).filter(([,l])=>l)),this.defaultLocale=n}getStringForLocale(e,n){let r=this.getStringsForLocale(n)[e];if(!r)throw new Error(`Could not find intl message ${e} in ${n} locale`);return r}getStringsForLocale(e){let n=this.strings[e];return n||(n=D4(e,this.strings,this.defaultLocale),this.strings[e]=n),n}static getGlobalDictionaryForPackage(e){if(typeof window>"u")return null;let n=window[w4];if(Dt===void 0){let r=window[S4];if(!r)return null;Dt={};for(let o in r)Dt[o]=new ol({[n]:r[o]},n)}let l=Dt==null?void 0:Dt[e];if(!l)throw new Error(`Strings for package "${e}" were not included by LocalizedStringProvider. Please add it to the list passed to createLocalizedStringDictionary.`);return l}}function D4(t,e,n="en-US"){if(e[t])return e[t];let l=k4(t);if(e[l])return e[l];for(let r in e)if(r.startsWith(l+"-"))return e[r];return e[n]}function k4(t){return Intl.Locale?new Intl.Locale(t).language:t.split("-")[0]}const oi=new Map,ii=new Map;class P4{constructor(e,n){this.locale=e,this.strings=n}format(e,n){let l=this.strings.getStringForLocale(e,this.locale);return typeof l=="function"?l(n,this):l}plural(e,n,l="cardinal"){let r=n["="+e];if(r)return typeof r=="function"?r():r;let o=this.locale+":"+l,i=oi.get(o);i||(i=new Intl.PluralRules(this.locale,{type:l}),oi.set(o,i));let u=i.select(e);return r=n[u]||n.other,typeof r=="function"?r():r}number(e){let n=ii.get(this.locale);return n||(n=new Intl.NumberFormat(this.locale),ii.set(this.locale,n)),n.format(e)}select(e,n){let l=e[n]||e.other;return typeof l=="function"?l():l}}const ui=new WeakMap;function A4(t){let e=ui.get(t);return e||(e=new ol(t),ui.set(t,e)),e}function T4(t,e){return e&&ol.getGlobalDictionaryForPackage(e)||A4(t)}function Ne(t,e){let{locale:n}=Re(),l=T4(t,e);return s.useMemo(()=>new P4(n,l),[n,l])}const ai={border:0,clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap"};function $n(t={}){let{style:e,isFocusable:n}=t,[l,r]=s.useState(!1),{focusWithinProps:o}=ll({isDisabled:!n,onFocusWithinChange:u=>r(u)}),i=s.useMemo(()=>l?e:e?{...ai,...e}:ai,[l]);return{visuallyHiddenProps:{...o,style:i}}}function Ka(t){let{children:e,elementType:n="div",isFocusable:l,style:r,...o}=t,{visuallyHiddenProps:i}=$n(t);return g.createElement(n,G(o,i),e)}function B4(t){return t&&t.__esModule?t.default:t}function Ql(t){let{onDismiss:e,...n}=t,l=Ne(B4(Ba),"@react-aria/overlays"),r=un(n,l.format("dismiss")),o=()=>{e&&e()};return g.createElement(Ka,null,g.createElement("button",{...r,tabIndex:-1,onClick:o,style:{width:1,height:1}}))}const K4=g.forwardRef(({children:t,...e},n)=>{let l=s.useRef(!1),r=s.useContext(dn),o=G(r||{},{...e,register(){l.current=!0,r&&r.register()}});return o.ref=ke(n||(r==null?void 0:r.ref)),vr(r,o.ref),s.useEffect(()=>{l.current||(l.current=!0)},[]),g.createElement(dn.Provider,{value:o},t)});function R4({children:t}){let e=s.useMemo(()=>({register:()=>{}}),[]);return g.createElement(dn.Provider,{value:e},t)}const M4=s.createContext({});function I4(){return s.useContext(M4)??{}}const Ra=g.createContext(null);function er(t){let e=ct(),{portalContainer:n=e?null:document.body,isExiting:l}=t,[r,o]=s.useState(!1),i=s.useMemo(()=>({contain:r,setContain:o}),[r,o]),{getContainer:u}=I4();if(!t.portalContainer&&u&&(n=u()),!n)return null;let a=t.children;return t.disableFocusManagement||(a=g.createElement(Mr,{restoreFocus:!0,contain:(t.shouldContainFocus||r)&&!l},a)),a=g.createElement(Ra.Provider,{value:i},g.createElement(R4,null,a)),Yi.createPortal(a,n)}function Ma(){let t=s.useContext(Ra),e=t==null?void 0:t.setContain;ne(()=>{e==null||e(!0)},[e])}function il(t){let[e,n]=Ct(t.isOpen,t.defaultOpen||!1,t.onOpenChange);const l=s.useCallback(()=>{n(!0)},[n]),r=s.useCallback(()=>{n(!1)},[n]),o=s.useCallback(()=>{n(!e)},[n,e]);return{isOpen:e,setOpen:n,open:l,close:r,toggle:o}}const Fr=s.createContext(null),si=s.createContext(null),F4=s.forwardRef(function(e,n){[e,n]=xe(e,n,Fr);let l=s.useContext(Et),r=il(e),o=e.isOpen!=null||e.defaultOpen!=null||!l?r:l,i=Ll(n,o.isOpen)||e.isExiting||!1,u=gh(),{direction:a}=Re();if(u){let c=e.children;return typeof c=="function"&&(c=c({trigger:e.trigger||null,placement:"bottom",isEntering:!1,isExiting:!1,defaultChildren:null})),g.createElement(g.Fragment,null,c)}return o&&!o.isOpen&&!i?null:g.createElement(L4,{...e,triggerRef:e.triggerRef,state:o,popoverRef:n,isExiting:i,dir:a})});function L4({state:t,isExiting:e,UNSTABLE_portalContainer:n,clearContexts:l,...r}){var B,N;let o=s.useRef(null),i=s.useRef(null),u=s.useContext(si),a=u&&r.trigger==="SubmenuTrigger",{popoverProps:c,underlayProps:f,arrowProps:d,placement:b,triggerAnchorPoint:p}=E4({...r,offset:r.offset??8,arrowRef:o,groupRef:a?u:i},t),h=r.popoverRef,$=Cr(h,!!b)||r.isEntering||!1,y=ce({...r,defaultClassName:"react-aria-Popover",values:{trigger:r.trigger||null,placement:b,isEntering:$,isExiting:e}}),m=!r.isNonModal||r.trigger==="SubmenuTrigger",[v,E]=s.useState(!1);ne(()=>{h.current&&E(m&&!h.current.querySelector("[role=dialog]"))},[h,m]),s.useEffect(()=>{v&&(r.trigger!=="SubmenuTrigger"||cn()!=="pointer")&&h.current&&!vt(h.current)&&ve(h.current)},[v,h,r.trigger]);let C=s.useMemo(()=>{let U=y.children;if(l)for(let _ of l)U=g.createElement(_.Provider,{value:null},U);return U},[y.children,l]),[R,A]=s.useState(null),K=s.useCallback(()=>{r.triggerRef.current&&A(r.triggerRef.current.getBoundingClientRect().width+"px")},[r.triggerRef]);ne(K,[K]),an({ref:(B=y.style)!=null&&B["--trigger-width"]?void 0:r.triggerRef,onResize:K});let P={...c.style,"--trigger-anchor-point":p?`${p.x}px ${p.y}px`:void 0,...y.style,"--trigger-width":((N=y.style)==null?void 0:N["--trigger-width"])||R},z=g.createElement(le.div,{...G(ie(r,{global:!0}),c),...y,role:v?"dialog":void 0,tabIndex:v?-1:void 0,"aria-label":r["aria-label"],"aria-labelledby":r["aria-labelledby"],ref:h,slot:r.slot||void 0,style:P,dir:r.dir,"data-trigger":r.trigger,"data-placement":b,"data-entering":$||void 0,"data-exiting":e||void 0},!r.isNonModal&&g.createElement(Ql,{onDismiss:t.close}),g.createElement(Xh.Provider,{value:{...d,placement:b,ref:o}},C),g.createElement(Ql,{onDismiss:t.close}));return a?g.createElement(er,{...r,shouldContainFocus:v,isExiting:e,portalContainer:n??(u==null?void 0:u.current)??void 0},z):g.createElement(er,{...r,shouldContainFocus:v,isExiting:e,portalContainer:n},!r.isNonModal&&t.isOpen&&g.createElement("div",{"data-testid":"underlay",...f,style:{position:"fixed",inset:0}}),g.createElement("div",{ref:i,style:{display:"contents"}},g.createElement(si.Provider,{value:i},z)))}class Ge{constructor(e){this.value=null,this.level=0,this.hasChildNodes=!1,this.rendered=null,this.textValue="",this["aria-label"]=void 0,this.index=0,this.parentKey=null,this.prevKey=null,this.nextKey=null,this.firstChildKey=null,this.lastChildKey=null,this.props={},this.colSpan=null,this.colIndex=null,this.type=this.constructor.type,this.key=e}get childNodes(){throw new Error("childNodes is not supported")}clone(){let e=new this.constructor(this.key);return e.value=this.value,e.level=this.level,e.hasChildNodes=this.hasChildNodes,e.rendered=this.rendered,e.textValue=this.textValue,e["aria-label"]=this["aria-label"],e.index=this.index,e.parentKey=this.parentKey,e.prevKey=this.prevKey,e.nextKey=this.nextKey,e.firstChildKey=this.firstChildKey,e.lastChildKey=this.lastChildKey,e.props=this.props,e.render=this.render,e.colSpan=this.colSpan,e.colIndex=this.colIndex,e}filter(e,n,l){let r=this.clone();return n.addDescendants(r,e),r}}class ul extends Ge{filter(e,n,l){let[r,o]=Fa(e,n,this.firstChildKey,l),i=this.clone();return i.firstChildKey=r,i.lastChildKey=o,i}}const lo=class lo extends Ge{};lo.type="header";let ci=lo;const ro=class ro extends Ge{};ro.type="loader";let qn=ro;const oo=class oo extends ul{filter(e,n,l){if(l(this.textValue,this)){let r=this.clone();return n.addDescendants(r,e),r}return null}};oo.type="item";let tr=oo;const io=class io extends ul{filter(e,n,l){let r=super.filter(e,n,l);if(r&&r.lastChildKey!==null){let o=e.getItem(r.lastChildKey);if(o&&o.type!=="header")return r}return null}};io.type="section";let nr=io;class Ia{get size(){return this.itemCount}getKeys(){return this.keyMap.keys()}*[Symbol.iterator](){let e=this.firstKey!=null?this.keyMap.get(this.firstKey):void 0;for(;e;)yield e,e=e.nextKey!=null?this.keyMap.get(e.nextKey):void 0}getChildren(e){let n=this.keyMap;return{*[Symbol.iterator](){let l=n.get(e),r=(l==null?void 0:l.firstChildKey)!=null?n.get(l.firstChildKey):null;for(;r;)yield r,r=r.nextKey!=null?n.get(r.nextKey):void 0}}}getKeyBefore(e){let n=this.keyMap.get(e);if(!n)return null;if(n.prevKey!=null){for(n=this.keyMap.get(n.prevKey);n&&n.type!=="item"&&n.lastChildKey!=null;)n=this.keyMap.get(n.lastChildKey);return(n==null?void 0:n.key)??null}return n.parentKey}getKeyAfter(e){let n=this.keyMap.get(e);if(!n)return null;if(n.type!=="item"&&n.firstChildKey!=null)return n.firstChildKey;for(;n;){if(n.nextKey!=null)return n.nextKey;if(n.parentKey!=null)n=this.keyMap.get(n.parentKey);else return null}return null}getFirstKey(){return this.firstKey}getLastKey(){let e=this.lastKey!=null?this.keyMap.get(this.lastKey):null;for(;(e==null?void 0:e.lastChildKey)!=null;)e=this.keyMap.get(e.lastChildKey);return(e==null?void 0:e.key)??null}getItem(e){return this.keyMap.get(e)??null}at(){throw new Error("Not implemented")}clone(){let e=this.constructor,n=new e;return n.keyMap=new Map(this.keyMap),n.firstKey=this.firstKey,n.lastKey=this.lastKey,n.itemCount=this.itemCount,n}addNode(e){if(this.frozen)throw new Error("Cannot add a node to a frozen collection");e.type==="item"&&this.keyMap.get(e.key)==null&&this.itemCount++,this.keyMap.set(e.key,e)}addDescendants(e,n){this.addNode(e);let l=n.getChildren(e.key);for(let r of l)this.addDescendants(r,n)}removeNode(e){if(this.frozen)throw new Error("Cannot remove a node to a frozen collection");let n=this.keyMap.get(e);n!=null&&n.type==="item"&&this.itemCount--,this.keyMap.delete(e)}commit(e,n,l=!1){if(this.frozen)throw new Error("Cannot commit a frozen collection");this.firstKey=e,this.lastKey=n,this.frozen=!l}filter(e){let n=new this.constructor,[l,r]=Fa(this,n,this.firstKey,e);return n==null||n.commit(l,r),n}constructor(){this.keyMap=new Map,this.firstKey=null,this.lastKey=null,this.frozen=!1,this.itemCount=0}}function Fa(t,e,n,l){if(n==null)return[null,null];let r=null,o=null,i=t.getItem(n);for(;i!=null;){let u=i.filter(t,e,l);u!=null&&(u.nextKey=null,o&&(u.prevKey=o.key,o.nextKey=u.key),r==null&&(r=u),e.addNode(u),o=u),i=i.nextKey!=null?t.getItem(i.nextKey):null}if(o&&o.type==="separator"){let u=o.prevKey;e.removeNode(o.key),u!=null?(o=e.getItem(u),o.nextKey=null):o=null}return[(r==null?void 0:r.key)??null,(o==null?void 0:o.key)??null]}class La{constructor(e){this._firstChild=null,this._lastChild=null,this._previousSibling=null,this._nextSibling=null,this._parentNode=null,this._minInvalidChildIndex=null,this.ownerDocument=e}*[Symbol.iterator](){let e=this.firstChild;for(;e;)yield e,e=e.nextSibling}get firstChild(){return this._firstChild}set firstChild(e){this._firstChild=e,this.ownerDocument.markDirty(this)}get lastChild(){return this._lastChild}set lastChild(e){this._lastChild=e,this.ownerDocument.markDirty(this)}get previousSibling(){return this._previousSibling}set previousSibling(e){this._previousSibling=e,this.ownerDocument.markDirty(this)}get nextSibling(){return this._nextSibling}set nextSibling(e){this._nextSibling=e,this.ownerDocument.markDirty(this)}get parentNode(){return this._parentNode}set parentNode(e){this._parentNode=e,this.ownerDocument.markDirty(this)}get isConnected(){var e;return((e=this.parentNode)==null?void 0:e.isConnected)||!1}invalidateChildIndices(e){(this._minInvalidChildIndex==null||!this._minInvalidChildIndex.isConnected||e.indexthis.subscriptions.delete(e)}resetAfterSSR(){this.isSSR&&(this.isSSR=!1,this.firstChild=null,this.lastChild=null,this.nodeId=0)}}function Lr(t){let{children:e,items:n,idScope:l,addIdAndValue:r,dependencies:o=[]}=t,i=s.useMemo(()=>{},[e]),u=s.useMemo(()=>new WeakMap,[...o,i]);return s.useMemo(()=>{if(n&&typeof e=="function"){let a=[];for(let c of n){let f=N4(c)?c:null,d=f?u.get(f):null;if(!d){d=e(c);let b=d.props.id??(c==null?void 0:c.key)??(c==null?void 0:c.id);l!=null&&d.props.id==null&&b!=null&&(b=l+":"+b);let p=b??a.length;d=s.cloneElement(d,r?{key:p,id:b,value:c}:{key:p}),f&&u.set(f,d)}a.push(d)}return a}else if(typeof e!="function")return e},[e,n,u,l,r])}function N4(t){switch(typeof t){case"object":return t!=null;case"function":case"symbol":return!0;default:return!1}}var Pl={exports:{}},Al={};/** + * @license React + * use-sync-external-store-shim.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var di;function O4(){if(di)return Al;di=1;var t=up();function e(d,b){return d===b&&(d!==0||1/d===1/b)||d!==d&&b!==b}var n=typeof Object.is=="function"?Object.is:e,l=t.useState,r=t.useEffect,o=t.useLayoutEffect,i=t.useDebugValue;function u(d,b){var p=b(),h=l({inst:{value:p,getSnapshot:b}}),$=h[0].inst,y=h[1];return o(function(){$.value=p,$.getSnapshot=b,a($)&&y({inst:$})},[d,p,b]),r(function(){return a($)&&y({inst:$}),d(function(){a($)&&y({inst:$})})},[d]),i(p),p}function a(d){var b=d.getSnapshot;d=d.value;try{var p=b();return!n(d,p)}catch{return!0}}function c(d,b){return b()}var f=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?c:u;return Al.useSyncExternalStore=t.useSyncExternalStore!==void 0?t.useSyncExternalStore:f,Al}var fi;function V4(){return fi||(fi=1,Pl.exports=O4()),Pl.exports}var j4=V4();const za=s.createContext(!1),pn=s.createContext(null);function zr(t){if(s.useContext(pn))return t.content;let{collection:n,document:l}=U4(t.createCollection);return g.createElement(g.Fragment,null,g.createElement(mh,null,g.createElement(pn.Provider,{value:l},t.content)),g.createElement(_4,{render:t.children,collection:n}))}function _4({collection:t,render:e}){return e(t)}function H4(t,e,n){let l=ct(),r=s.useRef(l);r.current=l;let o=s.useCallback(()=>r.current?n():e(),[e,n]);return j4.useSyncExternalStore(t,o)}const W4=typeof g.useSyncExternalStore=="function"?g.useSyncExternalStore:H4;function U4(t){let[e]=s.useState(()=>new z4((t==null?void 0:t())||new Ia)),n=s.useCallback(i=>e.subscribe(i),[e]),l=s.useCallback(()=>{let i=e.getCollection();return e.isSSR&&e.resetAfterSSR(),i},[e]),r=s.useCallback(()=>(e.isSSR=!0,e.getCollection()),[e]);return{collection:W4(n,l,r),document:e}}const lr=s.createContext(null);function G4(t){var n;return n=class extends Ge{},n.type=t,n}function Na(t,e,n,l,r,o){typeof t=="string"&&(t=G4(t));let i=s.useCallback(a=>{a==null||a.setProps(e,n,t,l,o)},[e,n,l,o,t]),u=s.useContext(lr);if(u){let a=u.ownerDocument.nodesByProps.get(e);return a||(a=u.ownerDocument.createElement(t.type),a.setProps(e,n,t,l,o),u.appendChild(a),u.ownerDocument.updateCollection(),u.ownerDocument.nodesByProps.set(e,a)),r?g.createElement(lr.Provider,{value:a},r):null}return g.createElement(t.type,{ref:i},r)}function vn(t,e){let n=({node:r})=>e(r.props,r.props.ref,r),l=s.forwardRef((r,o)=>{let i=s.useContext(Wl);if(!s.useContext(za)){if(e.length>=3)throw new Error(e.name+" cannot be rendered outside a collection.");return e(r,o)}return Na(t,r,o,"children"in r?r.children:null,null,a=>g.createElement(Wl.Provider,{value:i},g.createElement(n,{node:a})))});return l.displayName=e.name,l}function al(t,e,n=Oa){let l=({node:o})=>e(o.props,o.props.ref,o),r=s.forwardRef((o,i)=>{let u=n(o);return Na(t,o,i,null,u,a=>g.createElement(l,{node:a}))??g.createElement(g.Fragment,null)});return r.displayName=e.name,r}function Oa(t){return Lr({...t,addIdAndValue:!0})}const pi=s.createContext(null);function xn(t){let e=s.useContext(pi),n=((e==null?void 0:e.dependencies)||[]).concat(t.dependencies),l=t.idScope??(e==null?void 0:e.idScope),r=Oa({...t,idScope:l,dependencies:n});return s.useContext(pn)&&(r=g.createElement(q4,null,r)),e=s.useMemo(()=>({dependencies:n,idScope:l}),[l,...n]),g.createElement(pi.Provider,{value:e},r)}function q4({children:t}){let e=s.useContext(pn),n=s.useMemo(()=>g.createElement(pn.Provider,{value:null},g.createElement(za.Provider,{value:!0},t)),[t]);return ct()?g.createElement(lr.Provider,{value:e},n):gr.createPortal(n,e)}const Z4=s.createContext(null),Nr={CollectionRoot({collection:t,renderDropIndicator:e}){return bi(t,null,e)},CollectionBranch({collection:t,parent:e,renderDropIndicator:n}){return bi(t,e,n)}};function bi(t,e,n){return Lr({items:e?t.getChildren(e.key):t,dependencies:[n],children(l){if(l.type==="content")return g.createElement(g.Fragment,null);let r=l.render(l);return!n||l.type!=="item"?r:g.createElement(g.Fragment,null,n({type:"item",key:l.key,dropPosition:"before"}),r,Y4(t,l,n))}})}function Y4(t,e,n){let l=e.key,r=t.getKeyAfter(l),o=r!=null?t.getItem(r):null;for(;o!=null&&o.type!=="item";)r=t.getKeyAfter(o.key),o=r!=null?t.getItem(r):null;let i=e.nextKey!=null?t.getItem(e.nextKey):null;for(;i!=null&&i.type!=="item";)i=i.nextKey!=null?t.getItem(i.nextKey):null;let u=[];if(i==null){let a=e;for(;(a==null?void 0:a.type)==="item"&&(!o||a.parentKey!==o.parentKey&&o.level{b.target.dispatchEvent(new PointerEvent("pointercancel",{bubbles:!0})),re(b.target).activeElement!==b.target&&Ve(b.target),r&&r({...b,type:"longpress"}),u.current=void 0},o),b.pointerType==="touch")){let p=$=>{$.preventDefault()},h=we(b.target);a(b.target,"contextmenu",p,{once:!0}),a(h,"pointerup",()=>{setTimeout(()=>{c(b.target,"contextmenu",p)},30)},{once:!0})}},onPressEnd(b){u.current&&clearTimeout(u.current),l&&(b.pointerType==="mouse"||b.pointerType==="touch")&&l({...b,type:"longpressend"})}}),d=mn(r&&!e?i:void 0);return{longPressProps:G(f,d)}}function ks(t,e,n){let{type:l}=t,{isOpen:r}=e;s.useEffect(()=>{n&&n.current&&Uu.set(n.current,e.close)});let o;l==="menu"?o=!0:l==="listbox"&&(o="listbox");let i=$e();return{triggerProps:{"aria-haspopup":o,"aria-expanded":r,"aria-controls":r?i:void 0,onPress:e.toggle},overlayProps:{id:i}}}function rm(t){return t&&t.__esModule?t.default:t}function om(t,e,n){let{type:l="menu",isDisabled:r,trigger:o="press"}=t,i=$e(),{triggerProps:u,overlayProps:a}=ks({type:l},e,n),c=p=>{if(!r&&!(o==="longPress"&&!p.altKey)&&n&&n.current)switch(p.key){case"Enter":case" ":if(o==="longPress"||p.isDefaultPrevented())return;case"ArrowDown":"continuePropagation"in p||p.stopPropagation(),p.preventDefault(),e.toggle("first");break;case"ArrowUp":"continuePropagation"in p||p.stopPropagation(),p.preventDefault(),e.toggle("last");break;default:"continuePropagation"in p&&p.continuePropagation()}},f=Ne(rm(Ss),"@react-aria/menu"),{longPressProps:d}=Ds({isDisabled:r||o!=="longPress",accessibilityDescription:f.format("longPressMessage"),onLongPressStart(){e.close()},onLongPress(){e.open("first")}}),b={preventFocusOnPress:!0,onPressStart(p){p.pointerType!=="touch"&&p.pointerType!=="keyboard"&&!r&&(Ve(p.target),e.open(p.pointerType==="virtual"?"first":null))},onPress(p){p.pointerType==="touch"&&!r&&(Ve(p.target),e.toggle())}};return delete u.onPress,{menuTriggerProps:{...u,...o==="press"?b:d,id:i,onKeyDown:c},menuProps:{...a,"aria-labelledby":i,autoFocus:e.focusStrategy||!0,onClose:e.close}}}function or(t){return Fn()?t.altKey:t.ctrlKey}function On(t,e){var r,o;let n=`[data-key="${CSS.escape(String(e))}"]`,l=(r=t.current)==null?void 0:r.dataset.collection;return l&&(n=`[data-collection="${CSS.escape(l)}"]${n}`),(o=t.current)==null?void 0:o.querySelector(n)}const Ps=new WeakMap;function im(t){let e=$e();return Ps.set(t,e),e}function um(t){return Ps.get(t)}const am=1e3;function sm(t){let{keyboardDelegate:e,selectionManager:n,onTypeSelect:l}=t,r=s.useRef({search:"",timeout:void 0}).current,o=i=>{let u=cm(i.key);if(!(!u||i.ctrlKey||i.metaKey||!te(i.currentTarget,j(i))||r.search.length===0&&u===" ")){if(u===" "&&r.search.trim().length>0&&(i.preventDefault(),"continuePropagation"in i||i.stopPropagation()),r.search+=u,e.getKeyForSearch!=null){let a=e.getKeyForSearch(r.search,n.focusedKey);a==null&&(a=e.getKeyForSearch(r.search)),a!=null&&(n.setFocusedKey(a),l&&l(a))}clearTimeout(r.timeout),r.timeout=setTimeout(()=>{r.search=""},am)}};return{typeSelectProps:{onKeyDownCapture:e.getKeyForSearch?o:void 0}}}function cm(t){return t.length===1||!/^[A-Z]/i.test(t)?t:""}function Vr(t){let{selectionManager:e,keyboardDelegate:n,ref:l,autoFocus:r=!1,shouldFocusWrap:o=!1,disallowEmptySelection:i=!1,disallowSelectAll:u=!1,escapeKeyBehavior:a="clearSelection",selectOnFocus:c=e.selectionBehavior==="replace",disallowTypeAhead:f=!1,shouldUseVirtualFocus:d,allowsTabNavigation:b=!1,scrollRef:p=l,linkBehavior:h="action"}=t,{direction:$}=Re(),y=Nt(),m=x=>{var I,w,k,D,T,O,Z,F,V,q,Q,J,ge,Be;if(x.altKey&&x.key==="Tab"&&x.preventDefault(),!l.current||!te(l.current,j(x)))return;const S=(L,Y)=>{if(L!=null){if(e.isLink(L)&&h==="selection"&&c&&!or(x)){gr.flushSync(()=>{e.setFocusedKey(L,Y)});let ue=On(l,L),Ke=e.getItemProps(L);ue&&y.open(ue,x,Ke.href,Ke.routerOptions);return}if(e.setFocusedKey(L,Y),e.isLink(L)&&h==="override")return;x.shiftKey&&e.selectionMode==="multiple"?e.extendSelection(L):c&&!or(x)&&e.replaceSelection(L)}};switch(x.key){case"ArrowDown":if(n.getKeyBelow){let L=e.focusedKey!=null?(I=n.getKeyBelow)==null?void 0:I.call(n,e.focusedKey):(w=n.getFirstKey)==null?void 0:w.call(n);L==null&&o&&(L=(k=n.getFirstKey)==null?void 0:k.call(n,e.focusedKey)),L!=null&&(x.preventDefault(),S(L))}break;case"ArrowUp":if(n.getKeyAbove){let L=e.focusedKey!=null?(D=n.getKeyAbove)==null?void 0:D.call(n,e.focusedKey):(T=n.getLastKey)==null?void 0:T.call(n);L==null&&o&&(L=(O=n.getLastKey)==null?void 0:O.call(n,e.focusedKey)),L!=null&&(x.preventDefault(),S(L))}break;case"ArrowLeft":if(n.getKeyLeftOf){let L=e.focusedKey!=null?(Z=n.getKeyLeftOf)==null?void 0:Z.call(n,e.focusedKey):(F=n.getFirstKey)==null?void 0:F.call(n);L==null&&o&&(L=$==="rtl"?(V=n.getFirstKey)==null?void 0:V.call(n,e.focusedKey):(q=n.getLastKey)==null?void 0:q.call(n,e.focusedKey)),L!=null&&(x.preventDefault(),S(L,$==="rtl"?"first":"last"))}break;case"ArrowRight":if(n.getKeyRightOf){let L=e.focusedKey!=null?(Q=n.getKeyRightOf)==null?void 0:Q.call(n,e.focusedKey):(J=n.getFirstKey)==null?void 0:J.call(n);L==null&&o&&(L=$==="rtl"?(ge=n.getLastKey)==null?void 0:ge.call(n,e.focusedKey):(Be=n.getFirstKey)==null?void 0:Be.call(n,e.focusedKey)),L!=null&&(x.preventDefault(),S(L,$==="rtl"?"last":"first"))}break;case"Home":if(n.getFirstKey){if(e.focusedKey===null&&x.shiftKey)return;x.preventDefault();let L=n.getFirstKey(e.focusedKey,kt(x));e.setFocusedKey(L),L!=null&&(kt(x)&&x.shiftKey&&e.selectionMode==="multiple"?e.extendSelection(L):c&&e.replaceSelection(L))}break;case"End":if(n.getLastKey){if(e.focusedKey===null&&x.shiftKey)return;x.preventDefault();let L=n.getLastKey(e.focusedKey,kt(x));e.setFocusedKey(L),L!=null&&(kt(x)&&x.shiftKey&&e.selectionMode==="multiple"?e.extendSelection(L):c&&e.replaceSelection(L))}break;case"PageDown":if(n.getKeyPageBelow&&e.focusedKey!=null){let L=n.getKeyPageBelow(e.focusedKey);L!=null&&(x.preventDefault(),S(L))}break;case"PageUp":if(n.getKeyPageAbove&&e.focusedKey!=null){let L=n.getKeyPageAbove(e.focusedKey);L!=null&&(x.preventDefault(),S(L))}break;case"a":kt(x)&&e.selectionMode==="multiple"&&u!==!0&&(x.preventDefault(),e.selectAll());break;case"Escape":a==="clearSelection"&&!i&&e.selectedKeys.size!==0&&(x.stopPropagation(),x.preventDefault(),e.clearSelection());break;case"Tab":if(!b){if(x.shiftKey)l.current.focus();else{let L=Fe(l.current,{tabbable:!0}),Y,ue;do ue=L.lastChild(),ue&&(Y=ue);while(ue);let Ke=oe();Y&&(!vt(Y)||Ke&&!du(Ke))&&Ve(Y)}break}}},v=s.useRef({top:0,left:0});Yt(p,"scroll",()=>{var x,S;v.current={top:((x=p.current)==null?void 0:x.scrollTop)??0,left:((S=p.current)==null?void 0:S.scrollLeft)??0}});let E=x=>{var S,I;if(e.isFocused){te(x.currentTarget,j(x))||e.setFocused(!1);return}if(te(x.currentTarget,j(x))){if(e.setFocused(!0),e.focusedKey==null){let w=D=>{D!=null&&(e.setFocusedKey(D),c&&!e.isSelected(D)&&e.replaceSelection(D))},k=x.relatedTarget;k&&x.currentTarget.compareDocumentPosition(k)&Node.DOCUMENT_POSITION_FOLLOWING?w(e.lastSelectedKey??((S=n.getLastKey)==null?void 0:S.call(n))):w(e.firstSelectedKey??((I=n.getFirstKey)==null?void 0:I.call(n)))}else p.current&&(p.current.scrollTop=v.current.top,p.current.scrollLeft=v.current.left);if(e.focusedKey!=null&&p.current){let w=On(l,e.focusedKey);w instanceof HTMLElement&&(!vt(w)&&!d&&Ve(w),cn()==="keyboard"&&it(w,{containingElement:l.current}))}}},C=x=>{te(x.currentTarget,x.relatedTarget)||e.setFocused(!1)},R=s.useRef(!1);Yt(l,sp,d?x=>{let{detail:S}=x;x.stopPropagation(),e.setFocused(!0),(S==null?void 0:S.focusStrategy)==="first"&&(R.current=!0)}:void 0),ko(()=>{var x;if(R.current){let S=((x=n.getFirstKey)==null?void 0:x.call(n))??null;if(S==null){let I=oe();Va(l.current),Or(I,null),e.collection.size>0&&(R.current=!1)}else e.setFocusedKey(S),R.current=!1}},[e.collection]),ko(()=>{e.collection.size>0&&(R.current=!1)},[e.focusedKey]),Yt(l,ap,d?x=>{var S;x.stopPropagation(),e.setFocused(!1),(S=x.detail)!=null&&S.clearFocusKey&&e.setFocusedKey(null)}:void 0);const A=s.useRef(r),K=s.useRef(!1);s.useEffect(()=>{var x,S;if(A.current){let I=null;r==="first"&&(I=((x=n.getFirstKey)==null?void 0:x.call(n))??null),r==="last"&&(I=((S=n.getLastKey)==null?void 0:S.call(n))??null);let w=e.selectedKeys;if(w.size){for(let k of w)if(e.canSelectItem(k)){I=k;break}}e.setFocused(!0),e.setFocusedKey(I),I==null&&!d&&l.current&&ve(l.current),e.collection.size>0&&(A.current=!1,K.current=!0)}});let P=s.useRef(e.focusedKey),z=s.useRef(null);s.useEffect(()=>{if(e.isFocused&&e.focusedKey!=null&&(e.focusedKey!==P.current||K.current)&&p.current&&l.current){let x=cn(),S=On(l,e.focusedKey);if(!(S instanceof HTMLElement))return;(x==="keyboard"||K.current)&&(z.current&&cancelAnimationFrame(z.current),z.current=requestAnimationFrame(()=>{p.current&&(Ln(p.current,S),x!=="virtual"&&it(S,{containingElement:l.current}))}))}!d&&e.isFocused&&e.focusedKey==null&&P.current!=null&&l.current&&ve(l.current),P.current=e.focusedKey,K.current=!1}),s.useEffect(()=>()=>{z.current&&cancelAnimationFrame(z.current)},[]),Yt(l,"react-aria-focus-scope-restore",x=>{x.preventDefault(),e.setFocused(!0)});let B={onKeyDown:m,onFocus:E,onBlur:C,onMouseDown(x){p.current===j(x)&&x.preventDefault()}},{typeSelectProps:N}=sm({keyboardDelegate:n,selectionManager:e});f||(B=G(N,B));let U;d||(U=e.focusedKey==null?0:-1);let _=im(e.collection);return{collectionProps:G(B,{tabIndex:U,"data-collection":_})}}class ir{constructor(e){this.ref=e}getItemRect(e){let n=this.ref.current;if(!n)return null;let l=e!=null?On(this.ref,e):null;if(!l)return null;let r=n.getBoundingClientRect(),o=l.getBoundingClientRect();return{x:o.left-r.left-n.clientLeft+n.scrollLeft,y:o.top-r.top-n.clientTop+n.scrollTop,width:o.width,height:o.height}}getContentSize(){let e=this.ref.current;return{width:(e==null?void 0:e.scrollWidth)??0,height:(e==null?void 0:e.scrollHeight)??0}}getVisibleRect(){let e=this.ref.current;return{x:(e==null?void 0:e.scrollLeft)??0,y:(e==null?void 0:e.scrollTop)??0,width:(e==null?void 0:e.clientWidth)??0,height:(e==null?void 0:e.clientHeight)??0}}}class sl{constructor(...e){if(e.length===1){let n=e[0];this.collection=n.collection,this.ref=n.ref,this.collator=n.collator,this.disabledKeys=n.disabledKeys||new Set,this.disabledBehavior=n.disabledBehavior||"all",this.orientation=n.orientation||"vertical",this.direction=n.direction,this.layout=n.layout||"stack",this.layoutDelegate=n.layoutDelegate||new ir(n.ref)}else this.collection=e[0],this.disabledKeys=e[1],this.ref=e[2],this.collator=e[3],this.layout="stack",this.orientation="vertical",this.disabledBehavior="all",this.layoutDelegate=new ir(this.ref);this.layout==="stack"&&this.orientation==="vertical"&&(this.getKeyLeftOf=void 0,this.getKeyRightOf=void 0)}isDisabled(e){var n,l;return this.disabledBehavior==="all"&&(((n=e.props)==null?void 0:n.isDisabled)||this.disabledKeys.has(e.key))&&((l=e.props)==null?void 0:l.disabledBehavior)!=="selection"}findNextNonDisabled(e,n,l=!1){let r=e;for(;r!=null;){let o=this.collection.getItem(r);if((o==null?void 0:o.type)==="item"&&(l||!this.isDisabled(o)))return r;r=n(r)}return null}getNextKey(e,n){let l=e;return l=this.collection.getKeyAfter(l),this.findNextNonDisabled(l,r=>this.collection.getKeyAfter(r),n==null?void 0:n.includeDisabled)}getPreviousKey(e,n){let l=e;return l=this.collection.getKeyBefore(l),this.findNextNonDisabled(l,r=>this.collection.getKeyBefore(r),n==null?void 0:n.includeDisabled)}findKey(e,n,l){let r=e,o=this.layoutDelegate.getItemRect(r);if(!o||r==null)return null;let i=o;do{if(r=n(r),r==null)break;o=this.layoutDelegate.getItemRect(r)}while(o&&l(i,o)&&r!=null);return r}isSameRow(e,n){return e.y===n.y||e.x!==n.x}isSameColumn(e,n){return e.x===n.x||e.y!==n.y}getKeyBelow(e,n){return this.layout==="grid"&&this.orientation==="vertical"?this.findKey(e,l=>this.getNextKey(l,n),this.isSameRow):this.getNextKey(e,n)}getKeyAbove(e,n){return this.layout==="grid"&&this.orientation==="vertical"?this.findKey(e,l=>this.getPreviousKey(l,n),this.isSameRow):this.getPreviousKey(e,n)}getNextColumn(e,n,l){return n?this.getPreviousKey(e,l):this.getNextKey(e,l)}getKeyRightOf(e,n){let l=this.direction==="ltr"?"getKeyRightOf":"getKeyLeftOf";return this.layoutDelegate[l]?(e=this.layoutDelegate[l](e),this.findNextNonDisabled(e,r=>this.layoutDelegate[l](r),n==null?void 0:n.includeDisabled)):this.layout==="grid"?this.orientation==="vertical"?this.getNextColumn(e,this.direction==="rtl",n):this.findKey(e,r=>this.getNextColumn(r,this.direction==="rtl",n),this.isSameColumn):this.orientation==="horizontal"?this.getNextColumn(e,this.direction==="rtl",n):null}getKeyLeftOf(e,n){let l=this.direction==="ltr"?"getKeyLeftOf":"getKeyRightOf";return this.layoutDelegate[l]?(e=this.layoutDelegate[l](e),this.findNextNonDisabled(e,r=>this.layoutDelegate[l](r),n==null?void 0:n.includeDisabled)):this.layout==="grid"?this.orientation==="vertical"?this.getNextColumn(e,this.direction==="ltr",n):this.findKey(e,r=>this.getNextColumn(r,this.direction==="ltr",n),this.isSameColumn):this.orientation==="horizontal"?this.getNextColumn(e,this.direction==="ltr",n):null}getFirstKey(){let e=this.collection.getFirstKey();return this.findNextNonDisabled(e,n=>this.collection.getKeyAfter(n))}getLastKey(){let e=this.collection.getLastKey();return this.findNextNonDisabled(e,n=>this.collection.getKeyBefore(n))}getKeyPageAbove(e){let n=this.ref.current,l=this.layoutDelegate.getItemRect(e);if(!l)return null;if(n&&!st(n))return this.getFirstKey();let r=e;if(this.orientation==="horizontal"){let o=Math.max(0,l.x+l.width-this.layoutDelegate.getVisibleRect().width);for(;l&&l.x>o&&r!=null;)r=this.getKeyAbove(r),l=r==null?null:this.layoutDelegate.getItemRect(r)}else{let o=Math.max(0,l.y+l.height-this.layoutDelegate.getVisibleRect().height);for(;l&&l.y>o&&r!=null;)r=this.getKeyAbove(r),l=r==null?null:this.layoutDelegate.getItemRect(r)}return r??this.getFirstKey()}getKeyPageBelow(e){let n=this.ref.current,l=this.layoutDelegate.getItemRect(e);if(!l)return null;if(n&&!st(n))return this.getLastKey();let r=e;if(this.orientation==="horizontal"){let o=Math.min(this.layoutDelegate.getContentSize().width,l.x-l.width+this.layoutDelegate.getVisibleRect().width);for(;l&&l.xr[0]o||new sl({collection:n,disabledKeys:l,disabledBehavior:c,ref:r,collator:a,layoutDelegate:i,orientation:u}),[o,i,n,l,r,a,c,u]),{collectionProps:d}=Vr({...t,ref:r,selectionManager:e,keyboardDelegate:f});return{listProps:d}}function jr(t){let{id:e,selectionManager:n,key:l,ref:r,shouldSelectOnPressUp:o,shouldUseVirtualFocus:i,focus:u,isDisabled:a,onAction:c,allowsDifferentPressOrigin:f,linkBehavior:d="action"}=t,b=Nt();e=$e(e);let p=T=>{if(T.pointerType==="keyboard"&&or(T))n.toggleSelection(l);else{if(n.selectionMode==="none")return;if(n.isLink(l)){if(d==="selection"&&r.current){let O=n.getItemProps(l);b.open(r.current,T,O.href,O.routerOptions),n.setSelectedKeys(n.selectedKeys);return}else if(d==="override"||d==="none")return}n.selectionMode==="single"?n.isSelected(l)&&!n.disallowEmptySelection?n.toggleSelection(l):n.replaceSelection(l):T&&T.shiftKey?n.extendSelection(l):n.selectionBehavior==="toggle"||T&&(kt(T)||T.pointerType==="touch"||T.pointerType==="virtual")?n.toggleSelection(l):n.replaceSelection(l)}};s.useEffect(()=>{l===n.focusedKey&&n.isFocused&&(i?Va(r.current):u?u():oe()!==r.current&&r.current&&ve(r.current))},[r,l,n.focusedKey,n.childFocusStrategy,n.isFocused,i]),a=a||n.isDisabled(l);let h={};!i&&!a?h={tabIndex:l===n.focusedKey?0:-1,onFocus(T){j(T)===r.current&&n.setFocusedKey(l)}}:a&&(h.onMouseDown=T=>{T.preventDefault()}),s.useEffect(()=>{a&&n.focusedKey===l&&n.setFocusedKey(null)},[n,a,l]);let $=n.isLink(l)&&d==="override",y=c&&t.UNSTABLE_itemBehavior==="action",m=n.isLink(l)&&d!=="selection"&&d!=="none",v=!a&&n.canSelectItem(l)&&!$&&!y,E=(c||m)&&!a,C=E&&(n.selectionBehavior==="replace"?!v:!v||n.isEmpty),R=E&&v&&n.selectionBehavior==="replace",A=C||R,K=s.useRef(null),P=A&&v,z=s.useRef(!1),B=s.useRef(!1),N=n.getItemProps(l),U=T=>{var O;c&&(c(),(O=r.current)==null||O.dispatchEvent(new CustomEvent("react-aria-item-action",{bubbles:!0}))),m&&r.current&&b.open(r.current,T,N.href,N.routerOptions)},_={ref:r};if(o?(_.onPressStart=T=>{K.current=T.pointerType,z.current=P,T.pointerType==="keyboard"&&(!A||gi(T.key))&&p(T)},f?(_.onPressUp=C?void 0:T=>{T.pointerType==="mouse"&&v&&p(T)},_.onPress=C?U:T=>{T.pointerType!=="keyboard"&&T.pointerType!=="mouse"&&v&&p(T)}):_.onPress=T=>{if(C||R&&T.pointerType!=="mouse"){if(T.pointerType==="keyboard"&&!mi(T.key))return;U(T)}else T.pointerType!=="keyboard"&&v&&p(T)}):(_.onPressStart=T=>{K.current=T.pointerType,z.current=P,B.current=C,v&&(T.pointerType==="mouse"&&!C||T.pointerType==="keyboard"&&(!E||gi(T.key)))&&p(T)},_.onPress=T=>{(T.pointerType==="touch"||T.pointerType==="pen"||T.pointerType==="virtual"||T.pointerType==="keyboard"&&A&&mi(T.key)||T.pointerType==="mouse"&&B.current)&&(A?U(T):v&&p(T))}),h["data-collection"]=um(n.collection),h["data-key"]=l,_.preventFocusOnPress=i,i&&(_=G(_,{onPressStart(T){T.pointerType!=="touch"&&(n.setFocused(!0),n.setFocusedKey(l))},onPress(T){T.pointerType==="touch"&&(n.setFocused(!0),n.setFocusedKey(l))}})),N)for(let T of["onPressStart","onPressEnd","onPressChange","onPress","onPressUp","onClick"])N[T]&&(_[T]=dt(_[T],N[T]));let{pressProps:x,isPressed:S}=lt(_),I=R?T=>{K.current==="mouse"&&(T.stopPropagation(),T.preventDefault(),U(T))}:void 0,{longPressProps:w}=Ds({isDisabled:!P,onLongPress(T){T.pointerType==="touch"&&(p(T),n.setSelectionBehavior("toggle"))}}),k=T=>{K.current==="touch"&&z.current&&T.preventDefault()},D=d!=="none"&&n.isLink(l)?T=>{tt.isOpening||T.preventDefault()}:void 0;return{itemProps:G(h,v||C||i&&!a?x:{},P?w:{},{onDoubleClick:I,onDragStartCapture:k,onClick:D,id:e},i?{onMouseDown:T=>T.preventDefault()}:void 0),isPressed:S,isSelected:n.isSelected(l),isFocused:n.isFocused&&n.focusedKey===l,isDisabled:a,allowsSelection:v,hasAction:A}}function mi(t){return t==="Enter"}function gi(t){return t===" "}function Ce(t,e){return typeof e.getChildren=="function"?e.getChildren(t.key):t.childNodes}function Pt(t){return en(t,0)}function en(t,e){if(e<0)return;let n=0;for(let l of t){if(n===e)return l;n++}}function In(t){let e;for(let n of t)e=n;return e}const yi=new WeakMap;function As(t){let e=yi.get(t);if(e!=null)return e;let n=0,l=r=>{for(let o of r)o.type==="section"?l(Ce(o,t)):o.type==="item"&&n++};return l(t),yi.set(t,n),n}function fm(t){let e=il(t),[n,l]=s.useState(null),[r,o]=s.useState([]),i=()=>{o([]),e.close()};return{focusStrategy:n,...e,open(c=null){l(c),e.open()},toggle(c=null){l(c),e.toggle()},close(){i()},expandedKeysStack:r,openSubmenu:(c,f)=>{o(d=>f>d.length?d:[...d.slice(0,f),c])},closeSubmenu:(c,f)=>{o(d=>d[f]===c?d.slice(0,f):d)}}}function Zn(t,e){return typeof e.getChildren=="function"?e.getChildren(t.key):t.childNodes}function _r(t){return pm(t)}function pm(t,e){for(let n of t)return n}function Ts(t){let e;for(let n of t)e=n;return e}function Bl(t,e,n){if(e.parentKey===n.parentKey)return e.index-n.index;let l=[...$i(t,e),e],r=[...$i(t,n),n],o=l.slice(0,r.length).findIndex((i,u)=>i!==r[u]);return o!==-1?(e=l[o],n=r[o],e.index-n.index):l.findIndex(i=>i===n)>=0?1:(r.findIndex(i=>i===e)>=0,-1)}function $i(t,e){let n=[],l=e;for(;(l==null?void 0:l.parentKey)!=null;)l=t.getItem(l.parentKey),l&&n.unshift(l);return n}class Oe extends Set{constructor(e,n,l){super(e),e instanceof Oe?(this.anchorKey=n??e.anchorKey,this.currentKey=l??e.currentKey):(this.anchorKey=n??null,this.currentKey=l??null)}}class cl{constructor(e,n,l){this.collection=e,this.state=n,this.allowsCellSelection=(l==null?void 0:l.allowsCellSelection)??!1,this._isSelectAll=null,this.layoutDelegate=(l==null?void 0:l.layoutDelegate)||null,this.fullCollection=(l==null?void 0:l.fullCollection)||null}get selectionMode(){return this.state.selectionMode}get disallowEmptySelection(){return this.state.disallowEmptySelection}get selectionBehavior(){return this.state.selectionBehavior}setSelectionBehavior(e){this.state.setSelectionBehavior(e)}get isFocused(){return this.state.isFocused}setFocused(e){this.state.setFocused(e)}get focusedKey(){return this.state.focusedKey}get childFocusStrategy(){return this.state.childFocusStrategy}setFocusedKey(e,n){(e==null||this.collection.getItem(e))&&this.state.setFocusedKey(e,n)}get selectedKeys(){return this.state.selectedKeys==="all"?new Set(this.getSelectAllKeys()):this.state.selectedKeys}get rawSelection(){return this.state.selectedKeys}isSelected(e){if(this.state.selectionMode==="none")return!1;let n=this.getKey(e);return n==null?!1:this.state.selectedKeys==="all"?this.canSelectItem(n):this.state.selectedKeys.has(n)}get isEmpty(){return this.state.selectedKeys!=="all"&&this.state.selectedKeys.size===0}get isSelectAll(){if(this.isEmpty)return!1;if(this.state.selectedKeys==="all")return!0;if(this._isSelectAll!=null)return this._isSelectAll;let e=this.getSelectAllKeys(),n=this.state.selectedKeys;return this._isSelectAll=e.every(l=>n.has(l)),this._isSelectAll}get firstSelectedKey(){let e=null;for(let n of this.state.selectedKeys){let l=this.collection.getItem(n);(!e||l&&Bl(this.collection,l,e)<0)&&(e=l)}return(e==null?void 0:e.key)??null}get lastSelectedKey(){let e=null;for(let n of this.state.selectedKeys){let l=this.collection.getItem(n);(!e||l&&Bl(this.collection,l,e)>0)&&(e=l)}return(e==null?void 0:e.key)??null}get disabledKeys(){return this.state.disabledKeys}get disabledBehavior(){return this.state.disabledBehavior}extendSelection(e){if(this.selectionMode==="none")return;if(this.selectionMode==="single"){this.replaceSelection(e);return}let n=this.getKey(e);if(n==null)return;let l;if(this.state.selectedKeys==="all")l=new Oe([n],n,n);else{let r=this.state.selectedKeys,o=r.anchorKey??n;l=new Oe(r,o,n);for(let i of this.getKeyRange(o,r.currentKey??n))l.delete(i);for(let i of this.getKeyRange(n,o))this.canSelectItem(i)&&l.add(i)}this.state.setSelectedKeys(l)}getKeyRange(e,n){let l=this.collection.getItem(e),r=this.collection.getItem(n);return l&&r?Bl(this.collection,l,r)<=0?this.getKeyRangeInternal(e,n):this.getKeyRangeInternal(n,e):[]}getKeyRangeInternal(e,n){var o;if((o=this.layoutDelegate)!=null&&o.getKeyRange)return this.layoutDelegate.getKeyRange(e,n);let l=[],r=e;for(;r!=null;){let i=this.collection.getItem(r);if(i&&(i.type==="item"||i.type==="cell"&&this.allowsCellSelection)&&l.push(r),r===n)return l;r=this.collection.getKeyAfter(r)}return[]}getKey(e){let n=this.collection.getItem(e);if(!n||n.type==="cell"&&this.allowsCellSelection)return e;for(;n&&n.type!=="item"&&n.parentKey!=null;)n=this.collection.getItem(n.parentKey);return!n||n.type!=="item"?null:n.key}toggleSelection(e){if(this.selectionMode==="none")return;if(this.selectionMode==="single"&&!this.isSelected(e)){this.replaceSelection(e);return}let n=this.getKey(e);if(n==null)return;let l=new Oe(this.state.selectedKeys==="all"?this.getSelectAllKeys():this.state.selectedKeys);l.has(n)?l.delete(n):this.canSelectItem(n)&&(l.add(n),l.anchorKey=n,l.currentKey=n),!(this.disallowEmptySelection&&l.size===0)&&this.state.setSelectedKeys(l)}replaceSelection(e){if(this.selectionMode==="none")return;let n=this.getKey(e);if(n==null)return;let l=this.canSelectItem(n)?new Oe([n],n,n):new Oe;this.state.setSelectedKeys(l)}setSelectedKeys(e){if(this.selectionMode==="none")return;let n=new Oe;for(let l of e){let r=this.getKey(l);if(r!=null&&(n.add(r),this.selectionMode==="single"))break}this.state.setSelectedKeys(n)}getSelectAllKeys(){let e=this.fullCollection??this.collection,n=[],l=r=>{var o;for(;r!=null;){if(this.canSelectItemIn(r,e)){let i=e.getItem(r);(i==null?void 0:i.type)==="item"&&n.push(r),i!=null&&i.hasChildNodes&&(this.allowsCellSelection||i.type!=="item")&&l(((o=_r(Zn(i,e)))==null?void 0:o.key)??null)}r=e.getKeyAfter(r)}};return l(e.getFirstKey()),n}selectAll(){!this.isSelectAll&&this.selectionMode==="multiple"&&this.state.setSelectedKeys("all")}clearSelection(){!this.disallowEmptySelection&&(this.state.selectedKeys==="all"||this.state.selectedKeys.size>0)&&this.state.setSelectedKeys(new Oe)}toggleSelectAll(){this.isSelectAll?this.clearSelection():this.selectAll()}select(e,n){this.selectionMode!=="none"&&(this.selectionMode==="single"?this.isSelected(e)&&!this.disallowEmptySelection?this.toggleSelection(e):this.replaceSelection(e):this.selectionBehavior==="toggle"||n&&(n.pointerType==="touch"||n.pointerType==="virtual")?this.toggleSelection(e):this.replaceSelection(e))}isSelectionEqual(e){if(e===this.state.selectedKeys)return!0;let n=this.selectedKeys;if(e.size!==n.size)return!1;for(let l of e)if(!n.has(l))return!1;for(let l of n)if(!e.has(l))return!1;return!0}canSelectItem(e){return this.canSelectItemIn(e,this.collection)}canSelectItemIn(e,n){var r;if(this.state.selectionMode==="none"||this.state.disabledKeys.has(e))return!1;let l=n.getItem(e);return!(!l||(r=l==null?void 0:l.props)!=null&&r.isDisabled||l.type==="cell"&&!this.allowsCellSelection)}isDisabled(e){var l,r;let n=this.collection.getItem(e);return this.state.disabledBehavior==="all"&&(this.state.disabledKeys.has(e)||!!((l=n==null?void 0:n.props)!=null&&l.isDisabled))&&((r=n==null?void 0:n.props)==null?void 0:r.disabledBehavior)!=="selection"}isLink(e){var n,l;return!!((l=(n=this.collection.getItem(e))==null?void 0:n.props)!=null&&l.href)}getItemProps(e){var n;return(n=this.collection.getItem(e))==null?void 0:n.props}withCollection(e){return new cl(e,this.state,{allowsCellSelection:this.allowsCellSelection,layoutDelegate:this.layoutDelegate||void 0,fullCollection:this.fullCollection??this.collection})}}class bm{build(e,n){return this.context=n,vi(()=>this.iterateCollection(e))}*iterateCollection(e){let{children:n,items:l}=e;if(g.isValidElement(n)&&n.type===g.Fragment)yield*this.iterateCollection({children:n.props.children,items:l});else if(typeof n=="function"){if(!l)throw new Error("props.children was a function but props.items is missing");let r=0;for(let o of l)yield*this.getFullNode({value:o,index:r},{renderer:n}),r++}else{let r=[];g.Children.forEach(n,i=>{i&&r.push(i)});let o=0;for(let i of r){let u=this.getFullNode({element:i,index:o},{});for(let a of u)o++,yield a}}}getKey(e,n,l,r){if(e.key!=null)return e.key;if(n.type==="cell"&&n.key!=null)return`${r}${n.key}`;let o=n.value;if(o!=null){let i=o.key??o.id;if(i==null)throw new Error("No key found for item");return i}return r?`${r}.${n.index}`:`$.${n.index}`}getChildState(e,n){return{renderer:n.renderer||e.renderer}}*getFullNode(e,n,l,r){if(g.isValidElement(e.element)&&e.element.type===g.Fragment){let a=[];g.Children.forEach(e.element.props.children,f=>{a.push(f)});let c=e.index??0;for(const f of a)yield*this.getFullNode({element:f,index:c++},n,l,r);return}let o=e.element;if(!o&&e.value&&n&&n.renderer){let a=this.cache.get(e.value);if(a&&(!a.shouldInvalidate||!a.shouldInvalidate(this.context))){a.index=e.index,a.parentKey=r?r.key:null,yield a;return}o=n.renderer(e.value)}if(g.isValidElement(o)){let a=o.type;if(typeof a!="function"&&typeof a.getCollectionNode!="function"){let b=o.type;throw new Error(`Unknown element <${b}> in collection.`)}let c=a.getCollectionNode(o.props,this.context),f=e.index??0,d=c.next();for(;!d.done&&d.value;){let b=d.value;e.index=f;let p=b.key??null;p==null&&(p=b.element?null:this.getKey(o,e,n,l));let $=[...this.getFullNode({...b,key:p,index:f,wrapper:hm(e.wrapper,b.wrapper)},this.getChildState(n,b),l?`${l}${o.key}`:o.key,r)];for(let y of $){if(y.value=b.value??e.value??null,y.value&&this.cache.set(y.value,y),e.type&&y.type!==e.type)throw new Error(`Unsupported type <${Kl(y.type)}> in <${Kl((r==null?void 0:r.type)??"unknown parent type")}>. Only <${Kl(e.type)}> is supported.`);f++,yield y}d=c.next($)}return}if(e.key==null||e.type==null)return;let i=this,u={type:e.type,props:e.props,key:e.key,parentKey:r?r.key:null,value:e.value??null,level:((r==null?void 0:r.level)??0)+((r==null?void 0:r.type)==="item"?1:0),index:e.index,rendered:e.rendered,textValue:e.textValue??"","aria-label":e["aria-label"],wrapper:e.wrapper,shouldInvalidate:e.shouldInvalidate,hasChildNodes:e.hasChildNodes||!1,childNodes:vi(function*(){if(!e.hasChildNodes||!e.childNodes)return;let a=0;for(let c of e.childNodes()){c.key!=null&&(c.key=`${u.key}${c.key}`);let f=i.getFullNode({...c,index:a},i.getChildState(n,c),u.key,u);for(let d of f)a++,yield d}})};yield u}constructor(){this.cache=new WeakMap}}function vi(t){let e=[],n=null;return{*[Symbol.iterator](){for(let l of e)yield l;n||(n=t());for(let l of n)e.push(l),yield l}}}function hm(t,e){if(t&&e)return n=>t(e(n));if(t)return t;if(e)return e}function Kl(t){return t[0].toUpperCase()+t.slice(1)}function Bs(t,e,n){let l=s.useMemo(()=>new bm,[]),{children:r,items:o,collection:i}=t;return s.useMemo(()=>{if(i)return i;let a=l.build({children:r,items:o},n);return e(a)},[l,r,o,i,n,e])}function mm(t,e){if(t.size!==e.size)return!1;for(let n of t)if(!e.has(n))return!1;return!0}function Hr(t){let{selectionMode:e="none",disallowEmptySelection:n=!1,allowDuplicateSelectionEvents:l,selectionBehavior:r="toggle",disabledBehavior:o="all"}=t,i=s.useRef(!1),[,u]=s.useState(!1),a=s.useRef(null),c=s.useRef(null),[,f]=s.useState(null),d=s.useMemo(()=>xi(t.selectedKeys),[t.selectedKeys]),b=s.useMemo(()=>xi(t.defaultSelectedKeys,new Oe),[t.defaultSelectedKeys]),[p,h]=Ct(d,b,t.onSelectionChange),$=s.useMemo(()=>t.disabledKeys?new Set(t.disabledKeys):new Set,[t.disabledKeys]),[y,m]=s.useState(r);r==="replace"&&y==="toggle"&&typeof p=="object"&&p.size===0&&m("replace");let v=s.useRef(r);return s.useEffect(()=>{r!==v.current&&(m(r),v.current=r)},[r]),{selectionMode:e,disallowEmptySelection:n,selectionBehavior:y,setSelectionBehavior:m,get isFocused(){return i.current},setFocused(E){i.current=E,u(E)},get focusedKey(){return a.current},get childFocusStrategy(){return c.current},setFocusedKey(E,C="first"){a.current=E,c.current=C,f(E)},selectedKeys:p,setSelectedKeys(E){(l||!mm(E,p))&&h(E)},disabledKeys:$,disabledBehavior:o}}function xi(t,e){return t?t==="all"?"all":new Oe(t):e}const gm=s.createContext(null),ao=class ao extends Ge{filter(e,n,l){let r=e.getItem(this.firstChildKey);if(r&&l(r.textValue,this)){let o=this.clone();return n.addDescendants(o,e),o}return null}};ao.type="submenutrigger";let Ci=ao;function ym(t,e){let{role:n="dialog"}=t,l=on();l=t["aria-label"]?void 0:l;let r=s.useRef(!1);return s.useEffect(()=>{if(e.current&&!vt(e.current)){ve(e.current);let o=setTimeout(()=>{(oe()===e.current||oe()===document.body)&&(r.current=!0,e.current&&(e.current.blur(),ve(e.current)),r.current=!1)},500);return()=>{clearTimeout(o)}}},[e]),Ma(),s.useRef(!1),s.useEffect(()=>{}),{dialogProps:{...ie(t,{labelable:!0}),role:n,tabIndex:-1,"aria-labelledby":t["aria-labelledby"]||l,onBlur:o=>{r.current&&o.stopPropagation()}},titleProps:{id:l}}}const Ks=s.createContext(null),Et=s.createContext(null);function $m(t){let e=fm(t),n=s.useRef(null),{triggerProps:l,overlayProps:r}=ks({type:"dialog"},e,n);return l.id=$e(),r["aria-labelledby"]=l.id,g.createElement(_e,{values:[[Et,e],[gm,e],[Ks,r],[Fr,{trigger:"DialogTrigger",triggerRef:n,"aria-labelledby":r["aria-labelledby"]}]]},g.createElement(K4,{...l,ref:n,isPressed:e.isOpen},t.children))}const vm=s.forwardRef(function(e,n){let l=e["aria-labelledby"];[e,n]=xe(e,n,Ks);let{dialogProps:r,titleProps:o}=ym({...e,"aria-labelledby":l},n),i=s.useContext(Et);!r["aria-label"]&&!r["aria-labelledby"]&&e["aria-labelledby"]&&(r["aria-labelledby"]=e["aria-labelledby"]);let u=ce({defaultClassName:"react-aria-Dialog",className:e.className,style:e.style,children:e.children,values:{close:(i==null?void 0:i.close)||(()=>{})}}),a=ie(e,{global:!0});return g.createElement(le.section,{...G(a,u,r),render:e.render,ref:n,slot:e.slot||void 0},g.createElement(_e,{values:[[ju,{slots:{[mt]:{},title:{...o,level:2}}}],[yn,{slots:{[mt]:{},close:{onPress:()=>i==null?void 0:i.close()}}}]]},u.children))});function xm(t,e,n){let{overlayProps:l,underlayProps:r}=Zu({...t,isOpen:e.isOpen,onClose:e.close},n);return Yu({isDisabled:!e.isOpen}),Ma(),s.useEffect(()=>{if(e.isOpen&&n.current)return Rr([n.current],{shouldUseInert:!0})},[e.isOpen,n]),{modalProps:G(l),underlayProps:r}}const Cm=s.createContext(null),Wr=s.createContext(null),Em=s.forwardRef(function(e,n){if(s.useContext(Wr))return g.createElement(Ei,{...e,modalRef:n},e.children);let{isDismissable:r,isKeyboardDismissDisabled:o,isOpen:i,defaultOpen:u,onOpenChange:a,children:c,isEntering:f,isExiting:d,UNSTABLE_portalContainer:b,shouldCloseOnInteractOutside:p,...h}=e;return g.createElement(Rs,{isDismissable:r,isKeyboardDismissDisabled:o,isOpen:i,defaultOpen:u,onOpenChange:a,isEntering:f,isExiting:d,UNSTABLE_portalContainer:b,shouldCloseOnInteractOutside:p},g.createElement(Ei,{...h,modalRef:n},c))});function wm(t,e){[t,e]=xe(t,e,Cm);let n=s.useContext(Et),l=il(t),r=t.isOpen!=null||t.defaultOpen!=null||!n?l:n,o=ke(e),i=s.useRef(null),u=Ll(o,r.isOpen),a=Ll(i,r.isOpen),c=u||a||t.isExiting||!1,f=ct();return!r.isOpen&&!c||f?null:g.createElement(Sm,{...t,state:r,isExiting:c,overlayRef:o,modalRef:i})}const Rs=s.forwardRef(wm);function Sm({UNSTABLE_portalContainer:t,...e}){let n=e.modalRef,{state:l}=e,{modalProps:r,underlayProps:o}=xm(e,l,n),i=Cr(e.overlayRef)||e.isEntering||!1,u=ce({...e,defaultClassName:"react-aria-ModalOverlay",values:{isEntering:i,isExiting:e.isExiting,state:l}}),a=Up(),c,f;if(typeof document<"u"){let b=st(document.body)?document.body:document.scrollingElement||document.documentElement,p=b.getBoundingClientRect().width%1,h=b.getBoundingClientRect().height%1;c=b.scrollWidth-p,f=b.scrollHeight-h}let d={...u.style,"--visual-viewport-width":a.width+"px","--visual-viewport-height":a.height+"px","--page-width":c!==void 0?c+"px":void 0,"--page-height":f!==void 0?f+"px":void 0};return g.createElement(er,{isExiting:e.isExiting,portalContainer:t},g.createElement(le.div,{...G(ie(e,{global:!0}),o),...u,style:d,ref:e.overlayRef,"data-entering":i||void 0,"data-exiting":e.isExiting||void 0},g.createElement(_e,{values:[[Wr,{modalProps:r,modalRef:n,isExiting:e.isExiting,isDismissable:e.isDismissable}],[Et,l]]},u.children)))}function Ei(t){let{modalProps:e,modalRef:n,isExiting:l,isDismissable:r}=s.useContext(Wr),o=s.useContext(Et),i=s.useMemo(()=>ft(t.modalRef,n),[t.modalRef,n]),u=ke(i),a=Cr(u),c=ce({...t,defaultClassName:"react-aria-Modal",values:{isEntering:a,isExiting:l,state:o}});return g.createElement(le.div,{...G(ie(t,{global:!0}),e),...c,ref:u,"data-entering":a||void 0,"data-exiting":l||void 0},r&&g.createElement(Ql,{onDismiss:o.close}),c.children)}const Dm=g.forwardRef(({children:t,...e},n)=>{n=ke(n);let{pressProps:l}=lt({...e,ref:n}),{focusableProps:r}=jt(e,n),o=g.Children.only(t);s.useEffect(()=>{},[n,e.isDisabled]);let i=parseInt(g.version,10)<19?o.ref:o.props.ref;return g.cloneElement(o,{...G(l,r,o.props),ref:ft(i,n)})}),wi=({children:t,className:e,slot:n,style:l,variant:r,...o})=>{const i=s.useMemo(()=>nh({variant:r}),[r]);return M.jsx(Kr,{"aria-label":"Close",className:me(e,i),"data-slot":"close-button",slot:n,style:l,...o,children:u=>typeof t=="function"?t(u):t??M.jsx(qh,{"data-slot":"close-button-icon"})})},km=Object.assign(wi,{Root:wi}),ze=s.createContext({}),Si=({children:t,...e})=>{const n=s.useMemo(()=>({slots:Qn(),placement:void 0}),[]);return M.jsx(ze,{value:n,children:M.jsx($m,{"data-slot":"alert-dialog-root",...e,children:t})})},Pm=({children:t,className:e,...n})=>{const{slots:l}=s.useContext(ze);return M.jsx(Dm,{children:M.jsx("div",{className:de(l==null?void 0:l.trigger,e),"data-slot":"alert-dialog-trigger",role:"button",...n,children:t})})},Am=({children:t,className:e,isDismissable:n=!1,isKeyboardDismissDisabled:l=!0,onClick:r,variant:o,...i})=>{const{slots:u}=s.useContext(ze),a=s.useMemo(()=>Qn({variant:o}),[o]),c=s.useMemo(()=>({slots:{...u,...a}}),[u,a]);return M.jsx(Rs,{className:me(e,a==null?void 0:a.backdrop()),"data-slot":"alert-dialog-backdrop",isDismissable:n,isKeyboardDismissDisabled:l,onClick:f=>{f.stopPropagation(),r==null||r(f)},...i,children:f=>M.jsxs(ze,{value:c,children:[typeof t=="function"?t(f):t," "]})})},Tm=({children:t,className:e,placement:n="auto",size:l,...r})=>{const{slots:o}=s.useContext(ze),i=s.useMemo(()=>Qn({size:l}),[l]),u=s.useMemo(()=>({placement:n,slots:{...o,...i}}),[n,o,i]);return M.jsx(Em,{className:me(e,i==null?void 0:i.container()),"data-placement":n,"data-slot":"alert-dialog-container",...r,children:a=>M.jsx(ze,{value:u,children:typeof t=="function"?t(a):t})})},Bm=({children:t,className:e,...n})=>{const{placement:l,slots:r}=s.useContext(ze);return M.jsx(vm,{className:de(r==null?void 0:r.dialog,e),"data-placement":l,"data-slot":"alert-dialog-dialog",role:"alertdialog",...n,children:t})},Km=({children:t,className:e,...n})=>{const{slots:l}=s.useContext(ze);return M.jsx("div",{className:de(l==null?void 0:l.header,e),"data-slot":"alert-dialog-header",...n,children:t})},Rm=({children:t,className:e,...n})=>{const{slots:l}=s.useContext(ze);return M.jsx(Hh,{className:de(l==null?void 0:l.heading,e),"data-slot":"alert-dialog-heading",slot:"title",...n,children:t})},Mm=({children:t,className:e,...n})=>{const{slots:l}=s.useContext(ze);return M.jsx("div",{className:de(l==null?void 0:l.body,e),"data-slot":"alert-dialog-body",...n,children:t})},Im=({children:t,className:e,...n})=>{const{slots:l}=s.useContext(ze);return M.jsx("div",{className:de(l==null?void 0:l.footer,e),"data-slot":"alert-dialog-footer",...n,children:t})},Fm=({children:t,className:e,status:n="danger",...l})=>{const r=s.useMemo(()=>Qn({status:n}),[n]),o=()=>{switch(n){case"default":return M.jsx(Ho,{"data-slot":"alert-dialog-default-icon"});case"accent":return M.jsx(Ho,{"data-slot":"alert-dialog-default-icon"});case"success":return M.jsx(Yh,{"data-slot":"alert-dialog-default-icon"});case"warning":return M.jsx(Zh,{"data-slot":"alert-dialog-default-icon"});case"danger":return M.jsx(Wo,{"data-slot":"alert-dialog-default-icon"});default:return M.jsx(Wo,{"data-slot":"alert-dialog-default-icon"})}};return M.jsx(Se.div,{className:r==null?void 0:r.icon({className:e}),"data-slot":"alert-dialog-icon",...l,children:t??o()})},Lm=({className:t,...e})=>{const{slots:n}=s.useContext(ze);return M.jsx(km,{className:me(t,n==null?void 0:n.closeTrigger()),"data-slot":"alert-dialog-close-trigger",slot:"close",...e})},b0=Object.assign(Si,{Root:Si,Trigger:Pm,Backdrop:Am,Container:Tm,Dialog:Bm,Header:Km,Heading:Rm,Body:Mm,Footer:Im,Icon:Fm,CloseTrigger:Lm});function zm(t){let e=En({usage:"search",...t}),n=s.useCallback((o,i)=>i.length===0?!0:(o=o.normalize("NFC"),i=i.normalize("NFC"),e.compare(o.slice(0,i.length),i)===0),[e]),l=s.useCallback((o,i)=>i.length===0?!0:(o=o.normalize("NFC"),i=i.normalize("NFC"),e.compare(o.slice(-i.length),i)===0),[e]),r=s.useCallback((o,i)=>{if(i.length===0)return!0;o=o.normalize("NFC"),i=i.normalize("NFC");let u=0,a=i.length;for(;u+a<=o.length;u++){let c=o.slice(u,u+a);if(e.compare(i,c)===0)return!0}return!1},[e]);return s.useMemo(()=>({startsWith:n,endsWith:l,contains:r}),[n,l,r])}const Ur=s.createContext({}),Ms=s.createContext(null),Is={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valueMissing:!1,valid:!0},Fs={...Is,customError:!0,valid:!1},qt={isInvalid:!1,validationDetails:Is,validationErrors:[]},Nm=s.createContext({}),Di="__reactAriaFormValidationState";function Om(t){if(t[Di]){let{realtimeValidation:e,displayValidation:n,updateValidation:l,resetValidation:r,commitValidation:o}=t[Di];return{realtimeValidation:e,displayValidation:n,updateValidation:l,resetValidation:r,commitValidation:o}}return Vm(t)}function Vm(t){let{isInvalid:e,validationState:n,name:l,value:r,builtinValidation:o,validate:i,validationBehavior:u="aria"}=t;n&&(e||(e=n==="invalid"));let a=e!==void 0?{isInvalid:e,validationErrors:[],validationDetails:Fs}:null,c=s.useMemo(()=>{if(!i||r==null)return null;let B=jm(i,r);return ki(B)},[i,r]);o!=null&&o.validationDetails.valid&&(o=void 0);let f=s.useContext(Nm),d=s.useMemo(()=>l?Array.isArray(l)?l.flatMap(B=>ur(f[B])):ur(f[l]):[],[f,l]),[b,p]=s.useState(f),[h,$]=s.useState(!1);f!==b&&(p(f),$(!1));let y=s.useMemo(()=>ki(h?[]:d),[h,d]),m=s.useRef(qt),[v,E]=s.useState(qt),C=s.useRef(qt),R=()=>{if(!A)return;K(!1);let B=c||o||m.current;Rl(B,C.current)||(C.current=B,E(B))},[A,K]=s.useState(!1);return s.useEffect(R),{realtimeValidation:a||y||c||o||qt,displayValidation:u==="native"?a||y||v:a||y||c||o||v,updateValidation(B){u==="aria"&&!Rl(v,B)?E(B):m.current=B},resetValidation(){let B=qt;Rl(B,C.current)||(C.current=B,E(B)),u==="native"&&K(!1),$(!0)},commitValidation(){u==="native"&&K(!0),$(!0)}}}function ur(t){return t?Array.isArray(t)?t:[t]:[]}function jm(t,e){if(typeof t=="function"){let n=t(e);if(n&&typeof n!="boolean")return ur(n)}return[]}function ki(t){return t.length?{isInvalid:!0,validationErrors:t,validationDetails:Fs}:null}function Rl(t,e){return t===e?!0:!!t&&!!e&&t.isInvalid===e.isInvalid&&t.validationErrors.length===e.validationErrors.length&&t.validationErrors.every((n,l)=>n===e.validationErrors[l])&&Object.entries(t.validationDetails).every(([n,l])=>e.validationDetails[n]===l)}const Gr=s.createContext(null);var Ls={};Ls={colorSwatchPicker:"تغييرات الألوان",dropzoneLabel:"DropZone",selectPlaceholder:"حدد عنصرًا",tableResizer:"أداة تغيير الحجم"};var zs={};zs={colorSwatchPicker:"Цветови мостри",dropzoneLabel:"DropZone",selectPlaceholder:"Изберете предмет",tableResizer:"Преоразмерител"};var Ns={};Ns={colorSwatchPicker:"Vzorky barev",dropzoneLabel:"Místo pro přetažení",selectPlaceholder:"Vyberte položku",tableResizer:"Změna velikosti"};var Os={};Os={colorSwatchPicker:"Farveprøver",dropzoneLabel:"DropZone",selectPlaceholder:"Vælg et element",tableResizer:"Størrelsesændring"};var Vs={};Vs={colorSwatchPicker:"Farbfelder",dropzoneLabel:"Ablegebereich",selectPlaceholder:"Element wählen",tableResizer:"Größenanpassung"};var js={};js={colorSwatchPicker:"Χρωματικά δείγματα",dropzoneLabel:"DropZone",selectPlaceholder:"Επιλέξτε ένα αντικείμενο",tableResizer:"Αλλαγή μεγέθους"};var _s={};_s={selectPlaceholder:"Select an item",tableResizer:"Resizer",dropzoneLabel:"DropZone",colorSwatchPicker:"Color swatches"};var Hs={};Hs={colorSwatchPicker:"Muestras de colores",dropzoneLabel:"DropZone",selectPlaceholder:"Seleccionar un artículo",tableResizer:"Cambiador de tamaño"};var Ws={};Ws={colorSwatchPicker:"Värvinäidised",dropzoneLabel:"DropZone",selectPlaceholder:"Valige üksus",tableResizer:"Suuruse muutja"};var Us={};Us={colorSwatchPicker:"Värimallit",dropzoneLabel:"DropZone",selectPlaceholder:"Valitse kohde",tableResizer:"Koon muuttaja"};var Gs={};Gs={colorSwatchPicker:"Échantillons de couleurs",dropzoneLabel:"DropZone",selectPlaceholder:"Sélectionner un élément",tableResizer:"Redimensionneur"};var qs={};qs={colorSwatchPicker:"דוגמיות צבע",dropzoneLabel:"DropZone",selectPlaceholder:"בחר פריט",tableResizer:"שינוי גודל"};var Zs={};Zs={colorSwatchPicker:"Uzorci boja",dropzoneLabel:"Zona spuštanja",selectPlaceholder:"Odaberite stavku",tableResizer:"Promjena veličine"};var Ys={};Ys={colorSwatchPicker:"Színtárak",dropzoneLabel:"DropZone",selectPlaceholder:"Válasszon ki egy elemet",tableResizer:"Átméretező"};var Xs={};Xs={colorSwatchPicker:"Campioni di colore",dropzoneLabel:"Zona di rilascio",selectPlaceholder:"Seleziona un elemento",tableResizer:"Ridimensionamento"};var Js={};Js={colorSwatchPicker:"カラースウォッチ",dropzoneLabel:"ドロップゾーン",selectPlaceholder:"項目を選択",tableResizer:"サイズ変更ツール"};var Qs={};Qs={colorSwatchPicker:"색상 견본",dropzoneLabel:"드롭 영역",selectPlaceholder:"항목 선택",tableResizer:"크기 조정기"};var ec={};ec={colorSwatchPicker:"Spalvų pavyzdžiai",dropzoneLabel:"„DropZone“",selectPlaceholder:"Pasirinkite elementą",tableResizer:"Dydžio keitiklis"};var tc={};tc={colorSwatchPicker:"Krāsu paraugi",dropzoneLabel:"DropZone",selectPlaceholder:"Izvēlēties vienumu",tableResizer:"Izmēra mainītājs"};var nc={};nc={colorSwatchPicker:"Fargekart",dropzoneLabel:"Droppsone",selectPlaceholder:"Velg et element",tableResizer:"Størrelsesendrer"};var lc={};lc={colorSwatchPicker:"kleurstalen",dropzoneLabel:"DropZone",selectPlaceholder:"Selecteer een item",tableResizer:"Resizer"};var rc={};rc={colorSwatchPicker:"Próbki kolorów",dropzoneLabel:"Strefa upuszczania",selectPlaceholder:"Wybierz element",tableResizer:"Zmiana rozmiaru"};var oc={};oc={colorSwatchPicker:"Amostras de cores",dropzoneLabel:"DropZone",selectPlaceholder:"Selecione um item",tableResizer:"Redimensionador"};var ic={};ic={colorSwatchPicker:"Amostras de cores",dropzoneLabel:"DropZone",selectPlaceholder:"Selecione um item",tableResizer:"Redimensionador"};var uc={};uc={colorSwatchPicker:"Specimene de culoare",dropzoneLabel:"Zonă de plasare",selectPlaceholder:"Selectați un element",tableResizer:"Instrument de redimensionare"};var ac={};ac={colorSwatchPicker:"Цветовые образцы",dropzoneLabel:"DropZone",selectPlaceholder:"Выберите элемент",tableResizer:"Средство изменения размера"};var sc={};sc={colorSwatchPicker:"Vzorkovníky farieb",dropzoneLabel:"DropZone",selectPlaceholder:"Vyberte položku",tableResizer:"Nástroj na zmenu veľkosti"};var cc={};cc={colorSwatchPicker:"Barvne palete",dropzoneLabel:"DropZone",selectPlaceholder:"Izberite element",tableResizer:"Spreminjanje velikosti"};var dc={};dc={colorSwatchPicker:"Uzorci boje",dropzoneLabel:"DropZone",selectPlaceholder:"Izaberite stavku",tableResizer:"Promena veličine"};var fc={};fc={colorSwatchPicker:"Färgrutor",dropzoneLabel:"DropZone",selectPlaceholder:"Välj en artikel",tableResizer:"Storleksändrare"};var pc={};pc={colorSwatchPicker:"Renk örnekleri",dropzoneLabel:"Bırakma Bölgesi",selectPlaceholder:"Bir öğe seçin",tableResizer:"Yeniden boyutlandırıcı"};var bc={};bc={colorSwatchPicker:"Зразки кольорів",dropzoneLabel:"DropZone",selectPlaceholder:"Виберіть елемент",tableResizer:"Засіб змінення розміру"};var hc={};hc={colorSwatchPicker:"颜色色板",dropzoneLabel:"放置区域",selectPlaceholder:"选择一个项目",tableResizer:"尺寸调整器"};var mc={};mc={colorSwatchPicker:"色票",dropzoneLabel:"放置區",selectPlaceholder:"選取項目",tableResizer:"大小調整器"};var gc={};gc={"ar-AE":Ls,"bg-BG":zs,"cs-CZ":Ns,"da-DK":Os,"de-DE":Vs,"el-GR":js,"en-US":_s,"es-ES":Hs,"et-EE":Ws,"fi-FI":Us,"fr-FR":Gs,"he-IL":qs,"hr-HR":Zs,"hu-HU":Ys,"it-IT":Xs,"ja-JP":Js,"ko-KR":Qs,"lt-LT":ec,"lv-LV":tc,"nb-NO":nc,"nl-NL":lc,"pl-PL":rc,"pt-BR":oc,"pt-PT":ic,"ro-RO":uc,"ru-RU":ac,"sk-SK":sc,"sl-SI":cc,"sr-SP":dc,"sv-SE":fc,"tr-TR":pc,"uk-UA":bc,"zh-CN":hc,"zh-TW":mc};const qe=s.createContext({}),qr=s.createContext(null),_m=s.forwardRef(function(e,n){let{render:l}=s.useContext(qr);return g.createElement(g.Fragment,null,l(e,n))});function Zr(t,e){var o;let n=t==null?void 0:t.renderDropIndicator,l=(o=t==null?void 0:t.isVirtualDragging)==null?void 0:o.call(t),r=s.useCallback(i=>{if(l||e!=null&&e.isDropTarget(i))return n?n(i):g.createElement(_m,{target:i})},[e==null?void 0:e.target,l,n]);return t!=null&&t.useDropIndicator?r:void 0}function yc(t,e,n){var o,i,u;let l=t.focusedKey,r=null;if((o=e==null?void 0:e.isVirtualDragging)!=null&&o.call(e)&&((i=n==null?void 0:n.target)==null?void 0:i.type)==="item"&&(r=n.target.key,n.target.dropPosition==="after")){let a=n.collection.getKeyAfter(r),c=null;if(a!=null){let f=((u=n.collection.getItem(r))==null?void 0:u.level)??0;for(;a!=null;){let d=n.collection.getItem(a);if(!d)break;if(d.type!=="item"){a=n.collection.getKeyAfter(a);continue}if((d.level??0)<=f)break;c=a,a=n.collection.getKeyAfter(a)}}r=a??c??r}return s.useMemo(()=>new Set([l,r].filter(a=>a!=null)),[l,r])}const dl=new WeakMap;function Hm(t){return typeof t=="string"?t.replace(/\s*/g,""):""+t}function $c(t,e){let n=dl.get(t);if(!n)throw new Error("Unknown list");return`${n.id}-option-${Hm(e)}`}function Wm(t,e,n){let l=ie(t,{labelable:!0}),r=t.selectionBehavior||"toggle",o=t.orientation||"vertical",i=t.linkBehavior||(r==="replace"?"action":"override");r==="toggle"&&i==="action"&&(i="override");let{listProps:u}=dm({...t,ref:n,selectionManager:e.selectionManager,collection:e.collection,disabledKeys:e.disabledKeys,linkBehavior:i}),{focusWithinProps:a}=ll({onFocusWithin:t.onFocus,onBlurWithin:t.onBlur,onFocusWithinChange:t.onFocusChange}),c=$e(t.id);dl.set(e,{id:c,shouldUseVirtualFocus:t.shouldUseVirtualFocus,shouldSelectOnPressUp:t.shouldSelectOnPressUp,shouldFocusOnHover:t.shouldFocusOnHover,isVirtualized:t.isVirtualized,onAction:t.onAction,linkBehavior:i,UNSTABLE_itemBehavior:t.UNSTABLE_itemBehavior});let{labelProps:f,fieldProps:d}=Au({...t,id:c,labelElementType:"span"});return{labelProps:f,listBoxProps:G(l,a,e.selectionManager.selectionMode==="multiple"?{"aria-multiselectable":"true"}:{},{role:"listbox","aria-orientation":o,...G(d,u)})}}function Um(t,e,n){var z,B;let{key:l}=t,r=dl.get(e),o=t.isDisabled??e.selectionManager.isDisabled(l),i=t.isSelected??e.selectionManager.isSelected(l),u=t.shouldSelectOnPressUp??(r==null?void 0:r.shouldSelectOnPressUp),a=t.shouldFocusOnHover??(r==null?void 0:r.shouldFocusOnHover),c=t.shouldUseVirtualFocus??(r==null?void 0:r.shouldUseVirtualFocus),f=t.isVirtualized??(r==null?void 0:r.isVirtualized),d=on(),b=on(),p={role:"option","aria-disabled":o||void 0,"aria-selected":e.selectionManager.selectionMode!=="none"?i:void 0,"aria-label":t["aria-label"],"aria-labelledby":d,"aria-describedby":b},h=e.collection.getItem(l);if(f){let N=Number(h==null?void 0:h.index);p["aria-posinset"]=Number.isNaN(N)?void 0:N+1,p["aria-setsize"]=As(e.collection)}let $=r!=null&&r.onAction?()=>{var N;return(N=r==null?void 0:r.onAction)==null?void 0:N.call(r,l)}:void 0,y=$c(e,l),{itemProps:m,isPressed:v,isFocused:E,hasAction:C,allowsSelection:R}=jr({selectionManager:e.selectionManager,key:l,ref:n,shouldSelectOnPressUp:u,allowsDifferentPressOrigin:u&&a,isVirtualized:f,shouldUseVirtualFocus:c,isDisabled:o,onAction:$||(z=h==null?void 0:h.props)!=null&&z.onAction?dt((B=h==null?void 0:h.props)==null?void 0:B.onAction,$):void 0,linkBehavior:r==null?void 0:r.linkBehavior,UNSTABLE_itemBehavior:r==null?void 0:r.UNSTABLE_itemBehavior,id:y}),{hoverProps:A}=He({isDisabled:o||!a,onHoverStart(){Ft()||(e.selectionManager.setFocused(!0),e.selectionManager.setFocusedKey(l))}}),K=ie(h==null?void 0:h.props);delete K.id;let P=eu(h==null?void 0:h.props);return{optionProps:{...p,...G(K,m,A,P),id:y},labelProps:{id:d},descriptionProps:{id:b},isFocused:E,isFocusVisible:E&&e.selectionManager.isFocused&&Ft(),isSelected:i,isDisabled:o,isPressed:v,allowsSelection:R,hasAction:C}}function Gm(t){let{heading:e,"aria-label":n}=t,l=$e();return{itemProps:{role:"presentation"},headingProps:e?{id:l,role:"presentation",onMouseDown:r=>{r.preventDefault()}}:{},groupProps:{role:"group","aria-label":n,"aria-labelledby":e?l:void 0}}}class ar{constructor(e){this.keyMap=new Map,this.firstKey=null,this.lastKey=null,this.iterable=e;let n=i=>{if(this.keyMap.set(i.key,i),i.childNodes&&i.type==="section")for(let u of i.childNodes)n(u)};for(let i of e)n(i);let l=null,r=0,o=0;for(let[i,u]of this.keyMap)l?(l.nextKey=i,u.prevKey=l.key):(this.firstKey=i,u.prevKey=void 0),u.type==="item"&&(u.index=r++),(u.type==="section"||u.type==="item")&&o++,l=u,l.nextKey=void 0;this._size=o,this.lastKey=(l==null?void 0:l.key)??null}*[Symbol.iterator](){yield*this.iterable}get size(){return this._size}getKeys(){return this.keyMap.keys()}getKeyBefore(e){let n=this.keyMap.get(e);return n?n.prevKey??null:null}getKeyAfter(e){let n=this.keyMap.get(e);return n?n.nextKey??null:null}getFirstKey(){return this.firstKey}getLastKey(){return this.lastKey}getItem(e){return this.keyMap.get(e)??null}at(e){const n=[...this.getKeys()];return this.getItem(n[e])}getChildren(e){let n=this.keyMap.get(e);return(n==null?void 0:n.childNodes)||[]}}function vc(t){let{filter:e,layoutDelegate:n}=t,l=Hr(t),r=s.useMemo(()=>t.disabledKeys?new Set(t.disabledKeys):new Set,[t.disabledKeys]),o=s.useCallback(c=>e?new ar(e(c)):new ar(c),[e]),i=s.useMemo(()=>({suppressTextValueWarning:t.suppressTextValueWarning}),[t.suppressTextValueWarning]),u=Bs(t,o,i),a=s.useMemo(()=>new cl(u,l,{layoutDelegate:n}),[u,l,n]);return xc(u,a),{collection:u,disabledKeys:r,selectionManager:a}}function qm(t,e){let n=s.useMemo(()=>e?t.collection.filter(e):t.collection,[t.collection,e]),l=t.selectionManager.withCollection(n);return xc(n,l),{collection:n,selectionManager:l,disabledKeys:t.disabledKeys}}function xc(t,e){const n=s.useRef(null);s.useEffect(()=>{if(e.focusedKey!=null&&!t.getItem(e.focusedKey)&&n.current){let l=n.current.getKeyAfter(e.focusedKey),r=null;for(;l!=null;){let o=t.getItem(l);if(o&&o.type==="item"&&!e.isDisabled(l)){r=l;break}l=n.current.getKeyAfter(l)}if(r==null)for(l=n.current.getKeyBefore(e.focusedKey);l!=null;){let o=t.getItem(l);if(o&&o.type==="item"&&!e.isDisabled(l)){r=l;break}l=n.current.getKeyBefore(l)}e.setFocusedKey(r)}n.current=t},[t,e])}const fl=s.createContext(null),_t=s.createContext(null),Zm=s.forwardRef(function(e,n){[e,n]=xe(e,n,fl);let l=s.useContext(_t);return l?g.createElement(Cc,{state:l,props:e,listBoxRef:n}):g.createElement(zr,{content:g.createElement(xn,e)},r=>g.createElement(Ym,{props:e,listBoxRef:n,collection:r}))});function Ym({props:t,listBoxRef:e,collection:n}){t={...t,collection:n,children:null,items:null};let{layoutDelegate:l}=s.useContext(fe),r=vc({...t,layoutDelegate:l});return g.createElement(Cc,{state:r,props:t,listBoxRef:e})}function Cc({state:t,props:e,listBoxRef:n}){[e,n]=xe(e,n,rr);let{dragAndDropHooks:l,layout:r="stack",orientation:o="vertical",filter:i}=e,u=qm(t,i),{collection:a,selectionManager:c}=u,f=!!(l!=null&&l.useDraggableCollectionState),d=!!(l!=null&&l.useDroppableCollectionState),{direction:b}=Re(),{disabledBehavior:p,disabledKeys:h}=c,$=En({usage:"search",sensitivity:"base"}),{isVirtualized:y,layoutDelegate:m,dropTargetDelegate:v,CollectionRoot:E}=s.useContext(fe),C=s.useMemo(()=>e.keyboardDelegate||new sl({collection:a,collator:$,ref:n,disabledKeys:h,disabledBehavior:p,layout:r,orientation:o,direction:b,layoutDelegate:m}),[a,$,n,p,h,o,b,e.keyboardDelegate,r,m]),{listBoxProps:R}=Wm({...e,shouldSelectOnPressUp:f||e.shouldSelectOnPressUp,keyboardDelegate:C,isVirtualized:y},u,n);s.useRef(f),s.useRef(d),s.useEffect(()=>{},[f,d]);let A,K,P,z=!1,B=null,N=s.useRef(null);if(f&&l){A=l.useDraggableCollectionState({collection:a,selectionManager:c,preview:l.renderDragPreview?N:void 0}),l.useDraggableCollection({},A,n);let T=l.DragPreview;B=l.renderDragPreview?g.createElement(T,{ref:N},l.renderDragPreview):null}if(d&&l){K=l.useDroppableCollectionState({collection:a,selectionManager:c});let T=l.dropTargetDelegate||v||new l.ListDropTargetDelegate(a,n,{orientation:o,layout:r,direction:b});P=l.useDroppableCollection({keyboardDelegate:C,dropTargetDelegate:T},K,n),z=K.isDropTarget({type:"root"})}let{focusProps:U,isFocused:_,isFocusVisible:x}=je(),S=u.collection.size===0,I={isDropTarget:z,isEmpty:S,isFocused:_,isFocusVisible:x,layout:e.layout||"stack",orientation:o,state:u},w=ce({...e,children:void 0,defaultClassName:"react-aria-ListBox",values:I}),k=null;S&&e.renderEmptyState&&(k=g.createElement("div",{role:"option",style:{display:"contents"}},e.renderEmptyState(I)));let D=ie(e,{global:!0});return g.createElement(Mr,null,g.createElement(le.div,{...G(D,w,R,U,P==null?void 0:P.collectionProps),ref:n,slot:e.slot||void 0,onScroll:e.onScroll,"data-drop-target":z||void 0,"data-empty":S||void 0,"data-focused":_||void 0,"data-focus-visible":x||void 0,"data-layout":e.layout||"stack","data-orientation":o},g.createElement(_e,{values:[[fl,e],[_t,u],[qe,{dragAndDropHooks:l,dragState:A,dropState:K}],[tm,{elementType:"div"}],[qr,{render:Qm}],[Z4,{name:"ListBoxSection",render:Ec}]]},g.createElement(_a,null,g.createElement(E,{collection:a,scrollRef:n,persistedKeys:yc(c,l,K),renderDropIndicator:Zr(l,K)}))),k,B))}function Ec(t,e,n,l="react-aria-ListBoxSection"){let r=s.useContext(_t),{dragAndDropHooks:o,dropState:i}=s.useContext(qe),{CollectionBranch:u}=s.useContext(fe),[a,c]=Dr(),{headingProps:f,groupProps:d}=Gm({heading:c,"aria-label":t["aria-label"]??void 0}),b=ce({...t,id:void 0,children:void 0,defaultClassName:l,values:void 0}),p=ie(t,{global:!0});return delete p.id,g.createElement(le.section,{...G(p,b,d),ref:e},g.createElement(Q4.Provider,{value:{...f,ref:a}},g.createElement(u,{collection:r.collection,parent:n,renderDropIndicator:Zr(o,i)})))}const Xm=al(nr,Ec),Jm=vn(tr,function(e,n,l){let r=ke(n),o=s.useContext(_t),{dragAndDropHooks:i,dragState:u,dropState:a}=s.useContext(qe),c=u&&!(u.isDisabled||u.selectionManager.isDisabled(l.key)),{optionProps:f,labelProps:d,descriptionProps:b,...p}=Um({key:l.key,"aria-label":e==null?void 0:e["aria-label"]},o,r),{hoverProps:h,isHovered:$}=He({isDisabled:!p.allowsSelection&&!p.hasAction&&!c,onHoverStart:l.props.onHoverStart,onHoverChange:l.props.onHoverChange,onHoverEnd:l.props.onHoverEnd}),{keyboardProps:y}=Tr(e),{focusProps:m}=Ar(e),v=null;u&&i&&(v=i.useDraggableItem({key:l.key,hasAction:p.hasAction},u));let E=null;a&&i&&(E=i.useDroppableItem({target:{type:"item",key:l.key,dropPosition:"on"}},a,r));let C=u&&u.isDragging(l.key),R=ce({...e,id:void 0,children:e.children,defaultClassName:"react-aria-ListBoxItem",values:{...p,isHovered:$,selectionMode:o.selectionManager.selectionMode,selectionBehavior:o.selectionManager.selectionBehavior,allowsDragging:!!u,isDragging:C,isDropTarget:E==null?void 0:E.isDropTarget}});s.useEffect(()=>{l.textValue},[l.textValue]);let A=e.href?le.a:le.div,K=ie(e,{global:!0});return delete K.id,delete K.onClick,e.href&&f.tabIndex==null&&(f.tabIndex=-1),g.createElement(A,{...G(K,R,f,h,y,m,v==null?void 0:v.dragProps,E==null?void 0:E.dropProps),ref:r,"data-allows-dragging":!!u||void 0,"data-selected":p.isSelected||void 0,"data-disabled":p.isDisabled||void 0,"data-hovered":$||void 0,"data-focused":p.isFocused||void 0,"data-focus-visible":p.isFocusVisible||void 0,"data-pressed":p.isPressed||void 0,"data-dragging":C||void 0,"data-drop-target":(E==null?void 0:E.isDropTarget)||void 0,"data-selection-mode":o.selectionManager.selectionMode==="none"?void 0:o.selectionManager.selectionMode},g.createElement(_e,{values:[[Cn,{slots:{[mt]:d,label:d,description:b}}],[Ha,{isSelected:p.isSelected}]]},R.children))});function Qm(t,e){e=ke(e);let{dragAndDropHooks:n,dropState:l}=s.useContext(qe),{dropIndicatorProps:r,isHidden:o,isDropTarget:i}=n.useDropIndicator(t,l,e);return o?null:g.createElement(t3,{...t,dropIndicatorProps:r,isDropTarget:i,ref:e})}function e3(t,e){let{dropIndicatorProps:n,isDropTarget:l,...r}=t,o=ce({...r,defaultClassName:"react-aria-DropIndicator",values:{isDropTarget:l}});return g.createElement(g.Fragment,null,g.createElement(le.div,{...n,...o,role:"option",ref:e,"data-drop-target":l||void 0}))}const t3=s.forwardRef(e3);vn(qn,function(e,n,l){let r=s.useContext(_t),{isLoading:o,onLoadMore:i,scrollOffset:u,...a}=e,c=s.useRef(null),f=s.useMemo(()=>({onLoadMore:i,collection:r==null?void 0:r.collection,sentinelRef:c,scrollOffset:u}),[i,u,r==null?void 0:r.collection]);uu(f,c);let d=ce({...a,id:void 0,children:l.rendered,defaultClassName:"react-aria-ListBoxLoadingIndicator",values:void 0}),b={tabIndex:-1};return g.createElement(g.Fragment,null,g.createElement("div",{style:{position:"relative",width:0,height:0},inert:au(!0)},g.createElement("div",{"data-testid":"loadMoreSentinel",ref:c,style:{position:"absolute",height:1,width:1}})),o&&d.children&&g.createElement(g.Fragment,null,g.createElement(le.div,{...G(ie(e,{global:!0}),b),...d,role:"option",ref:n},d.children)))});function n3(t){let{description:e,errorMessage:n,isInvalid:l,validationState:r}=t,{labelProps:o,fieldProps:i}=Au(t),u=on([!!e,!!n,l,r]),a=on([!!e,!!n,l,r]);return i=G(i,{"aria-describedby":[u,a,t["aria-describedby"]].filter(Boolean).join(" ")||void 0}),{labelProps:o,fieldProps:i,descriptionProps:{id:u},errorMessageProps:{id:a}}}function wc(t,e,n){let{validationBehavior:l,focus:r}=t;ne(()=>{if(l==="native"&&(n!=null&&n.current)&&!n.current.disabled){let c=e.realtimeValidation.isInvalid?e.realtimeValidation.validationErrors.join(" ")||"Invalid value.":"";n.current.setCustomValidity(c),n.current.hasAttribute("title")||(n.current.title=""),e.realtimeValidation.isInvalid||e.updateValidation(r3(n.current))}});let o=s.useRef(!1),i=Ee(()=>{o.current||e.resetValidation()}),u=Ee(c=>{var d,b;e.displayValidation.isInvalid||e.commitValidation();let f=(d=n==null?void 0:n.current)==null?void 0:d.form;!c.defaultPrevented&&n&&f&&o3(f)===n.current&&(r?r():(b=n.current)==null||b.focus(),Th("keyboard")),c.preventDefault()}),a=Ee(()=>{e.commitValidation()});s.useEffect(()=>{let c=n==null?void 0:n.current;if(!c)return;let f=c.form,d=f==null?void 0:f.reset;return f&&(f.reset=()=>{o.current=!window.event||window.event.type==="message"&&j(window.event)instanceof MessagePort,d==null||d.call(f),o.current=!1}),c.addEventListener("invalid",u),c.addEventListener("change",a),f==null||f.addEventListener("reset",i),()=>{c.removeEventListener("invalid",u),c.removeEventListener("change",a),f==null||f.removeEventListener("reset",i),f&&(f.reset=d)}},[n,l])}function l3(t){let e=t.validity;return{badInput:e.badInput,customError:e.customError,patternMismatch:e.patternMismatch,rangeOverflow:e.rangeOverflow,rangeUnderflow:e.rangeUnderflow,stepMismatch:e.stepMismatch,tooLong:e.tooLong,tooShort:e.tooShort,typeMismatch:e.typeMismatch,valueMissing:e.valueMissing,valid:e.valid}}function r3(t){return{isInvalid:!t.validity.valid,validationDetails:l3(t),validationErrors:t.validationMessage?[t.validationMessage]:[]}}function o3(t){var e;for(let n=0;n{var v;(v=d.onClick)==null||v.call(d,m),vp(m,$,t.href,t.routerOptions)}})}}const u3=s.createContext(null),a3=s.forwardRef(function(e,n){[e,n]=xe(e,n,u3);let l=e.href&&!e.isDisabled?"a":"span",{linkProps:r,isPressed:o}=i3({...e,elementType:l},n),i=le[l],{hoverProps:u,isHovered:a}=He(e),{focusProps:c,isFocused:f,isFocusVisible:d}=je(),b=ce({...e,defaultClassName:"react-aria-Link",values:{isCurrent:!!e["aria-current"],isDisabled:e.isDisabled||!1,isPressed:o,isHovered:a,isFocused:f,isFocusVisible:d}}),p=ie(e,{global:!0});return delete p.onClick,g.createElement(i,{ref:n,slot:e.slot||void 0,...G(p,b,r,u,c),"data-focused":f||void 0,"data-hovered":a||void 0,"data-pressed":o||void 0,"data-focus-visible":d||void 0,"data-current":!!e["aria-current"]||void 0,"data-disabled":e.isDisabled||void 0},b.children)}),Sc=s.createContext({}),Pi=({children:t,className:e,...n})=>{const l=g.useMemo(()=>uh(),[]);return M.jsx(Sc,{value:{slots:l},children:M.jsx(a3,{...n,className:me(e,l==null?void 0:l.base()),children:r=>M.jsx(M.Fragment,{children:typeof t=="function"?t(r):t})})})},s3=({children:t,className:e,...n})=>{const{slots:l}=s.useContext(Sc);return M.jsx(Se.span,{className:de(l==null?void 0:l.icon,e),"data-default-icon":_u(!t),"data-slot":"link-icon",...n,children:t??M.jsx(Gh,{"data-slot":"link-default-icon"})})},h0=Object.assign(Pi,{Root:Pi,Icon:s3});function c3(t={}){let{isReadOnly:e}=t,[n,l]=Ct(t.isSelected,t.defaultSelected||!1,t.onChange),[r]=s.useState(n);function o(u){e||l(u)}function i(){e||l(!n)}return{isSelected:n,defaultSelected:t.defaultSelected??r,setSelected:o,toggle:i}}const d3=s.createContext({}),f3="__button_group_child",Ai=({children:t,className:e,fullWidth:n,isDisabled:l,isIconOnly:r,size:o,slot:i,style:u,variant:a,[f3]:c,...f})=>{const d=s.useContext(d3),b=c===!0,p=o??(b?d==null?void 0:d.size:void 0),h=a??(b?d==null?void 0:d.variant:void 0),$=l??(b?d==null?void 0:d.isDisabled:void 0),y=n??(b?d==null?void 0:d.fullWidth:void 0),m=Qb({fullWidth:y,isIconOnly:r,size:p,variant:h});return M.jsx(Kr,{className:me(e,m),"data-slot":"button",isDisabled:$,slot:i,style:u,...f,children:v=>typeof t=="function"?t(v):t})},m0=Object.assign(Ai,{Root:Ai}),Ht=s.createContext({}),Ti=({children:t,className:e,variant:n="default",...l})=>{const r=g.useMemo(()=>eh({variant:n}),[n]),o=M.jsx(Se.div,{className:r.base({className:e}),"data-slot":"card",...l,children:t});return M.jsx(Ht,{value:{slots:r},children:n==="transparent"?o:M.jsx(Hu,{value:{variant:n},children:o})})},p3=({className:t,...e})=>{const{slots:n}=s.useContext(Ht);return M.jsx(Se.div,{className:de(n==null?void 0:n.header,t),"data-slot":"card-header",...e})},b3=({children:t,className:e,...n})=>{const{slots:l}=s.useContext(Ht);return M.jsx(Se.h3,{className:de(l==null?void 0:l.title,e),"data-slot":"card-title",...n,children:t})},h3=({children:t,className:e,...n})=>{const{slots:l}=s.useContext(Ht);return M.jsx(Se.p,{className:de(l==null?void 0:l.description,e),"data-slot":"card-description",...n,children:t})},m3=({className:t,...e})=>{const{slots:n}=s.useContext(Ht);return M.jsx(Se.div,{className:de(n==null?void 0:n.content,t),"data-slot":"card-content",...e})},g3=({className:t,...e})=>{const{slots:n}=s.useContext(Ht);return M.jsx(Se.div,{className:de(n==null?void 0:n.footer,t),"data-slot":"card-footer",...e})},g0=Object.assign(Ti,{Root:Ti,Header:p3,Title:b3,Description:h3,Content:m3,Footer:g3}),y3=new WeakMap;function $3(t=!0){let[e,n]=s.useState(t),l=s.useRef(!1),r=s.useCallback(o=>{l.current=!0,n(!!o)},[]);return ne(()=>{l.current||n(!1)},[]),[r,e]}function Bi(t=!0){let e=$e(),[n,l]=$3(t);return{id:l?e:void 0,ref:n}}const Dc={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valueMissing:!1,valid:!0},kc={...Dc,customError:!0,valid:!1},At={isInvalid:!1,validationDetails:Dc,validationErrors:[]},v3=s.createContext({}),bn="__reactAriaFormValidationState";function Yr(t){if(t[bn]){let{realtimeValidation:e,displayValidation:n,updateValidation:l,resetValidation:r,commitValidation:o}=t[bn];return{realtimeValidation:e,displayValidation:n,updateValidation:l,resetValidation:r,commitValidation:o}}return x3(t)}function x3(t){let{isInvalid:e,validationState:n,name:l,value:r,builtinValidation:o,validate:i,validationBehavior:u="aria"}=t;n&&(e||(e=n==="invalid"));let a=e!==void 0?{isInvalid:e,validationErrors:[],validationDetails:kc}:null,c=s.useMemo(()=>{if(!i||r==null)return null;let B=C3(i,r);return Ki(B)},[i,r]);o!=null&&o.validationDetails.valid&&(o=void 0);let f=s.useContext(v3),d=s.useMemo(()=>l?Array.isArray(l)?l.flatMap(B=>sr(f[B])):sr(f[l]):[],[f,l]),[b,p]=s.useState(f),[h,$]=s.useState(!1);f!==b&&(p(f),$(!1));let y=s.useMemo(()=>Ki(h?[]:d),[h,d]),m=s.useRef(At),[v,E]=s.useState(At),C=s.useRef(At),R=()=>{if(!A)return;K(!1);let B=c||o||m.current;Ml(B,C.current)||(C.current=B,E(B))},[A,K]=s.useState(!1);return s.useEffect(R),{realtimeValidation:a||y||c||o||At,displayValidation:u==="native"?a||y||v:a||y||c||o||v,updateValidation(B){u==="aria"&&!Ml(v,B)?E(B):m.current=B},resetValidation(){let B=At;Ml(B,C.current)||(C.current=B,E(B)),u==="native"&&K(!1),$(!0)},commitValidation(){u==="native"&&K(!0),$(!0)}}}function sr(t){return t?Array.isArray(t)?t:[t]:[]}function C3(t,e){if(typeof t=="function"){let n=t(e);if(n&&typeof n!="boolean")return sr(n)}return[]}function Ki(t){return t.length?{isInvalid:!0,validationErrors:t,validationDetails:kc}:null}function Ml(t,e){return t===e?!0:!!t&&!!e&&t.isInvalid===e.isInvalid&&t.validationErrors.length===e.validationErrors.length&&t.validationErrors.every((n,l)=>n===e.validationErrors[l])&&Object.entries(t.validationDetails).every(([n,l])=>e.validationDetails[n]===l)}function E3(t,e,n){let{isDisabled:l=!1,isReadOnly:r=!1,value:o,name:i,form:u,children:a,isRequired:c,validationBehavior:f="aria","aria-label":d,"aria-labelledby":b,"aria-describedby":p,onPressStart:h,onPressEnd:$,onPressChange:y,onPress:m,onPressUp:v,onClick:E}=t,C=Yr({...t,value:e.isSelected}),{isInvalid:R,validationErrors:A,validationDetails:K}=C.displayValidation;wc(t,C,n);let P=D=>{D.stopPropagation(),e.setSelected(j(D).checked)},{pressProps:z,isPressed:B}=lt({onPressStart:h,onPressEnd:$,onPressChange:y,onPress:m,onPressUp:v,onClick:E,isDisabled:l}),[N,U]=s.useState(!1),{pressProps:_}=lt({onPressStart(D){if(D.pointerType==="keyboard"||D.pointerType==="virtual"){D.continuePropagation();return}h==null||h(D),y==null||y(!0),U(!0)},onPressEnd(D){if(D.pointerType==="keyboard"||D.pointerType==="virtual"){D.continuePropagation();return}$==null||$(D),y==null||y(!1),U(!1)},onPressUp(D){if(D.pointerType==="keyboard"||D.pointerType==="virtual"){D.continuePropagation();return}v==null||v(D)},onClick:E,onPress(D){var Z;if(D.pointerType==="keyboard"||D.pointerType==="virtual"){D.continuePropagation();return}m==null||m(D),e.toggle(),(Z=n.current)==null||Z.focus();let{[bn]:T}=t,{commitValidation:O}=T||C;O()},isDisabled:l||r}),{focusableProps:x}=jt(t,n),S=G(z,x),I=ie(t,{labelable:!0});xr(n,e.defaultSelected,e.setSelected);let w=Bi(),k=Bi();return{labelProps:G(_,{onClick:D=>D.preventDefault()}),inputProps:G(I,{checked:e.isSelected,"aria-required":c&&f==="aria"||void 0,required:c&&f==="native","aria-invalid":R||t.validationState==="invalid"||void 0,"aria-errormessage":t["aria-errormessage"],"aria-controls":t["aria-controls"],"aria-readonly":r||void 0,"aria-describedby":[w.id,k.id,p].filter(Boolean).join(" ")||void 0,onChange:P,disabled:l,...o==null?{}:{value:o},name:i,form:u,type:"checkbox",...S}),descriptionProps:w,errorMessageProps:k,isSelected:e.isSelected,isPressed:B||N,isDisabled:l,isReadOnly:r,isInvalid:R||t.validationState==="invalid",validationErrors:A,validationDetails:K}}function Pc(t,e,n){let{labelProps:l,inputProps:r,descriptionProps:o,errorMessageProps:i,isSelected:u,isPressed:a,isDisabled:c,isReadOnly:f,isInvalid:d,validationErrors:b,validationDetails:p}=E3(t,e,n),{isIndeterminate:h}=t;return s.useEffect(()=>{n.current&&(n.current.indeterminate=!!h)}),{labelProps:G(l,s.useMemo(()=>({onMouseDown:$=>$.preventDefault()}),[])),inputProps:r,descriptionProps:o,errorMessageProps:i,isSelected:u,isPressed:a,isDisabled:c,isReadOnly:f,isInvalid:d,validationErrors:b,validationDetails:p}}const w3=typeof document<"u"?g.useInsertionEffect??g.useLayoutEffect:()=>{};function Ac(t,e,n){let[l,r]=s.useState(t||e),o=s.useRef(l),i=s.useRef(t!==void 0),u=t!==void 0;s.useEffect(()=>{i.current,i.current=u},[u]);let a=u?t:l;w3(()=>{o.current=a});let[,c]=s.useReducer(()=>({}),{}),f=s.useCallback((d,...b)=>{let p=typeof d=="function"?d(o.current):d;Object.is(o.current,p)||(o.current=p,r(p),c(),n==null||n(p,...b))},[n]);return[a,f]}function S3(t={}){let{isReadOnly:e}=t,[n,l]=Ac(t.isSelected,t.defaultSelected||!1,t.onChange),[r]=s.useState(n);function o(u){e||l(u)}function i(){e||l(!n)}return{isSelected:n,defaultSelected:t.defaultSelected??r,setSelected:o,toggle:i}}function D3(t,e,n){const l=S3({isReadOnly:t.isReadOnly||e.isReadOnly,isSelected:e.isSelected(t.value),defaultSelected:e.defaultValue.includes(t.value),onChange($){$?e.addValue(t.value):e.removeValue(t.value),t.onChange&&t.onChange($)}});let{name:r,form:o,descriptionId:i,errorMessageId:u,validationBehavior:a}=y3.get(e);a=t.validationBehavior??a;let{realtimeValidation:c}=Yr({...t,value:l.isSelected,name:void 0,validationBehavior:"aria"}),f=s.useRef(At),d=()=>{e.setInvalid(t.value,c.isInvalid?c:f.current)};s.useEffect(d);let b=e.realtimeValidation.isInvalid?e.realtimeValidation:c,p=a==="native"?e.displayValidation:b,h=Pc({...t,isReadOnly:t.isReadOnly||e.isReadOnly,isDisabled:t.isDisabled||e.isDisabled,name:t.name||r,form:t.form||o,isRequired:t.isRequired??e.isRequired,validationBehavior:a,[bn]:{realtimeValidation:b,displayValidation:p,resetValidation:e.resetValidation,commitValidation:e.commitValidation,updateValidation($){f.current=$,d()}}},l,n);return{...h,inputProps:{...h.inputProps,"aria-describedby":[h.inputProps["aria-describedby"],e.isInvalid?u:null,i].filter(Boolean).join(" ")||void 0}}}const Xr=s.createContext(null),Tc=s.createContext(null),k3=s.createContext(null),Bc=s.createContext(null);function P3(t,e){let{validationBehavior:n}=el(Gr)||{},l=t.validationBehavior??n??"native",r=s.useContext(k3),o=ke(s.useMemo(()=>ft(e,t.inputRef!==void 0?t.inputRef:null),[e,t.inputRef])),i={...kr(t),children:typeof t.children=="function"?!0:t.children,value:t.value,validationBehavior:l};return[r?D3(i,r,o):Pc(i,c3(t),o),o]}const y0=s.forwardRef(function(e,n){let{inputRef:l=null,...r}=e;[e,n]=xe(r,n,Xr);let[o,i]=P3(e,l);return g.createElement(Bc.Provider,{value:{...o,inputRef:i,defaultClassName:"react-aria-Checkbox",isIndeterminate:e.isIndeterminate,isRequired:e.isRequired}},g.createElement(A3,{...e,ref:n}))}),A3=s.forwardRef(function(e,n){let{labelProps:l,inputProps:r,isSelected:o,isDisabled:i,isReadOnly:u,isPressed:a,isInvalid:c,inputRef:f,defaultClassName:d,isIndeterminate:b,isRequired:p}=s.useContext(Bc),{isFocused:h,isFocusVisible:$,focusProps:y}=je(),m=i||u,{hoverProps:v,isHovered:E}=He({...e,isDisabled:m}),C=ce({...e,defaultClassName:d,values:{isSelected:o,isIndeterminate:b||!1,isPressed:a,isHovered:E,isFocused:h,isFocusVisible:$,isDisabled:i,isReadOnly:u,isInvalid:c,isRequired:p||!1}}),R=ie(e,{global:!0});return delete R.id,delete R.onClick,g.createElement(le.label,{...G(R,l,v,C),ref:n,slot:e.slot||void 0,"data-selected":o||void 0,"data-indeterminate":b||void 0,"data-pressed":a||void 0,"data-hovered":E||void 0,"data-focused":h||void 0,"data-focus-visible":$||void 0,"data-disabled":i||void 0,"data-readonly":u||void 0,"data-invalid":c||void 0,"data-required":p||void 0},g.createElement(Ka,{elementType:"span"},g.createElement("input",{...G(r,y),ref:f})),C.children)}),Kc=s.createContext({}),Ri=({children:t,className:e,color:n,size:l,variant:r,...o})=>{const i=g.useMemo(()=>th({color:n,size:l,variant:r}),[n,l,r]),u=g.useMemo(()=>typeof t=="string"||typeof t=="number"?M.jsx(Rc,{children:t}):t,[t]);return M.jsx(Kc,{value:{slots:i},children:M.jsx(Se.span,{...o,className:de(i.base,e),"data-slot":"chip",children:u})})},Rc=({children:t,className:e,...n})=>{const{slots:l}=s.useContext(Kc);return M.jsx(Se.span,{className:de(l==null?void 0:l.label,e),"data-slot":"chip-label",...n,children:t})},$0=Object.assign(Ri,{Root:Ri,Label:Rc});function T3(t){let{onMoveStart:e,onMove:n,onMoveEnd:l}=t,r=s.useRef({didMove:!1,lastPosition:null,id:null}),{addGlobalListener:o,removeGlobalListener:i}=hn(),u=s.useCallback((b,p,h,$)=>{h===0&&$===0||(r.current.didMove||(r.current.didMove=!0,e==null||e({type:"movestart",pointerType:p,shiftKey:b.shiftKey,metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey})),n==null||n({type:"move",pointerType:p,deltaX:h,deltaY:$,shiftKey:b.shiftKey,metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey}))},[e,n,r]),a=Ee(u),c=s.useCallback((b,p)=>{Gl(),r.current.didMove&&(l==null||l({type:"moveend",pointerType:p,shiftKey:b.shiftKey,metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey}))},[l,r]),f=Ee(c);return{moveProps:s.useMemo(()=>{let b={},p=()=>{Ou(),r.current.didMove=!1};{let $=m=>{var v,E;if(m.pointerId===r.current.id){let C=m.pointerType||"mouse";a(m,C,m.pageX-(((v=r.current.lastPosition)==null?void 0:v.pageX)??0),m.pageY-(((E=r.current.lastPosition)==null?void 0:E.pageY)??0)),r.current.lastPosition={pageX:m.pageX,pageY:m.pageY}}},y=m=>{if(m.pointerId===r.current.id){let v=m.pointerType||"mouse";f(m,v),r.current.id=null;let E=we(j(m));i(E,"pointermove",$,!1),i(E,"pointerup",y,!1),i(E,"pointercancel",y,!1)}};b.onPointerDown=m=>{if(m.button===0&&r.current.id==null){p(),m.stopPropagation(),m.preventDefault(),r.current.lastPosition={pageX:m.pageX,pageY:m.pageY},r.current.id=m.pointerId;let v=we(j(m));o(v,"pointermove",$,!1),o(v,"pointerup",y,!1),o(v,"pointercancel",y,!1)}}}let h=($,y,m)=>{p(),a($,"keyboard",y,m),f($,"keyboard")};return b.onKeyDown=$=>{switch($.key){case"Left":case"ArrowLeft":$.preventDefault(),$.stopPropagation(),h($,-1,0);break;case"Right":case"ArrowRight":$.preventDefault(),$.stopPropagation(),h($,1,0);break;case"Up":case"ArrowUp":$.preventDefault(),$.stopPropagation(),h($,0,-1);break;case"Down":case"ArrowDown":$.preventDefault(),$.stopPropagation(),h($,0,1);break}},b},[o,i,r])}}const pl=s.createContext({});let B3=t=>{let{onHoverStart:e,onHoverChange:n,onHoverEnd:l,...r}=t;return r};const K3=gn(function(e,n){[e,n]=xe(e,n,pl);let{hoverProps:l,isHovered:r}=He({...e,isDisabled:e.disabled}),{isFocused:o,isFocusVisible:i,focusProps:u}=je({isTextInput:!0,autoFocus:e.autoFocus}),a=!!e["aria-invalid"]&&e["aria-invalid"]!=="false",c=ce({...e,values:{isHovered:r,isFocused:o,isFocusVisible:i,isDisabled:e.disabled||!1,isInvalid:a},defaultClassName:"react-aria-Input"});return g.createElement(le.input,{...G(B3(e),u,l),...c,ref:n,"data-focused":o||void 0,"data-disabled":e.disabled||void 0,"data-hovered":r||void 0,"data-focus-visible":i||void 0,"data-invalid":a||void 0})});function Mc(t,e){let{inputElementType:n="input",isDisabled:l=!1,isRequired:r=!1,isReadOnly:o=!1,type:i="text",validationBehavior:u="aria"}=t,[a,c]=Ac(t.value,t.defaultValue||"",t.onChange),{focusableProps:f}=jt(t,e),d=Yr({...t,value:a}),{isInvalid:b,validationErrors:p,validationDetails:h}=d.displayValidation,{labelProps:$,fieldProps:y,descriptionProps:m,errorMessageProps:v}=n3({...t,isInvalid:b,errorMessage:t.errorMessage||p}),E=ie(t,{labelable:!0});const C={type:i,pattern:t.pattern};let[R]=s.useState(a);return xr(e,t.defaultValue??R,c),wc(t,d,e),{labelProps:$,inputProps:G(E,n==="input"?C:void 0,{disabled:l,readOnly:o,required:r&&u==="native","aria-required":r&&u==="aria"||void 0,"aria-invalid":b||void 0,"aria-errormessage":t["aria-errormessage"],"aria-activedescendant":t["aria-activedescendant"],"aria-autocomplete":t["aria-autocomplete"],"aria-haspopup":t["aria-haspopup"],"aria-controls":t["aria-controls"],value:a,onChange:A=>c(j(A).value),autoComplete:t.autoComplete,autoCapitalize:t.autoCapitalize,maxLength:t.maxLength,minLength:t.minLength,name:t.name,form:t.form,placeholder:t.placeholder,inputMode:t.inputMode,autoCorrect:t.autoCorrect,spellCheck:t.spellCheck,[parseInt(g.version,10)>=17?"enterKeyHint":"enterkeyhint"]:t.enterKeyHint,onCopy:t.onCopy,onCut:t.onCut,onPaste:t.onPaste,onCompositionEnd:t.onCompositionEnd,onCompositionStart:t.onCompositionStart,onCompositionUpdate:t.onCompositionUpdate,onSelect:t.onSelect,onBeforeInput:t.onBeforeInput,onInput:t.onInput,...f,...y}),descriptionProps:m,errorMessageProps:v,isInvalid:b,validationErrors:p,validationDetails:h}}var Ic={};Ic={buttonLabel:"عرض المقترحات",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} خيار`,other:()=>`${e.number(t.optionCount)} خيارات`})} متاحة.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`المجموعة المدخلة ${t.groupTitle}, مع ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} خيار`,other:()=>`${e.number(t.groupCount)} خيارات`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", محدد",other:""},t.isSelected)}`,listboxLabel:"مقترحات",selectedAnnouncement:t=>`${t.optionText}، محدد`};var Fc={};Fc={buttonLabel:"Покажи предложения",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} опция`,other:()=>`${e.number(t.optionCount)} опции`})} на разположение.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Въведена група ${t.groupTitle}, с ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} опция`,other:()=>`${e.number(t.groupCount)} опции`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", избрани",other:""},t.isSelected)}`,listboxLabel:"Предложения",selectedAnnouncement:t=>`${t.optionText}, избрани`};var Lc={};Lc={buttonLabel:"Zobrazit doporučení",countAnnouncement:(t,e)=>`K dispozici ${e.plural(t.optionCount,{one:()=>`je ${e.number(t.optionCount)} možnost`,other:()=>`jsou/je ${e.number(t.optionCount)} možnosti/-í`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Zadaná skupina „${t.groupTitle}“ ${e.plural(t.groupCount,{one:()=>`s ${e.number(t.groupCount)} možností`,other:()=>`se ${e.number(t.groupCount)} možnostmi`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:" (vybráno)",other:""},t.isSelected)}`,listboxLabel:"Návrhy",selectedAnnouncement:t=>`${t.optionText}, vybráno`};var zc={};zc={buttonLabel:"Vis forslag",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} mulighed tilgængelig`,other:()=>`${e.number(t.optionCount)} muligheder tilgængelige`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Angivet gruppe ${t.groupTitle}, med ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} mulighed`,other:()=>`${e.number(t.groupCount)} muligheder`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", valgt",other:""},t.isSelected)}`,listboxLabel:"Forslag",selectedAnnouncement:t=>`${t.optionText}, valgt`};var Nc={};Nc={buttonLabel:"Empfehlungen anzeigen",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} Option`,other:()=>`${e.number(t.optionCount)} Optionen`})} verfügbar.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Eingetretene Gruppe ${t.groupTitle}, mit ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} Option`,other:()=>`${e.number(t.groupCount)} Optionen`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", ausgewählt",other:""},t.isSelected)}`,listboxLabel:"Empfehlungen",selectedAnnouncement:t=>`${t.optionText}, ausgewählt`};var Oc={};Oc={buttonLabel:"Προβολή προτάσεων",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} επιλογή`,other:()=>`${e.number(t.optionCount)} επιλογές `})} διαθέσιμες.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Εισαγμένη ομάδα ${t.groupTitle}, με ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} επιλογή`,other:()=>`${e.number(t.groupCount)} επιλογές`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", επιλεγμένο",other:""},t.isSelected)}`,listboxLabel:"Προτάσεις",selectedAnnouncement:t=>`${t.optionText}, επιλέχθηκε`};var Vc={};Vc={focusAnnouncement:(t,e)=>`${e.select({true:()=>`Entered group ${t.groupTitle}, with ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} option`,other:()=>`${e.number(t.groupCount)} options`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", selected",other:""},t.isSelected)}`,countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} option`,other:()=>`${e.number(t.optionCount)} options`})} available.`,selectedAnnouncement:t=>`${t.optionText}, selected`,buttonLabel:"Show suggestions",listboxLabel:"Suggestions"};var jc={};jc={buttonLabel:"Mostrar sugerencias",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opción`,other:()=>`${e.number(t.optionCount)} opciones`})} disponible(s).`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Se ha unido al grupo ${t.groupTitle}, con ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opción`,other:()=>`${e.number(t.groupCount)} opciones`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", seleccionado",other:""},t.isSelected)}`,listboxLabel:"Sugerencias",selectedAnnouncement:t=>`${t.optionText}, seleccionado`};var _c={};_c={buttonLabel:"Kuva soovitused",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} valik`,other:()=>`${e.number(t.optionCount)} valikud`})} saadaval.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Sisestatud rühm ${t.groupTitle}, valikuga ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} valik`,other:()=>`${e.number(t.groupCount)} valikud`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", valitud",other:""},t.isSelected)}`,listboxLabel:"Soovitused",selectedAnnouncement:t=>`${t.optionText}, valitud`};var Hc={};Hc={buttonLabel:"Näytä ehdotukset",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} vaihtoehto`,other:()=>`${e.number(t.optionCount)} vaihtoehdot`})} saatavilla.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Mentiin ryhmään ${t.groupTitle}, ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} vaihtoehdon`,other:()=>`${e.number(t.groupCount)} vaihtoehdon`})} kanssa.`,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", valittu",other:""},t.isSelected)}`,listboxLabel:"Ehdotukset",selectedAnnouncement:t=>`${t.optionText}, valittu`};var Wc={};Wc={buttonLabel:"Afficher les suggestions",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} option`,other:()=>`${e.number(t.optionCount)} options`})} disponible(s).`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Groupe ${t.groupTitle} rejoint, avec ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} option`,other:()=>`${e.number(t.groupCount)} options`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", sélectionné(s)",other:""},t.isSelected)}`,listboxLabel:"Suggestions",selectedAnnouncement:t=>`${t.optionText}, sélectionné`};var Uc={};Uc={buttonLabel:"הצג הצעות",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`אפשרות ${e.number(t.optionCount)}`,other:()=>`${e.number(t.optionCount)} אפשרויות`})} במצב זמין.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`נכנס לקבוצה ${t.groupTitle}, עם ${e.plural(t.groupCount,{one:()=>`אפשרות ${e.number(t.groupCount)}`,other:()=>`${e.number(t.groupCount)} אפשרויות`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", נבחר",other:""},t.isSelected)}`,listboxLabel:"הצעות",selectedAnnouncement:t=>`${t.optionText}, נבחר`};var Gc={};Gc={buttonLabel:"Prikaži prijedloge",countAnnouncement:(t,e)=>`Dostupno još: ${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opcija`,other:()=>`${e.number(t.optionCount)} opcije/a`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Unesena skupina ${t.groupTitle}, s ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opcijom`,other:()=>`${e.number(t.groupCount)} opcije/a`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", odabranih",other:""},t.isSelected)}`,listboxLabel:"Prijedlozi",selectedAnnouncement:t=>`${t.optionText}, odabrano`};var qc={};qc={buttonLabel:"Javaslatok megjelenítése",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} lehetőség`,other:()=>`${e.number(t.optionCount)} lehetőség`})} áll rendelkezésre.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Belépett a(z) ${t.groupTitle} csoportba, amely ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} lehetőséget`,other:()=>`${e.number(t.groupCount)} lehetőséget`})} tartalmaz. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", kijelölve",other:""},t.isSelected)}`,listboxLabel:"Javaslatok",selectedAnnouncement:t=>`${t.optionText}, kijelölve`};var Zc={};Zc={buttonLabel:"Mostra suggerimenti",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opzione disponibile`,other:()=>`${e.number(t.optionCount)} opzioni disponibili`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Ingresso nel gruppo ${t.groupTitle}, con ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opzione`,other:()=>`${e.number(t.groupCount)} opzioni`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", selezionato",other:""},t.isSelected)}`,listboxLabel:"Suggerimenti",selectedAnnouncement:t=>`${t.optionText}, selezionato`};var Yc={};Yc={buttonLabel:"候補を表示",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} 個のオプション`,other:()=>`${e.number(t.optionCount)} 個のオプション`})}を利用できます。`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`入力されたグループ ${t.groupTitle}、${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} 個のオプション`,other:()=>`${e.number(t.groupCount)} 個のオプション`})}を含む。`,other:""},t.isGroupChange)}${t.optionText}${e.select({true:"、選択済み",other:""},t.isSelected)}`,listboxLabel:"候補",selectedAnnouncement:t=>`${t.optionText}、選択済み`};var Xc={};Xc={buttonLabel:"제안 사항 표시",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)}개 옵션`,other:()=>`${e.number(t.optionCount)}개 옵션`})}을 사용할 수 있습니다.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`입력한 그룹 ${t.groupTitle}, ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)}개 옵션`,other:()=>`${e.number(t.groupCount)}개 옵션`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", 선택됨",other:""},t.isSelected)}`,listboxLabel:"제안",selectedAnnouncement:t=>`${t.optionText}, 선택됨`};var Jc={};Jc={buttonLabel:"Rodyti pasiūlymus",countAnnouncement:(t,e)=>`Yra ${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} parinktis`,other:()=>`${e.number(t.optionCount)} parinktys (-ių)`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Įvesta grupė ${t.groupTitle}, su ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} parinktimi`,other:()=>`${e.number(t.groupCount)} parinktimis (-ių)`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", pasirinkta",other:""},t.isSelected)}`,listboxLabel:"Pasiūlymai",selectedAnnouncement:t=>`${t.optionText}, pasirinkta`};var Qc={};Qc={buttonLabel:"Rādīt ieteikumus",countAnnouncement:(t,e)=>`Pieejamo opciju skaits: ${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opcija`,other:()=>`${e.number(t.optionCount)} opcijas`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Ievadīta grupa ${t.groupTitle}, ar ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opciju`,other:()=>`${e.number(t.groupCount)} opcijām`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", atlasīta",other:""},t.isSelected)}`,listboxLabel:"Ieteikumi",selectedAnnouncement:t=>`${t.optionText}, atlasīta`};var ed={};ed={buttonLabel:"Vis forslag",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} alternativ`,other:()=>`${e.number(t.optionCount)} alternativer`})} finnes.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Angitt gruppe ${t.groupTitle}, med ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} alternativ`,other:()=>`${e.number(t.groupCount)} alternativer`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", valgt",other:""},t.isSelected)}`,listboxLabel:"Forslag",selectedAnnouncement:t=>`${t.optionText}, valgt`};var td={};td={buttonLabel:"Suggesties weergeven",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} optie`,other:()=>`${e.number(t.optionCount)} opties`})} beschikbaar.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Groep ${t.groupTitle} ingevoerd met ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} optie`,other:()=>`${e.number(t.groupCount)} opties`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", geselecteerd",other:""},t.isSelected)}`,listboxLabel:"Suggesties",selectedAnnouncement:t=>`${t.optionText}, geselecteerd`};var nd={};nd={buttonLabel:"Wyświetlaj sugestie",countAnnouncement:(t,e)=>`dostępna/dostępne(-nych) ${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opcja`,other:()=>`${e.number(t.optionCount)} opcje(-i)`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Dołączono do grupy ${t.groupTitle}, z ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opcją`,other:()=>`${e.number(t.groupCount)} opcjami`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", wybrano",other:""},t.isSelected)}`,listboxLabel:"Sugestie",selectedAnnouncement:t=>`${t.optionText}, wybrano`};var ld={};ld={buttonLabel:"Mostrar sugestões",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opção`,other:()=>`${e.number(t.optionCount)} opções`})} disponível.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Grupo inserido ${t.groupTitle}, com ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opção`,other:()=>`${e.number(t.groupCount)} opções`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", selecionado",other:""},t.isSelected)}`,listboxLabel:"Sugestões",selectedAnnouncement:t=>`${t.optionText}, selecionado`};var rd={};rd={buttonLabel:"Apresentar sugestões",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opção`,other:()=>`${e.number(t.optionCount)} opções`})} disponível.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Grupo introduzido ${t.groupTitle}, com ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opção`,other:()=>`${e.number(t.groupCount)} opções`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", selecionado",other:""},t.isSelected)}`,listboxLabel:"Sugestões",selectedAnnouncement:t=>`${t.optionText}, selecionado`};var od={};od={buttonLabel:"Afișare sugestii",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opțiune`,other:()=>`${e.number(t.optionCount)} opțiuni`})} disponibile.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Grup ${t.groupTitle} introdus, cu ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opțiune`,other:()=>`${e.number(t.groupCount)} opțiuni`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", selectat",other:""},t.isSelected)}`,listboxLabel:"Sugestii",selectedAnnouncement:t=>`${t.optionText}, selectat`};var id={};id={buttonLabel:"Показать предложения",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} параметр`,other:()=>`${e.number(t.optionCount)} параметров`})} доступно.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Введенная группа ${t.groupTitle}, с ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} параметром`,other:()=>`${e.number(t.groupCount)} параметрами`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", выбранными",other:""},t.isSelected)}`,listboxLabel:"Предложения",selectedAnnouncement:t=>`${t.optionText}, выбрано`};var ud={};ud={buttonLabel:"Zobraziť návrhy",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} možnosť`,other:()=>`${e.number(t.optionCount)} možnosti/-í`})} k dispozícii.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Zadaná skupina ${t.groupTitle}, s ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} možnosťou`,other:()=>`${e.number(t.groupCount)} možnosťami`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", vybraté",other:""},t.isSelected)}`,listboxLabel:"Návrhy",selectedAnnouncement:t=>`${t.optionText}, vybraté`};var ad={};ad={buttonLabel:"Prikaži predloge",countAnnouncement:(t,e)=>`Na voljo je ${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opcija`,other:()=>`${e.number(t.optionCount)} opcije`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Vnesena skupina ${t.groupTitle}, z ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opcija`,other:()=>`${e.number(t.groupCount)} opcije`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", izbrano",other:""},t.isSelected)}`,listboxLabel:"Predlogi",selectedAnnouncement:t=>`${t.optionText}, izbrano`};var sd={};sd={buttonLabel:"Prikaži predloge",countAnnouncement:(t,e)=>`Dostupno još: ${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} opcija`,other:()=>`${e.number(t.optionCount)} opcije/a`})}.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Unesena grupa ${t.groupTitle}, s ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} opcijom`,other:()=>`${e.number(t.groupCount)} optione/a`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", izabranih",other:""},t.isSelected)}`,listboxLabel:"Predlozi",selectedAnnouncement:t=>`${t.optionText}, izabrano`};var cd={};cd={buttonLabel:"Visa förslag",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} alternativ`,other:()=>`${e.number(t.optionCount)} alternativ`})} tillgängliga.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Ingick i gruppen ${t.groupTitle} med ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} alternativ`,other:()=>`${e.number(t.groupCount)} alternativ`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", valda",other:""},t.isSelected)}`,listboxLabel:"Förslag",selectedAnnouncement:t=>`${t.optionText}, valda`};var dd={};dd={buttonLabel:"Önerileri göster",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} seçenek`,other:()=>`${e.number(t.optionCount)} seçenekler`})} kullanılabilir.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Girilen grup ${t.groupTitle}, ile ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} seçenek`,other:()=>`${e.number(t.groupCount)} seçenekler`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", seçildi",other:""},t.isSelected)}`,listboxLabel:"Öneriler",selectedAnnouncement:t=>`${t.optionText}, seçildi`};var fd={};fd={buttonLabel:"Показати пропозиції",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} параметр`,other:()=>`${e.number(t.optionCount)} параметри(-ів)`})} доступно.`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`Введена група ${t.groupTitle}, з ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} параметр`,other:()=>`${e.number(t.groupCount)} параметри(-ів)`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", вибрано",other:""},t.isSelected)}`,listboxLabel:"Пропозиції",selectedAnnouncement:t=>`${t.optionText}, вибрано`};var pd={};pd={buttonLabel:"显示建议",countAnnouncement:(t,e)=>`有 ${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} 个选项`,other:()=>`${e.number(t.optionCount)} 个选项`})}可用。`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`进入了 ${t.groupTitle} 组,其中有 ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} 个选项`,other:()=>`${e.number(t.groupCount)} 个选项`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", 已选择",other:""},t.isSelected)}`,listboxLabel:"建议",selectedAnnouncement:t=>`${t.optionText}, 已选择`};var bd={};bd={buttonLabel:"顯示建議",countAnnouncement:(t,e)=>`${e.plural(t.optionCount,{one:()=>`${e.number(t.optionCount)} 選項`,other:()=>`${e.number(t.optionCount)} 選項`})} 可用。`,focusAnnouncement:(t,e)=>`${e.select({true:()=>`輸入的群組 ${t.groupTitle}, 有 ${e.plural(t.groupCount,{one:()=>`${e.number(t.groupCount)} 選項`,other:()=>`${e.number(t.groupCount)} 選項`})}. `,other:""},t.isGroupChange)}${t.optionText}${e.select({true:", 已選取",other:""},t.isSelected)}`,listboxLabel:"建議",selectedAnnouncement:t=>`${t.optionText}, 已選取`};var hd={};hd={"ar-AE":Ic,"bg-BG":Fc,"cs-CZ":Lc,"da-DK":zc,"de-DE":Nc,"el-GR":Oc,"en-US":Vc,"es-ES":jc,"et-EE":_c,"fi-FI":Hc,"fr-FR":Wc,"he-IL":Uc,"hr-HR":Gc,"hu-HU":qc,"it-IT":Zc,"ja-JP":Yc,"ko-KR":Xc,"lt-LT":Jc,"lv-LV":Qc,"nb-NO":ed,"nl-NL":td,"pl-PL":nd,"pt-BR":ld,"pt-PT":rd,"ro-RO":od,"ru-RU":id,"sk-SK":ud,"sl-SI":ad,"sr-SP":sd,"sv-SE":cd,"tr-TR":dd,"uk-UA":fd,"zh-CN":pd,"zh-TW":bd};function R3(t){return t&&t.__esModule?t.default:t}function M3(t,e){let{buttonRef:n,popoverRef:l,inputRef:r,listBoxRef:o,keyboardDelegate:i,layoutDelegate:u,shouldFocusWrap:a,isReadOnly:c,isDisabled:f}=t,d=s.useRef(null);n=n??d;let b=Ne(R3(hd),"@react-aria/combobox"),{menuTriggerProps:p,menuProps:h}=om({type:"listbox",isDisabled:f||c},e,n);dl.set(e,{id:h.id});let{collection:$}=e,{disabledKeys:y}=e.selectionManager,m=s.useMemo(()=>i||new sl({collection:$,disabledKeys:y,ref:o,layoutDelegate:u}),[i,u,$,y,o]),{collectionProps:v}=Vr({selectionManager:e.selectionManager,keyboardDelegate:m,disallowTypeAhead:!0,disallowEmptySelection:!0,shouldFocusWrap:a,ref:r,isVirtualized:!0}),E=Nt(),C=L=>{if(!L.nativeEvent.isComposing)switch(L.key){case"Enter":case"Tab":if(e.isOpen&&L.key==="Enter"&&L.preventDefault(),e.isOpen&&o.current&&e.selectionManager.focusedKey!=null){let Y=e.collection.getItem(e.selectionManager.focusedKey);if(Y!=null&&Y.props.href){let ue=o.current.querySelector(`[data-key="${CSS.escape(e.selectionManager.focusedKey.toString())}"]`);L.key==="Enter"&&ue instanceof HTMLAnchorElement&&E.open(ue,L,Y.props.href,Y.props.routerOptions),e.close();break}else if(Y!=null&&Y.props.onAction){Y.props.onAction(),e.close();break}}(L.key==="Enter"||e.isOpen)&&e.commit();break;case"Escape":(!e.selectionManager.isEmpty||e.inputValue===""||t.allowsCustomValue)&&L.continuePropagation(),e.revert();break;case"ArrowDown":e.open("first","manual");break;case"ArrowUp":e.open("last","manual");break;case"ArrowLeft":case"ArrowRight":e.selectionManager.setFocusedKey(null);break}},R=L=>{let Y=(n==null?void 0:n.current)&&n.current===L.relatedTarget,ue=te(l.current,L.relatedTarget);Y||ue||(t.onBlur&&t.onBlur(L),e.setFocused(!1))},A=L=>{e.isFocused||(t.onFocus&&t.onFocus(L),e.setFocused(!0))},K=I3([e.selectionManager.selectedKeys,e.selectionManager.selectionMode]),{isInvalid:P,validationErrors:z,validationDetails:B}=e.displayValidation,{labelProps:N,inputProps:U,descriptionProps:_,errorMessageProps:x}=Mc({...t,isRequired:t.selectionMode==="multiple"?t.isRequired&&e.selectionManager.isEmpty:t.isRequired,onChange:e.setInputValue,onKeyDown:c?t.onKeyDown:dt(e.isOpen&&v.onKeyDown,C,t.onKeyDown),onBlur:R,value:e.inputValue,defaultValue:e.defaultInputValue,onFocus:A,autoComplete:"off",validate:void 0,[bn]:e,"aria-describedby":[K,t["aria-describedby"]].filter(Boolean).join(" ")||void 0},r);xr(r,e.defaultValue,e.setValue);let S=L=>{var Y;L.pointerType==="touch"&&((Y=r.current)==null||Y.focus(),e.toggle(null,"manual"))},I=L=>{var Y;L.pointerType!=="touch"&&((Y=r.current)==null||Y.focus(),e.toggle(L.pointerType==="keyboard"||L.pointerType==="virtual"?"first":null,"manual"))},w=un({id:p.id,"aria-label":b.format("buttonLabel"),"aria-labelledby":t["aria-labelledby"]||N.id}),k=un({id:h.id,"aria-label":b.format("listboxLabel"),"aria-labelledby":t["aria-labelledby"]||N.id}),D=s.useRef(0),T=L=>{var wt,Sn;if(f||c)return;if(L.timeStamp-D.current<500){L.preventDefault(),(wt=r.current)==null||wt.focus();return}let Y=j(L).getBoundingClientRect(),ue=L.changedTouches[0],Ke=Math.ceil(Y.left+.5*Y.width),hl=Math.ceil(Y.top+.5*Y.height);ue.clientX===Ke&&ue.clientY===hl&&(L.preventDefault(),(Sn=r.current)==null||Sn.focus(),e.toggle(null,"manual"),D.current=L.timeStamp)},O=e.selectionManager.focusedKey!=null&&e.isOpen?e.collection.getItem(e.selectionManager.focusedKey):void 0,Z=(O==null?void 0:O.parentKey)??null,F=e.selectionManager.focusedKey??null,V=s.useRef(Z),q=s.useRef(F);s.useEffect(()=>{if(Fn()&&O!=null&&F!=null&&F!==q.current){let L=e.selectionManager.isSelected(F),Y=Z!=null?e.collection.getItem(Z):null,ue=(Y==null?void 0:Y["aria-label"])||(typeof(Y==null?void 0:Y.rendered)=="string"?Y.rendered:"")||"",Ke=b.format("focusAnnouncement",{isGroupChange:(Y&&Z!==V.current)??!1,groupTitle:ue,groupCount:Y?[...Ce(Y,e.collection)].length:0,optionText:O["aria-label"]||O.textValue||"",isSelected:L});gt(Ke)}V.current=Z,q.current=F});let Q=As(e.collection),J=s.useRef(Q),ge=s.useRef(e.isOpen);s.useEffect(()=>{let L=e.isOpen!==ge.current&&(e.selectionManager.focusedKey==null||Fn());if(e.isOpen&&(L||Q!==J.current)){let Y=b.format("countAnnouncement",{optionCount:Q});gt(Y)}J.current=Q,ge.current=e.isOpen});let Be=s.useRef(e.selectedKey);return s.useEffect(()=>{if(Fn()&&e.isFocused&&e.selectedItem&&e.selectedKey!==Be.current){let L=e.selectedItem["aria-label"]||e.selectedItem.textValue||"",Y=b.format("selectedAnnouncement",{optionText:L});gt(Y)}Be.current=e.selectedKey}),s.useEffect(()=>{if(e.isOpen)return Rr([r.current,l.current].filter(L=>L!=null))},[e.isOpen,r,l]),$r(()=>{!O&&r.current&&oe(re(r.current))===r.current&&Or(r.current,null)},[O]),Yt(o,"react-aria-item-action",e.isOpen?()=>{e.close()}:void 0),{labelProps:N,buttonProps:{...p,...w,excludeFromTabOrder:!0,preventFocusOnPress:!0,onPress:S,onPressStart:I,isDisabled:f||c},inputProps:G(U,{role:"combobox","aria-expanded":p["aria-expanded"],"aria-controls":e.isOpen?h.id:void 0,"aria-autocomplete":"list","aria-activedescendant":O?$c(e,O.key):void 0,onTouchEnd:T,autoCorrect:"off",spellCheck:"false"}),listBoxProps:G(h,k,{autoFocus:e.focusStrategy||!0,shouldUseVirtualFocus:!0,shouldSelectOnPressUp:!0,shouldFocusOnHover:!0,linkBehavior:"selection",UNSTABLE_itemBehavior:"action"}),valueProps:{id:K},descriptionProps:_,errorMessageProps:x,isInvalid:P,validationErrors:z,validationDetails:B}}function I3(t=[]){let e=$e(),[n,l]=s.useState(!0),[r,o]=s.useState(t);return r.some((i,u)=>!Object.is(i,t[u]))&&(l(!0),o(t)),s.useEffect(()=>{n&&!document.getElementById(e)&&l(!1)},[e,n,r]),n?e:void 0}function F3(t){var go;let{defaultFilter:e,menuTrigger:n="input",allowsEmptyCollection:l=!1,allowsCustomValue:r,shouldCloseOnBlur:o=!0,selectionMode:i="single"}=t,[u,a]=s.useState(!1),[c,f]=s.useState(!1),[d,b]=s.useState(null),p=s.useMemo(()=>t.defaultValue!==void 0?t.defaultValue:i==="single"?t.defaultSelectedKey??null:[],[t.defaultValue,t.defaultSelectedKey,i]),h=s.useMemo(()=>t.value!==void 0?t.value:i==="single"?t.selectedKey:void 0,[t.value,t.selectedKey,i]),[$,y]=Ct(h,p,t.onChange),m=i==="single"&&Array.isArray($)?$[0]:$,v=X=>{var se;if(i==="single"){let be=Array.isArray(X)?X[0]??null:X;y(be),be!==m&&((se=t.onSelectionChange)==null||se.call(t,be))}else{let be=[];Array.isArray(X)?be=X:X!=null&&(be=[X]),y(be)}},{collection:E,selectionManager:C,disabledKeys:R}=vc({...t,items:t.items??t.defaultItems,selectionMode:i,disallowEmptySelection:i==="single",allowDuplicateSelectionEvents:!0,selectedKeys:s.useMemo(()=>z3(m),[m]),onSelectionChange:X=>{var se;if(X!=="all")if(i==="single"){let be=X.values().next().value??null;be===m?((se=t.onSelectionChange)==null||se.call(t,be),Q(),F()):v(be)}else v([...X])}}),A=i==="single"?C.firstSelectedKey:null,K=s.useMemo(()=>[...C.selectedKeys].map(X=>E.getItem(X)).filter(X=>X!=null),[C.selectedKeys,E]),[P,z]=Ct(t.inputValue,Mi(t.defaultInputValue,A,E)||"",t.onInputChange),[B]=s.useState(m),[N]=s.useState(P),U=E,_=s.useMemo(()=>t.items!=null||!e?E:L3(E,P,e),[E,P,e,t.items]),[x,S]=s.useState(_),I=s.useRef("focus"),k=il({...t,onOpenChange:X=>{t.onOpenChange&&t.onOpenChange(X,X?I.current:void 0),C.setFocused(X),X||C.setFocusedKey(null)},isOpen:void 0,defaultOpen:void 0}),D=(X=null,se)=>{let be=se==="manual"||se==="focus"&&n==="focus";(l||_.size>0||be&&U.size>0||t.items)&&(be&&!k.isOpen&&t.items===void 0&&a(!0),I.current=se,b(X),k.open())},T=(X=null,se)=>{let be=se==="manual"||se==="focus"&&n==="focus";!(l||_.size>0||be&&U.size>0||t.items)&&!k.isOpen||(be&&!k.isOpen&&t.items===void 0&&a(!0),k.isOpen||(I.current=se),Z(X))},O=s.useCallback(()=>{S(u?U:_)},[u,U,_]),Z=s.useCallback((X=null)=>{k.isOpen&&O(),b(X),k.toggle()},[k,O]),F=s.useCallback(()=>{k.isOpen&&(O(),k.close())},[k,O]),[V,q]=s.useState(P),Q=()=>{var se;let X=A!=null?((se=E.getItem(A))==null?void 0:se.textValue)??"":"";q(X),z(X)},J=s.useRef(m),ge=s.useRef(A!=null?((go=E.getItem(A))==null?void 0:go.textValue)??"":"");s.useEffect(()=>{var se;c&&(_.size>0||l)&&!k.isOpen&&P!==V&&n!=="manual"&&D(null,"input"),!u&&!l&&k.isOpen&&_.size===0&&F(),m!=null&&m!==J.current&&i==="single"&&F(),P!==V&&(C.setFocusedKey(null),a(!1),i==="single"&&P===""&&(t.inputValue===void 0||h===void 0)&&v(null)),m!==J.current&&(t.inputValue===void 0||h===void 0)?Q():V!==P&&q(P);let X=A!=null?((se=E.getItem(A))==null?void 0:se.textValue)??"":"";!c&&A!=null&&t.inputValue===void 0&&A===J.current&&ge.current!==X&&(q(X),z(X)),J.current=m,ge.current=X});let Be=Om({...t,value:s.useMemo(()=>Array.isArray(m)&&m.length===0?null:{inputValue:P,value:m,selectedKey:A},[P,A,m])}),L=()=>{r&&A==null?Y():ue()},Y=()=>{if(i==="multiple"){q(P),F();return}let X=null;J.current=X,v(X),F()},ue=(X=!1)=>{var se,be,yo;if(h!==void 0&&t.inputValue!==void 0){let $o=A!=null?((se=E.getItem(A))==null?void 0:se.textValue)??"":"";(X||i==="multiple"||P!==$o)&&((be=t.onSelectionChange)==null||be.call(t,A),(yo=t.onChange)==null||yo.call(t,m)),q($o),F()}else Q(),F()};const Ke=()=>{var X;if(r){const se=A!=null?((X=E.getItem(A))==null?void 0:X.textValue)??"":"";P===se?ue():Y()}else ue()};let hl=()=>{k.isOpen&&C.focusedKey!=null?C.isSelected(C.focusedKey)&&i==="single"?ue(!0):C.select(C.focusedKey):Ke()},wt=s.useRef([P,m]),Sn=X=>{X?(wt.current=[P,m],n==="focus"&&!t.isReadOnly&&D(null,"focus")):(o&&Ke(),(P!==wt.current[0]||m!==wt.current[1])&&Be.commitValidation()),f(X)},ip=s.useMemo(()=>k.isOpen?u?U:_:x,[k.isOpen,U,_,u,x]),mo=t.defaultSelectedKey??(i==="single"?B:null);return{...Be,...k,focusStrategy:d,toggle:T,open:D,close:Ke,selectionManager:C,value:m,defaultValue:p??B,setValue:v,selectedKey:A,selectedItems:K,defaultSelectedKey:mo,setSelectedKey:v,disabledKeys:R,isFocused:c,setFocused:Sn,selectedItem:K[0]??null,collection:ip,inputValue:P,defaultInputValue:Mi(t.defaultInputValue,mo,E)??N,setInputValue:z,commit:hl,revert:L}}function L3(t,e,n){return new ar(md(t,t,e,n))}function md(t,e,n,l){let r=[];for(let o of e)if(o.type==="section"&&o.hasChildNodes){let i=md(t,Zn(o,t),n,l);[...i].some(u=>u.type==="item")&&r.push({...o,childNodes:i})}else o.type==="item"&&l(o.textValue,n)?r.push({...o}):o.type!=="item"&&r.push({...o});return r}function Mi(t,e,n){var l;return t==null&&e!=null?((l=n.getItem(e))==null?void 0:l.textValue)??"":t}function z3(t){if(t!==void 0)return t===null?[]:Array.isArray(t)?t:[t]}const N3=s.createContext(null),gd=s.createContext(null),O3=gn(function(e,n){[e,n]=xe(e,n,N3);let{children:l,isDisabled:r=!1,isInvalid:o=!1,isRequired:i=!1,isReadOnly:u=!1}=e,a=s.useMemo(()=>g.createElement(fl.Provider,{value:{items:e.items??e.defaultItems}},typeof l=="function"?l({isOpen:!1,isDisabled:r,isInvalid:o,isRequired:i,defaultChildren:null,isReadOnly:u}):l),[l,r,o,i,u,e.items,e.defaultItems]);return g.createElement(zr,{content:a},c=>g.createElement(j3,{props:e,collection:c,comboBoxRef:n}))}),V3=[tl,yn,pl,Ur,Cn];function j3({props:t,collection:e,comboBoxRef:n}){let{name:l,formValue:r="key",allowsCustomValue:o}=t;o&&(r="text");let{validationBehavior:i}=el(Gr)||{},u=t.validationBehavior??i??"native",{contains:a}=zm({sensitivity:"base"}),c=F3({...t,defaultFilter:t.defaultFilter||a,items:t.items,children:void 0,collection:e,validationBehavior:u}),f=s.useRef(null),d=s.useRef(null),b=s.useRef(null),p=s.useRef(null),h=s.useRef(null),[$,y]=Dr(!t["aria-label"]&&!t["aria-labelledby"]),{buttonProps:m,inputProps:v,listBoxProps:E,labelProps:C,descriptionProps:R,errorMessageProps:A,valueProps:K,...P}=M3({...kr(t),label:y,inputRef:d,buttonRef:f,listBoxRef:p,popoverRef:h,name:r==="text"?l:void 0,validationBehavior:u},c),[z,B]=s.useState(null),N=s.useCallback(()=>{var w;if(d.current&&!b.current){let k=(w=f.current)==null?void 0:w.getBoundingClientRect(),D=d.current.getBoundingClientRect(),T=k?Math.min(k.left,D.left):D.left,O=k?Math.max(k.right,D.right):D.right;B(O-T+"px")}},[f,d,B]);an({ref:d,onResize:N});let U=s.useMemo(()=>({get current(){return b.current||d.current}}),[b,d]),_=s.useMemo(()=>({isOpen:c.isOpen,isDisabled:t.isDisabled||!1,isInvalid:P.isInvalid||!1,isRequired:t.isRequired||!1,isReadOnly:t.isReadOnly||!1}),[c.isOpen,t.isDisabled,P.isInvalid,t.isRequired,t.isReadOnly]),x=ce({...t,values:_,defaultClassName:"react-aria-ComboBox"}),S=ie(t,{global:!0});delete S.id;let I=[];if(l&&r==="key"){let w=Array.isArray(c.value)?c.value:[c.value];w.length===0&&(w=[null]),I=w.map((k,D)=>g.createElement("input",{key:D,type:"hidden",name:l,form:t.form,value:k??""}))}return g.createElement(_e,{values:[[gd,c],[tl,{...C,ref:$}],[yn,{...m,ref:f,isPressed:c.isOpen}],[pl,{...v,ref:d}],[Et,c],[Fr,{ref:h,triggerRef:U,scrollRef:p,placement:"bottom start",isNonModal:!0,trigger:"ComboBox",style:{"--trigger-width":z},clearContexts:V3}],[fl,{...E,ref:p}],[_t,c],[Cn,{slots:{description:R,errorMessage:A}}],[Ur,{ref:b,isInvalid:P.isInvalid,isDisabled:t.isDisabled||!1}],[Ms,P],[_3,K]]},g.createElement(le.div,{...S,...x,ref:n,slot:t.slot||void 0,"data-focused":c.isFocused||void 0,"data-open":c.isOpen||void 0,"data-disabled":t.isDisabled||void 0,"data-readonly":t.isReadOnly||void 0,"data-invalid":P.isInvalid||void 0,"data-required":t.isRequired||void 0},x.children,I))}const _3=s.createContext(null),wn=s.createContext({}),Ii=({children:t,className:e,fullWidth:n,menuTrigger:l="focus",variant:r,...o})=>{const i=g.useMemo(()=>lh({fullWidth:n}),[n]);return M.jsx(wn,{value:{slots:i,variant:r},children:M.jsx(O3,{"data-slot":"combo-box",menuTrigger:l,...o,className:me(e,i==null?void 0:i.base()),children:u=>M.jsx(M.Fragment,{children:typeof t=="function"?t(u):t})})})},H3=({children:t,className:e,...n})=>{const{slots:l}=s.useContext(wn),r=de(l==null?void 0:l.inputGroup,e);return M.jsx("div",{className:r,"data-slot":"combo-box-input-group",...n,children:t})},W3=({children:t,className:e,...n})=>{const{slots:l}=s.useContext(wn),r=s.useContext(gd);return M.jsx(Kr,{className:me(e,l==null?void 0:l.trigger()),"data-open":_u(r==null?void 0:r.isOpen),"data-slot":"combo-box-trigger",...n,children:t??M.jsx(Wh,{"data-slot":"combo-box-trigger-default-icon"})})},U3=({children:t,className:e,placement:n="bottom",...l})=>{const{slots:r}=s.useContext(wn);return M.jsx(Hu,{value:{variant:"default"},children:M.jsx(F4,{...l,className:me(e,r==null?void 0:r.popover()),"data-slot":"combo-box-popover",placement:n,children:t})})},v0=Object.assign(Ii,{Root:Ii,InputGroup:H3,Trigger:W3,Popover:U3}),G3=({...t})=>{const e=s.useId();return M.jsxs("svg",{"data-slot":"spinner-icon",viewBox:"0 0 24 24",...t,children:[M.jsxs("defs",{children:[M.jsxs("linearGradient",{id:`«data-slot-icon-def-1»-${e}`,x1:"50%",x2:"50%",y1:"5.271%",y2:"91.793%",children:[M.jsx("stop",{offset:"0%",stopColor:"currentColor"}),M.jsx("stop",{offset:"100%",stopColor:"currentColor",stopOpacity:.55})]}),M.jsxs("linearGradient",{id:`«data-slot-icon-def-2»-${e}`,x1:"50%",x2:"50%",y1:"15.24%",y2:"87.15%",children:[M.jsx("stop",{offset:"0%",stopColor:"currentColor",stopOpacity:0}),M.jsx("stop",{offset:"100%",stopColor:"currentColor",stopOpacity:.55})]})]}),M.jsxs("g",{fill:"none",children:[M.jsx("path",{d:"m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"}),M.jsx("path",{d:"M8.749.021a1.5 1.5 0 0 1 .497 2.958A7.5 7.5 0 0 0 3 10.375a7.5 7.5 0 0 0 7.5 7.5v3c-5.799 0-10.5-4.7-10.5-10.5C0 5.23 3.726.865 8.749.021",fill:`url(#«data-slot-icon-def-1»-${e})`,transform:"translate(1.5 1.625)"}),M.jsx("path",{d:"M15.392 2.673a1.5 1.5 0 0 1 2.119-.115A10.48 10.48 0 0 1 21 10.375c0 5.8-4.701 10.5-10.5 10.5v-3a7.5 7.5 0 0 0 5.007-13.084a1.5 1.5 0 0 1-.115-2.118",fill:`url(#«data-slot-icon-def-2»-${e})`,transform:"translate(1.5 1.625)"})]})]})},Fi=({className:t,color:e,size:n,...l})=>M.jsx(Se.span,{"data-slot":"spinner",...l,className:dh({className:t,color:e,size:n}),children:M.jsx(G3,{"aria-hidden":!0,"aria-label":"Loading",role:"presentation"})}),x0=Object.assign(Fi,{Root:Fi});function q3(t,e){let n=e==null?void 0:e.isDisabled,[l,r]=s.useState(!1);return ne(()=>{if(t!=null&&t.current&&!n){let o=()=>{if(t.current){let u=Fe(t.current,{tabbable:!0});r(!!u.nextNode())}};o();let i=new MutationObserver(o);return i.observe(t.current,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["tabIndex","disabled"]}),()=>{i.disconnect()}}}),n?!1:l}var yd={};yd={deselectedItem:t=>`${t.item} غير المحدد`,longPressToSelect:"اضغط مطولًا للدخول إلى وضع التحديد.",select:"تحديد",selectedAll:"جميع العناصر المحددة.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"لم يتم تحديد عناصر",one:()=>`${e.number(t.count)} عنصر محدد`,other:()=>`${e.number(t.count)} عنصر محدد`})}.`,selectedItem:t=>`${t.item} المحدد`};var $d={};$d={deselectedItem:t=>`${t.item} не е избран.`,longPressToSelect:"Натиснете и задръжте за да влезете в избирателен режим.",select:"Изберете",selectedAll:"Всички елементи са избрани.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Няма избрани елементи",one:()=>`${e.number(t.count)} избран елемент`,other:()=>`${e.number(t.count)} избрани елементи`})}.`,selectedItem:t=>`${t.item} избран.`};var vd={};vd={deselectedItem:t=>`Položka ${t.item} není vybrána.`,longPressToSelect:"Dlouhým stisknutím přejdete do režimu výběru.",select:"Vybrat",selectedAll:"Vybrány všechny položky.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Nevybrány žádné položky",one:()=>`Vybrána ${e.number(t.count)} položka`,other:()=>`Vybráno ${e.number(t.count)} položek`})}.`,selectedItem:t=>`Vybrána položka ${t.item}.`};var xd={};xd={deselectedItem:t=>`${t.item} ikke valgt.`,longPressToSelect:"Lav et langt tryk for at aktivere valgtilstand.",select:"Vælg",selectedAll:"Alle elementer valgt.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Ingen elementer valgt",one:()=>`${e.number(t.count)} element valgt`,other:()=>`${e.number(t.count)} elementer valgt`})}.`,selectedItem:t=>`${t.item} valgt.`};var Cd={};Cd={deselectedItem:t=>`${t.item} nicht ausgewählt.`,longPressToSelect:"Gedrückt halten, um Auswahlmodus zu öffnen.",select:"Auswählen",selectedAll:"Alle Elemente ausgewählt.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Keine Elemente ausgewählt",one:()=>`${e.number(t.count)} Element ausgewählt`,other:()=>`${e.number(t.count)} Elemente ausgewählt`})}.`,selectedItem:t=>`${t.item} ausgewählt.`};var Ed={};Ed={deselectedItem:t=>`Δεν επιλέχθηκε το στοιχείο ${t.item}.`,longPressToSelect:"Πατήστε παρατεταμένα για να μπείτε σε λειτουργία επιλογής.",select:"Επιλογή",selectedAll:"Επιλέχθηκαν όλα τα στοιχεία.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Δεν επιλέχθηκαν στοιχεία",one:()=>`Επιλέχθηκε ${e.number(t.count)} στοιχείο`,other:()=>`Επιλέχθηκαν ${e.number(t.count)} στοιχεία`})}.`,selectedItem:t=>`Επιλέχθηκε το στοιχείο ${t.item}.`};var wd={};wd={deselectedItem:t=>`${t.item} not selected.`,select:"Select",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"No items selected",one:()=>`${e.number(t.count)} item selected`,other:()=>`${e.number(t.count)} items selected`})}.`,selectedAll:"All items selected.",selectedItem:t=>`${t.item} selected.`,longPressToSelect:"Long press to enter selection mode."};var Sd={};Sd={deselectedItem:t=>`${t.item} no seleccionado.`,longPressToSelect:"Mantenga pulsado para abrir el modo de selección.",select:"Seleccionar",selectedAll:"Todos los elementos seleccionados.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Ningún elemento seleccionado",one:()=>`${e.number(t.count)} elemento seleccionado`,other:()=>`${e.number(t.count)} elementos seleccionados`})}.`,selectedItem:t=>`${t.item} seleccionado.`};var Dd={};Dd={deselectedItem:t=>`${t.item} pole valitud.`,longPressToSelect:"Valikurežiimi sisenemiseks vajutage pikalt.",select:"Vali",selectedAll:"Kõik üksused valitud.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Üksusi pole valitud",one:()=>`${e.number(t.count)} üksus valitud`,other:()=>`${e.number(t.count)} üksust valitud`})}.`,selectedItem:t=>`${t.item} valitud.`};var kd={};kd={deselectedItem:t=>`Kohdetta ${t.item} ei valittu.`,longPressToSelect:"Siirry valintatilaan painamalla pitkään.",select:"Valitse",selectedAll:"Kaikki kohteet valittu.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Ei yhtään kohdetta valittu",one:()=>`${e.number(t.count)} kohde valittu`,other:()=>`${e.number(t.count)} kohdetta valittu`})}.`,selectedItem:t=>`${t.item} valittu.`};var Pd={};Pd={deselectedItem:t=>`${t.item} non sélectionné.`,longPressToSelect:"Appuyez de manière prolongée pour passer en mode de sélection.",select:"Sélectionner",selectedAll:"Tous les éléments sélectionnés.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Aucun élément sélectionné",one:()=>`${e.number(t.count)} élément sélectionné`,other:()=>`${e.number(t.count)} éléments sélectionnés`})}.`,selectedItem:t=>`${t.item} sélectionné.`};var Ad={};Ad={deselectedItem:t=>`${t.item} לא נבחר.`,longPressToSelect:"הקשה ארוכה לכניסה למצב בחירה.",select:"בחר",selectedAll:"כל הפריטים נבחרו.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"לא נבחרו פריטים",one:()=>`פריט ${e.number(t.count)} נבחר`,other:()=>`${e.number(t.count)} פריטים נבחרו`})}.`,selectedItem:t=>`${t.item} נבחר.`};var Td={};Td={deselectedItem:t=>`Stavka ${t.item} nije odabrana.`,longPressToSelect:"Dugo pritisnite za ulazak u način odabira.",select:"Odaberite",selectedAll:"Odabrane su sve stavke.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Nije odabrana nijedna stavka",one:()=>`Odabrana je ${e.number(t.count)} stavka`,other:()=>`Odabrano je ${e.number(t.count)} stavki`})}.`,selectedItem:t=>`Stavka ${t.item} je odabrana.`};var Bd={};Bd={deselectedItem:t=>`${t.item} nincs kijelölve.`,longPressToSelect:"Nyomja hosszan a kijelöléshez.",select:"Kijelölés",selectedAll:"Az összes elem kijelölve.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Egy elem sincs kijelölve",one:()=>`${e.number(t.count)} elem kijelölve`,other:()=>`${e.number(t.count)} elem kijelölve`})}.`,selectedItem:t=>`${t.item} kijelölve.`};var Kd={};Kd={deselectedItem:t=>`${t.item} non selezionato.`,longPressToSelect:"Premi a lungo per passare alla modalità di selezione.",select:"Seleziona",selectedAll:"Tutti gli elementi selezionati.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Nessun elemento selezionato",one:()=>`${e.number(t.count)} elemento selezionato`,other:()=>`${e.number(t.count)} elementi selezionati`})}.`,selectedItem:t=>`${t.item} selezionato.`};var Rd={};Rd={deselectedItem:t=>`${t.item} が選択されていません。`,longPressToSelect:"長押しして選択モードを開きます。",select:"選択",selectedAll:"すべての項目を選択しました。",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"項目が選択されていません",one:()=>`${e.number(t.count)} 項目を選択しました`,other:()=>`${e.number(t.count)} 項目を選択しました`})}。`,selectedItem:t=>`${t.item} を選択しました。`};var Md={};Md={deselectedItem:t=>`${t.item}이(가) 선택되지 않았습니다.`,longPressToSelect:"선택 모드로 들어가려면 길게 누르십시오.",select:"선택",selectedAll:"모든 항목이 선택되었습니다.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"선택된 항목이 없습니다",one:()=>`${e.number(t.count)}개 항목이 선택되었습니다`,other:()=>`${e.number(t.count)}개 항목이 선택되었습니다`})}.`,selectedItem:t=>`${t.item}이(가) 선택되었습니다.`};var Id={};Id={deselectedItem:t=>`${t.item} nepasirinkta.`,longPressToSelect:"Norėdami įjungti pasirinkimo režimą, paspauskite ir palaikykite.",select:"Pasirinkti",selectedAll:"Pasirinkti visi elementai.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Nepasirinktas nė vienas elementas",one:()=>`Pasirinktas ${e.number(t.count)} elementas`,other:()=>`Pasirinkta elementų: ${e.number(t.count)}`})}.`,selectedItem:t=>`Pasirinkta: ${t.item}.`};var Fd={};Fd={deselectedItem:t=>`Vienums ${t.item} nav atlasīts.`,longPressToSelect:"Ilgi turiet nospiestu. lai ieslēgtu atlases režīmu.",select:"Atlasīt",selectedAll:"Atlasīti visi vienumi.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Nav atlasīts neviens vienums",one:()=>`Atlasīto vienumu skaits: ${e.number(t.count)}`,other:()=>`Atlasīto vienumu skaits: ${e.number(t.count)}`})}.`,selectedItem:t=>`Atlasīts vienums ${t.item}.`};var Ld={};Ld={deselectedItem:t=>`${t.item} er ikke valgt.`,longPressToSelect:"Bruk et langt trykk for å gå inn i valgmodus.",select:"Velg",selectedAll:"Alle elementer er valgt.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Ingen elementer er valgt",one:()=>`${e.number(t.count)} element er valgt`,other:()=>`${e.number(t.count)} elementer er valgt`})}.`,selectedItem:t=>`${t.item} er valgt.`};var zd={};zd={deselectedItem:t=>`${t.item} niet geselecteerd.`,longPressToSelect:"Druk lang om de selectiemodus te openen.",select:"Selecteren",selectedAll:"Alle items geselecteerd.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Geen items geselecteerd",one:()=>`${e.number(t.count)} item geselecteerd`,other:()=>`${e.number(t.count)} items geselecteerd`})}.`,selectedItem:t=>`${t.item} geselecteerd.`};var Nd={};Nd={deselectedItem:t=>`Nie zaznaczono ${t.item}.`,longPressToSelect:"Naciśnij i przytrzymaj, aby wejść do trybu wyboru.",select:"Zaznacz",selectedAll:"Wszystkie zaznaczone elementy.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Nie zaznaczono żadnych elementów",one:()=>`${e.number(t.count)} zaznaczony element`,other:()=>`${e.number(t.count)} zaznaczonych elementów`})}.`,selectedItem:t=>`Zaznaczono ${t.item}.`};var Od={};Od={deselectedItem:t=>`${t.item} não selecionado.`,longPressToSelect:"Mantenha pressionado para entrar no modo de seleção.",select:"Selecionar",selectedAll:"Todos os itens selecionados.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Nenhum item selecionado",one:()=>`${e.number(t.count)} item selecionado`,other:()=>`${e.number(t.count)} itens selecionados`})}.`,selectedItem:t=>`${t.item} selecionado.`};var Vd={};Vd={deselectedItem:t=>`${t.item} não selecionado.`,longPressToSelect:"Prima continuamente para entrar no modo de seleção.",select:"Selecionar",selectedAll:"Todos os itens selecionados.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Nenhum item selecionado",one:()=>`${e.number(t.count)} item selecionado`,other:()=>`${e.number(t.count)} itens selecionados`})}.`,selectedItem:t=>`${t.item} selecionado.`};var jd={};jd={deselectedItem:t=>`${t.item} neselectat.`,longPressToSelect:"Apăsați lung pentru a intra în modul de selectare.",select:"Selectare",selectedAll:"Toate elementele selectate.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Niciun element selectat",one:()=>`${e.number(t.count)} element selectat`,other:()=>`${e.number(t.count)} elemente selectate`})}.`,selectedItem:t=>`${t.item} selectat.`};var _d={};_d={deselectedItem:t=>`${t.item} не выбрано.`,longPressToSelect:"Нажмите и удерживайте для входа в режим выбора.",select:"Выбрать",selectedAll:"Выбраны все элементы.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Нет выбранных элементов",one:()=>`${e.number(t.count)} элемент выбран`,other:()=>`${e.number(t.count)} элементов выбрано`})}.`,selectedItem:t=>`${t.item} выбрано.`};var Hd={};Hd={deselectedItem:t=>`Nevybraté položky: ${t.item}.`,longPressToSelect:"Dlhším stlačením prejdite do režimu výberu.",select:"Vybrať",selectedAll:"Všetky vybraté položky.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Žiadne vybraté položky",one:()=>`${e.number(t.count)} vybratá položka`,other:()=>`Počet vybratých položiek:${e.number(t.count)}`})}.`,selectedItem:t=>`Vybraté položky: ${t.item}.`};var Wd={};Wd={deselectedItem:t=>`Element ${t.item} ni izbran.`,longPressToSelect:"Za izbirni način pritisnite in dlje časa držite.",select:"Izberite",selectedAll:"Vsi elementi so izbrani.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Noben element ni izbran",one:()=>`${e.number(t.count)} element je izbran`,other:()=>`${e.number(t.count)} elementov je izbranih`})}.`,selectedItem:t=>`Element ${t.item} je izbran.`};var Ud={};Ud={deselectedItem:t=>`${t.item} nije izabrano.`,longPressToSelect:"Dugo pritisnite za ulazak u režim biranja.",select:"Izaberite",selectedAll:"Izabrane su sve stavke.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Nije izabrana nijedna stavka",one:()=>`Izabrana je ${e.number(t.count)} stavka`,other:()=>`Izabrano je ${e.number(t.count)} stavki`})}.`,selectedItem:t=>`${t.item} je izabrano.`};var Gd={};Gd={deselectedItem:t=>`${t.item} ej markerat.`,longPressToSelect:"Tryck länge när du vill öppna väljarläge.",select:"Markera",selectedAll:"Alla markerade objekt.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Inga markerade objekt",one:()=>`${e.number(t.count)} markerat objekt`,other:()=>`${e.number(t.count)} markerade objekt`})}.`,selectedItem:t=>`${t.item} markerat.`};var qd={};qd={deselectedItem:t=>`${t.item} seçilmedi.`,longPressToSelect:"Seçim moduna girmek için uzun basın.",select:"Seç",selectedAll:"Tüm ögeler seçildi.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Hiçbir öge seçilmedi",one:()=>`${e.number(t.count)} öge seçildi`,other:()=>`${e.number(t.count)} öge seçildi`})}.`,selectedItem:t=>`${t.item} seçildi.`};var Zd={};Zd={deselectedItem:t=>`${t.item} не вибрано.`,longPressToSelect:"Виконайте довге натиснення, щоб перейти в режим вибору.",select:"Вибрати",selectedAll:"Усі елементи вибрано.",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"Жодних елементів не вибрано",one:()=>`${e.number(t.count)} елемент вибрано`,other:()=>`Вибрано елементів: ${e.number(t.count)}`})}.`,selectedItem:t=>`${t.item} вибрано.`};var Yd={};Yd={deselectedItem:t=>`未选择 ${t.item}。`,longPressToSelect:"长按以进入选择模式。",select:"选择",selectedAll:"已选择所有项目。",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"未选择项目",one:()=>`已选择 ${e.number(t.count)} 个项目`,other:()=>`已选择 ${e.number(t.count)} 个项目`})}。`,selectedItem:t=>`已选择 ${t.item}。`};var Xd={};Xd={deselectedItem:t=>`未選取「${t.item}」。`,longPressToSelect:"長按以進入選擇模式。",select:"選取",selectedAll:"已選取所有項目。",selectedCount:(t,e)=>`${e.plural(t.count,{"=0":"未選取任何項目",one:()=>`已選取 ${e.number(t.count)} 個項目`,other:()=>`已選取 ${e.number(t.count)} 個項目`})}。`,selectedItem:t=>`已選取「${t.item}」。`};var bl={};bl={"ar-AE":yd,"bg-BG":$d,"cs-CZ":vd,"da-DK":xd,"de-DE":Cd,"el-GR":Ed,"en-US":wd,"es-ES":Sd,"et-EE":Dd,"fi-FI":kd,"fr-FR":Pd,"he-IL":Ad,"hr-HR":Td,"hu-HU":Bd,"it-IT":Kd,"ja-JP":Rd,"ko-KR":Md,"lt-LT":Id,"lv-LV":Fd,"nb-NO":Ld,"nl-NL":zd,"pl-PL":Nd,"pt-BR":Od,"pt-PT":Vd,"ro-RO":jd,"ru-RU":_d,"sk-SK":Hd,"sl-SI":Wd,"sr-SP":Ud,"sv-SE":Gd,"tr-TR":qd,"uk-UA":Zd,"zh-CN":Yd,"zh-TW":Xd};function Z3(t){return t&&t.__esModule?t.default:t}function Y3(t,e){let{getRowText:n=u=>{var a,c,f;return((c=(a=e.collection).getTextValue)==null?void 0:c.call(a,u))??((f=e.collection.getItem(u))==null?void 0:f.textValue)}}=t,l=Ne(Z3(bl),"@react-aria/grid"),r=e.selectionManager.rawSelection,o=s.useRef(r),i=s.useCallback(()=>{var d;if(!e.selectionManager.isFocused||r===o.current){o.current=r;return}let u=Li(r,o.current),a=Li(o.current,r),c=e.selectionManager.selectionBehavior==="replace",f=[];if(e.selectionManager.selectedKeys.size===1&&c){let b=e.selectionManager.selectedKeys.keys().next().value;if(b!=null&&e.collection.getItem(b)){let p=n(b);p&&f.push(l.format("selectedItem",{item:p}))}}else if(u.size===1&&a.size===0){let b=u.keys().next().value;if(b!=null){let p=n(b);p&&f.push(l.format("selectedItem",{item:p}))}}else if(a.size===1&&u.size===0){let b=a.keys().next().value;if(b!=null&&e.collection.getItem(b)){let p=n(b);p&&f.push(l.format("deselectedItem",{item:p}))}}e.selectionManager.selectionMode==="multiple"&&(f.length===0||r==="all"||r.size>1||o.current==="all"||((d=o.current)==null?void 0:d.size)>1)&&f.push(r==="all"?l.format("selectedAll"):l.format("selectedCount",{count:r.size})),f.length>0&>(f.join(" ")),o.current=r},[r,e.selectionManager.selectedKeys,e.selectionManager.isFocused,e.selectionManager.selectionBehavior,e.selectionManager.selectionMode,e.collection,n,l]);$r(()=>{if(e.selectionManager.isFocused)i();else{let u=requestAnimationFrame(i);return()=>cancelAnimationFrame(u)}},[r,e.selectionManager.isFocused])}function Li(t,e){let n=new Set;if(t==="all"||e==="all")return n;for(let l of t.keys())e.has(l)||n.add(l);return n}function X3(t){return t&&t.__esModule?t.default:t}function J3(t){let e=Ne(X3(bl),"@react-aria/grid"),n=Nu(),l=(n==="pointer"||n==="virtual"||n==null)&&typeof window<"u"&&"ontouchstart"in window,r=s.useMemo(()=>{let i=t.selectionManager.selectionMode,u=t.selectionManager.selectionBehavior,a;return l&&(a=e.format("longPressToSelect")),u==="replace"&&i!=="none"&&t.hasItemActions?a:void 0},[t.selectionManager.selectionMode,t.selectionManager.selectionBehavior,t.hasItemActions,e,l]);return mn(r)}const Q3=s.createContext({}),eg=s.createContext(null),tg=gn(function(e,n){[e,n]=xe(e,n,eg);let{validationBehavior:l}=el(Gr)||{},r=e.validationBehavior??l??"native",o=s.useRef(null);[e,o]=xe(e,o,ja);let[i,u]=Dr(!e["aria-label"]&&!e["aria-labelledby"]),[a,c]=s.useState("input"),{labelProps:f,inputProps:d,descriptionProps:b,errorMessageProps:p,...h}=Mc({...kr(e),inputElementType:a,label:u,validationBehavior:r},o),$=s.useCallback(v=>{o.current=v,v&&c(v instanceof HTMLTextAreaElement?"textarea":"input")},[o]),y=ce({...e,values:{isDisabled:e.isDisabled||!1,isInvalid:h.isInvalid,isReadOnly:e.isReadOnly||!1,isRequired:e.isRequired||!1},defaultClassName:"react-aria-TextField"}),m=ie(e,{global:!0});return delete m.id,g.createElement(le.div,{...m,...y,ref:n,slot:e.slot||void 0,"data-disabled":e.isDisabled||void 0,"data-invalid":h.isInvalid||void 0,"data-readonly":e.isReadOnly||void 0,"data-required":e.isRequired||void 0},g.createElement(_e,{values:[[tl,{...f,ref:i}],[pl,{...d,ref:$}],[Q3,{...d,ref:$}],[Ur,{role:"presentation",isInvalid:h.isInvalid,isDisabled:e.isDisabled||!1}],[Cn,{slots:{description:b,errorMessage:p}}],[Ms,h]]},y.children))}),Jd=s.createContext({}),zi=({children:t,className:e,fullWidth:n,variant:l,...r})=>{const o=g.useMemo(()=>ph({fullWidth:n}),[n]);return M.jsx(tg,{"data-slot":"textfield",...r,className:me(e,o),children:i=>M.jsx(Jd,{value:{variant:l},children:M.jsx(M.Fragment,{children:typeof t=="function"?t(i):t})})})},Ni=({className:t,fullWidth:e,variant:n,...l})=>{const r=s.useContext(Jd),o=s.useContext(wn),i=n??r.variant??o.variant;return M.jsx(K3,{className:me(t,oh({fullWidth:e,variant:i})),"data-slot":"input",...l})},C0=Object.assign(Ni,{Root:Ni}),E0=Object.assign(zi,{Root:zi}),Oi=({children:t,className:e,isDisabled:n,isInvalid:l,isRequired:r,...o})=>M.jsx(yh,{className:ih({isRequired:r,isDisabled:n,isInvalid:l,className:e}),"data-slot":"label",...o,children:t}),w0=Object.assign(Oi,{Root:Oi}),Vi=({children:t,className:e,...n})=>M.jsx(nm,{className:rh({className:e}),"data-slot":"description",slot:"description",...n,children:t}),S0=Object.assign(Vi,{Root:Vi});function ng(t){return t&&t.__esModule?t.default:t}function lg(t,e){let{key:n}=t,l=e.selectionManager,r=$e(),o=!e.selectionManager.canSelectItem(n),i=e.selectionManager.isSelected(n),u=()=>l.toggleSelection(n);const a=Ne(ng(bl),"@react-aria/grid");return{checkboxProps:{id:r,"aria-label":a.format("select"),isSelected:i,isDisabled:o,onChange:u}}}const ji=10,_i=5;class rg{setup(e,n,l){this.delegate=e,this.state=n,this.direction=l}getDropTargetFromPoint(e,n,l){let r=this.delegate.getDropTargetFromPoint(e,n,l);return!r||r.type==="root"?r:this.resolveDropTarget(r,e,n,l)}resolveDropTarget(e,n,l,r){let o=this.pointerTracking,i=l-o.lastY,u=n-o.lastX,a=o.yDirection,c=o.xDirection;if(Math.abs(i)>_i&&(a=i>0?"down":"up",o.yDirection=a,o.lastY=l),Math.abs(u)>ji&&(c=u>0?"right":"left",o.xDirection=c,o.lastX=n),e.dropPosition==="before"){let b=this.state.collection.getKeyBefore(e.key);for(;b!=null;){let p=this.state.collection.getItem(b);if((p==null?void 0:p.type)==="item")break;b=(p==null?void 0:p.parentKey)??null}if(b!=null){let p={type:"item",key:b,dropPosition:"after"};r(p)&&(e=p)}}let f=this.getPotentialTargets(e,r);if(f.length===0)return{type:"root"};let d;return f.length>1?d=this.selectTarget(f,e,n,l,a,c):(d=f[0],o.boundaryContext=null),d}getPotentialTargets(e,n){if(e.dropPosition==="on")return[e];let l=e,r=this.state.collection,o=r.getItem(l.key);for(;o&&(o==null?void 0:o.type)!=="item"&&o.nextKey!=null;)l.key=o.nextKey,o=r.getItem(o.nextKey);let i=[l];if(o&&o.hasChildNodes&&this.state.expandedKeys.has(o.key)&&r.getChildren&&l.dropPosition==="after"){let c=o.firstChildKey!=null?r.getItem(o.firstChildKey):null;for(;c&&c.type!=="item";)c=c.nextKey!=null?r.getItem(c.nextKey):null;if((c==null?void 0:c.type)==="item"){const f={type:"item",key:c.key,dropPosition:"before"};return n(f)?[f]:[]}}if((o==null?void 0:o.nextKey)!=null)return[e];let u=o==null?void 0:o.parentKey,a=[];for(;u!=null;){let c=r.getItem(u),f=(c==null?void 0:c.nextKey)!=null?r.getItem(c.nextKey):null;if(!f||f.parentKey!==u){let b={type:"item",key:u,dropPosition:"after"};if(n(b)&&a.push(b),f)break}u=c==null?void 0:c.parentKey}if(a.length>0&&i.push(...a),i.length===1){let c=r.getKeyAfter(l.key),f=c!=null?r.getItem(c):null;if(c!=null&&f&&o&&f.level!=null&&o.level!=null&&f.level>o.level){let d={type:"item",key:c,dropPosition:"before"};if(n(d))return[d]}}return i.filter(n)}selectTarget(e,n,l,r,o,i){if(e.length<2)return e[0];let u=this.pointerTracking,a=this.state.collection.getItem(n.key),c=a==null?void 0:a.parentKey;if(c==null)return e[0];if(!u.boundaryContext||u.boundaryContext.parentKey!==c){let h=u.yDirection==="up"?e.length-1:0;u.boundaryContext={parentKey:c,preferredTargetIndex:h,lastSwitchY:r,lastSwitchX:l}}let f=u.boundaryContext,d=Math.abs(l-f.lastSwitchX);if(Math.abs(r-f.lastSwitchY)>_i&&o){let h=f.preferredTargetIndex||0;o==="down"&&h===0?f.preferredTargetIndex=e.length-1:o==="up"&&h===e.length-1&&(f.preferredTargetIndex=0),u.xDirection=null}if(d>ji&&i){let h=f.preferredTargetIndex||0;i==="left"?this.direction==="ltr"?h0&&(f.preferredTargetIndex=h-1,f.lastSwitchX=l):i==="right"&&(this.direction==="ltr"?h>0&&(f.preferredTargetIndex=h-1,f.lastSwitchX=l):h{var f,d,b;let i=this.keyMap.get(o.key);e.visitNode&&(o=e.visitNode(o)),this.keyMap.set(o.key,o);let u=new Set,a=null,c=!1;if(o.type==="item"){for(let p of o.childNodes)if(((f=p.props)==null?void 0:f.colSpan)!==void 0){c=!0;break}}for(let p of o.childNodes)p.type==="cell"&&c&&(p.colspan=(d=p.props)==null?void 0:d.colSpan,p.colSpan=(b=p.props)==null?void 0:b.colSpan,p.colIndex=a?(a.colIndex??a.index)+(a.colSpan??1):p.index),p.type==="cell"&&p.parentKey==null&&(p.parentKey=o.key),u.add(p.key),a?(a.nextKey=p.key,p.prevKey=a.key):p.prevKey=null,n(p),a=p;if(a&&(a.nextKey=null),i)for(let p of i.childNodes)u.has(p.key)||l(p)},l=o=>{this.keyMap.delete(o.key);for(let i of o.childNodes)this.keyMap.get(i.key)===i&&l(i)},r=null;for(let[o,i]of e.items.entries()){let u={...i,level:i.level??0,key:i.key??"row-"+o,type:i.type??"row",value:i.value??null,hasChildNodes:!0,childNodes:[...i.childNodes],rendered:i.rendered,textValue:i.textValue??"",index:i.index??o};r?(r.nextKey=u.key,u.prevKey=r.key):u.prevKey=null,this.rows.push(u),n(u),r=u}r&&(r.nextKey=null)}*[Symbol.iterator](){yield*[...this.rows]}get size(){return[...this.rows].length}getKeys(){return this.keyMap.keys()}getKeyBefore(e){let n=this.keyMap.get(e);return n?n.prevKey??null:null}getKeyAfter(e){let n=this.keyMap.get(e);return n?n.nextKey??null:null}getFirstKey(){var e;return(e=[...this.rows][0])==null?void 0:e.key}getLastKey(){var n;let e=[...this.rows];return(n=e[e.length-1])==null?void 0:n.key}getItem(e){return this.keyMap.get(e)??null}at(e){const n=[...this.getKeys()];return this.getItem(n[e])}getChildren(e){let n=this.keyMap.get(e);return(n==null?void 0:n.childNodes)||[]}}const Qd="row-header-column-"+Math.random().toString(36).slice(2);let cr="row-header-column-"+Math.random().toString(36).slice(2);for(;Qd===cr;)cr="row-header-column-"+Math.random().toString(36).slice(2);function ef(t,e){if(e.length===0)return[];let n=[],l=new Map;for(let a of e){let c=a.parentKey,f=[a];for(;c!=null;){let d=t.get(c);if(!d)break;if(l.has(d)){d.colSpan??(d.colSpan=0),d.colSpan++,d.colspan=d.colSpan;let{column:b,index:p}=l.get(d);if(p>f.length)break;for(let h=p;ha.length)),o=Array(r).fill(0).map(()=>[]),i=0;for(let a of n){let c=r-1;for(let f of a){if(f){let d=o[c],b=d.reduce((p,h)=>p+(h.colSpan??1),0);if(b0&&(d[d.length-1].nextKey=p.key,p.prevKey=d[d.length-1].key),d.push(p)}d.length>0&&(d[d.length-1].nextKey=f.key,f.prevKey=d[d.length-1].key),f.level=c,f.colIndex=i,d.push(f)}c--}i++}let u=0;for(let a of o){let c=a.reduce((f,d)=>f+(d.colSpan??1),0);if(c({type:"headerrow",key:"headerrow-"+c,index:c,value:null,rendered:null,level:0,hasChildNodes:!0,childNodes:a,textValue:""}))}class ig extends og{constructor(e,n,l){let r=new Set,o=null,i=[];if(l!=null&&l.showSelectionCheckboxes){let d={type:"column",key:Qd,value:null,textValue:"",level:0,index:l!=null&&l.showDragButtons?1:0,hasChildNodes:!1,rendered:null,childNodes:[],props:{isSelectionCell:!0}};i.unshift(d)}if(l!=null&&l.showDragButtons){let d={type:"column",key:cr,value:null,textValue:"",level:0,index:0,hasChildNodes:!1,rendered:null,childNodes:[],props:{isDragButtonCell:!0}};i.unshift(d)}let u=[],a=new Map,c=d=>{switch(d.type){case"body":o=d;break;case"column":a.set(d.key,d),d.hasChildNodes||(i.push(d),d.props.isRowHeader&&r.add(d.key));break;case"item":u.push(d);return}for(let b of d.childNodes)c(b)};for(let d of e)c(d);let f=ef(a,i);if(f.forEach((d,b)=>u.splice(b,0,d)),super({columnCount:i.length,items:u,visitNode:d=>(d.column=i[d.index],d)}),this._size=0,this.columns=i,this.rowHeaderColumnKeys=r,this.body=o,this.headerRows=f,this._size=[...o.childNodes].length,this.rowHeaderColumnKeys.size===0){let d=this.columns.find(b=>{var p,h;return!((p=b.props)!=null&&p.isDragButtonCell)&&!((h=b.props)!=null&&h.isSelectionCell)});d&&this.rowHeaderColumnKeys.add(d.key)}}*[Symbol.iterator](){yield*this.body.childNodes}get size(){return this._size}getKeys(){return this.keyMap.keys()}getKeyBefore(e){let n=this.keyMap.get(e);return(n==null?void 0:n.prevKey)??null}getKeyAfter(e){let n=this.keyMap.get(e);return(n==null?void 0:n.nextKey)??null}getFirstKey(){var e;return((e=_r(this.body.childNodes))==null?void 0:e.key)??null}getLastKey(){var e;return((e=Ts(this.body.childNodes))==null?void 0:e.key)??null}getItem(e){return e===this.body.key?this.body:this.keyMap.get(e)??null}at(e){const n=[...this.getKeys()];return this.getItem(n[e])}getChildren(e){if(e===this.body.key)return this.body.childNodes;let n=this.getItem(e);return(n==null?void 0:n.type)==="item"?[...n.childNodes].filter(l=>l.type==="cell"):super.getChildren(e)}getTextValue(e){let n=this.getItem(e);if(!n)return"";if(n.textValue)return n.textValue;let l=this.rowHeaderColumnKeys;if(l){let r=[];for(let o of n.childNodes){let i=this.columns[o.index];if(l.has(i.key)&&o.textValue&&r.push(o.textValue),r.length===l.size)break}return r.join(" ")}return""}}function ug(t){return t!=null&&(!isNaN(t)||String(t).match(/^(\d+)(?=%$)/)!==null)}function ag(t){if(!t||typeof t=="number")return 1;let e=t.match(/^(.+)(?=fr$)/);return e?parseFloat(e[0]):1}function Jr(t,e){if(typeof t=="string"){let n=t.match(/^(\d+)(?=%$)/);if(!n)throw new Error("Only percentages or numbers are supported for static column widths");return e*(parseFloat(n[0])/100)}return t}function tf(t,e){return t!=null?Jr(t,e):Number.MAX_SAFE_INTEGER}function nf(t,e){return t!=null?Jr(t,e):0}function sg(t,e,n,l,r){let o=!1,i=e.map((u,a)=>{let c=n.get(u.key)!=null?n.get(u.key)??"1fr":u.width??u.defaultWidth??(l==null?void 0:l(a))??"1fr",f=!1,d=0,b=0,p=0;ug(c)?(d=Jr(c,t),f=!0):(b=ag(c),b<=0&&(f=!0));let h=nf(u.minWidth??(r==null?void 0:r(a))??0,t),$=tf(u.maxWidth,t),y=Math.max(h,Math.min(d,$));return f?p=y:d>y&&(f=!0,p=y),f||(o=!0),{frozen:f,baseSize:d,hypotheticalMainSize:y,min:h,max:$,flex:b,targetMainSize:p,violation:0}});for(;o;){let u=0,a=0;i.forEach(d=>{d.frozen?u+=d.targetMainSize:(u+=d.baseSize,a+=d.flex)});let c=t-u;c>0&&i.forEach(d=>{if(!d.frozen){let b=d.flex/a;d.targetMainSize=d.baseSize+b*c}});let f=0;i.forEach(d=>{if(d.violation=0,!d.frozen){let{min:b,max:p,targetMainSize:h}=d;d.targetMainSize=Math.max(b,Math.min(h,p)),d.violation=d.targetMainSize-h,f+=d.violation}}),o=!1,i.forEach(d=>{f===0||Math.sign(f)===Math.sign(d.violation)?d.frozen=!0:d.frozen||(o=!0)})}return cg(i)}function cg(t){let e=0,n=0,l=[];return t.forEach(function(r){let o=r.targetMainSize,i=Math.round(o+e)-n;e+=o,n+=i,l.push(i)}),l}class dg{constructor(e){this.columnWidths=new Map,this.columnMinWidths=new Map,this.columnMaxWidths=new Map,this.getDefaultWidth=(e==null?void 0:e.getDefaultWidth)??(()=>"1fr"),this.getDefaultMinWidth=(e==null?void 0:e.getDefaultMinWidth)??(()=>75)}splitColumnsIntoControlledAndUncontrolled(e){return e.reduce((n,l)=>(l.props.width!=null?n[0].set(l.key,l):n[1].set(l.key,l),n),[new Map,new Map])}recombineColumns(e,n,l,r){return new Map(e.map(o=>l.has(o.key)?[o.key,n.get(o.key)]:[o.key,r.get(o.key).props.width]))}getInitialUncontrolledWidths(e){return new Map(Array.from(e).map(([n,l])=>{var r;return[n,l.props.defaultWidth??((r=this.getDefaultWidth)==null?void 0:r.call(this,l))??"1fr"]}))}getColumnWidth(e){return this.columnWidths.get(e)??0}getColumnMinWidth(e){return this.columnMinWidths.get(e)??0}getColumnMaxWidth(e){return this.columnMaxWidths.get(e)??0}resizeColumnWidth(e,n,l,r){let o=this.columnWidths,i=!0,u=new Map;return r=Math.max(this.getColumnMinWidth(l),Math.min(this.getColumnMaxWidth(l),Math.floor(r))),e.columns.forEach(a=>{a.key===l?(u.set(a.key,r),i=!1):i?u.set(a.key,o.get(a.key)??0):u.set(a.key,a.props.width??n.get(a.key))}),u}buildColumnWidths(e,n,l){return this.columnWidths=new Map,this.columnMinWidths=new Map,this.columnMaxWidths=new Map,sg(e,n.columns.map(o=>({...o.props,key:o.key})),l,o=>this.getDefaultWidth(n.columns[o]),o=>this.getDefaultMinWidth(n.columns[o])).forEach((o,i)=>{let u=n.columns[i].key,a=n.columns[i];this.columnWidths.set(u,o),this.columnMinWidths.set(u,nf(a.props.minWidth??this.getDefaultMinWidth(a),e)),this.columnMaxWidths.set(u,tf(a.props.maxWidth,e))}),this.columnWidths}}function fg(t,e){let{getDefaultWidth:n,getDefaultMinWidth:l,tableWidth:r=0}=t,[o,i]=s.useState(null),u=s.useMemo(()=>new dg({getDefaultWidth:n,getDefaultMinWidth:l}),[n,l]),[a,c]=s.useMemo(()=>u.splitColumnsIntoControlledAndUncontrolled(e.collection.columns),[e.collection.columns,u]),[f,d]=s.useState(()=>u.getInitialUncontrolledWidths(c)),[b,p]=s.useState(e.collection.columns);if(e.collection.columns!==b){if(e.collection.columns.length!==b.length||e.collection.columns.some((E,C)=>E.key!==b[C].key)){let E=u.getInitialUncontrolledWidths(c);d(E)}p(e.collection.columns)}let h=s.useMemo(()=>u.recombineColumns(e.collection.columns,f,c,a),[e.collection.columns,f,c,a,u]),$=s.useCallback(E=>{i(E)},[i]),y=s.useCallback((E,C)=>{let R=u.resizeColumnWidth(e.collection,f,E,C),A=new Map(Array.from(c).map(([K])=>[K,R.get(K)]));return A.set(E,C),d(A),R},[c,d,u,e.collection,f]),m=s.useCallback(()=>{i(null)},[i]),v=s.useMemo(()=>u.buildColumnWidths(r,e.collection,h),[r,e.collection,h,u]);return s.useMemo(()=>({resizingColumn:o,updateResizedColumns:y,startResize:$,endResize:m,getColumnWidth:E=>u.getColumnWidth(E),getColumnMinWidth:E=>u.getColumnMinWidth(E),getColumnMaxWidth:E=>u.getColumnMaxWidth(E),tableState:e,columnWidths:v}),[u,v,o,y,$,m,e])}function pg(t){let{collection:e,focusMode:n}=t,l=t.UNSAFE_selectionState||Hr(t),r=s.useMemo(()=>t.disabledKeys?new Set(t.disabledKeys):new Set,[t.disabledKeys]),o=l.setFocusedKey;l.setFocusedKey=(a,c)=>{var f,d;if(n==="cell"&&a!=null){let b=e.getItem(a);if((b==null?void 0:b.type)==="item"){let p=Zn(b,e);c==="last"?a=((f=Ts(p))==null?void 0:f.key)??null:a=((d=_r(p))==null?void 0:d.key)??null}}o(a,c)};let i=s.useMemo(()=>new cl(e,l),[e,l]);const u=s.useRef(null);return s.useEffect(()=>{if(l.focusedKey!=null&&u.current&&!e.getItem(l.focusedKey)){const a=u.current.getItem(l.focusedKey),c=(a==null?void 0:a.parentKey)!=null&&(a.type==="cell"||a.type==="rowheader"||a.type==="column")?u.current.getItem(a.parentKey):a;if(!c){l.setFocusedKey(null);return}const f=u.current.rows,d=e.rows,b=f.length-d.length;let p=Math.min(b>1?Math.max(c.index-b+1,0):c.index,d.length-1),h=null;for(;p>=0;){if(!i.isDisabled(d[p].key)&&d[p].type!=="headerrow"){h=d[p];break}pc.index&&(p=c.index),p--)}if(h){const $=h.hasChildNodes?[...Zn(h,e)]:[],y=h.hasChildNodes&&c!==a&&a&&a.index<$.length?$[a.index].key:h.key;l.setFocusedKey(y)}else l.setFocusedKey(null)}u.current=e},[e,i,l,l.focusedKey]),{collection:e,disabledKeys:r,isKeyboardNavigationDisabled:!1,selectionManager:i}}const bg={ascending:"descending",descending:"ascending"};function hg(t){let[e,n]=s.useState(!1),{selectionMode:l="none",showSelectionCheckboxes:r,showDragButtons:o,treeColumn:i=null}=t,u=s.useMemo(()=>({showSelectionCheckboxes:r&&l!=="none",showDragButtons:o,selectionMode:l,columns:[]}),[t.children,r,l,o]),a=Bs(t,s.useCallback(p=>new ig(p,null,u),[u]),u),{disabledKeys:c,selectionManager:f}=pg({...t,collection:a,disabledBehavior:t.disabledBehavior||"selection"}),[d,b]=Ct(t.expandedKeys?new Set(t.expandedKeys):void 0,t.defaultExpandedKeys?new Set(t.defaultExpandedKeys):new Set,t.onExpandedChange);return{collection:a,disabledKeys:c,selectionManager:f,showSelectionCheckboxes:t.showSelectionCheckboxes||!1,sortDescriptor:t.sortDescriptor??null,isKeyboardNavigationDisabled:a.size===0||e,setKeyboardNavigationDisabled:n,sort(p,h){var $,y;(y=t.onSortChange)==null||y.call(t,{column:p,direction:h??((($=t.sortDescriptor)==null?void 0:$.column)===p?bg[t.sortDescriptor.direction]:"ascending")})},expandedKeys:d,toggleKey(p){b(h=>{let $=new Set(h);return $.has(p)?$.delete(p):$.add(p),$})},treeColumn:i}}function mg(t,e){let n=s.useMemo(()=>e?t.collection.filter(e):t.collection,[t.collection,e]),l=t.selectionManager.withCollection(n);return{...t,collection:n,selectionManager:l}}class lf{constructor(e){if(this.collection=e.collection,this.disabledKeys=e.disabledKeys,this.disabledBehavior=e.disabledBehavior||"all",this.direction=e.direction,this.collator=e.collator,!e.layout&&!e.ref)throw new Error("Either a layout or a ref must be specified.");this.layoutDelegate=e.layoutDelegate||(e.layout?new gg(e.layout):new ir(e.ref)),this.focusMode=e.focusMode??"row"}isCell(e){return e.type==="cell"}isRow(e){return e.type==="row"||e.type==="item"}isDisabled(e){var n,l;return this.disabledBehavior==="all"&&(((n=e.props)==null?void 0:n.isDisabled)||this.disabledKeys.has(e.key))&&((l=e.props)==null?void 0:l.disabledBehavior)!=="selection"}findPreviousKey(e,n,l=!1){let r=e!=null?this.collection.getKeyBefore(e):this.collection.getLastKey();for(;r!=null;){let o=this.collection.getItem(r);if(!o)return null;if((l||!this.isDisabled(o))&&(!n||n(o)))return r;r=this.collection.getKeyBefore(r)}return null}findNextKey(e,n,l=!1){let r=e!=null?this.collection.getKeyAfter(e):this.collection.getFirstKey();for(;r!=null;){let o=this.collection.getItem(r);if(!o)return null;if((l||!this.isDisabled(o))&&(!n||n(o)))return r;if(r=this.collection.getKeyAfter(r),r==null)return null}return null}getKeyForItemInRowByIndex(e,n=0){if(n<0)return null;let l=this.collection.getItem(e);if(!l)return null;let r=0;for(let o of Ce(l,this.collection)){if(o.colSpan&&o.colSpan+r>n||(o.colSpan&&(r=r+o.colSpan-1),r===n))return o.key??null;r++}return null}getKeyBelow(e,n){let l=e,r=this.collection.getItem(l);if(!r||(this.isCell(r)&&(l=r.parentKey??null),l==null))return null;if(l=this.findNextKey(l,o=>o.type==="item",n==null?void 0:n.includeDisabled),l!=null){if(this.isCell(r)){let o=r.colIndex?r.colIndex:r.index;return this.getKeyForItemInRowByIndex(l,o)}if(this.focusMode==="row")return l}return null}getKeyAbove(e,n){let l=e,r=this.collection.getItem(l);if(!r||(this.isCell(r)&&(l=r.parentKey??null),l==null))return null;if(l=this.findPreviousKey(l,o=>o.type==="item",n==null?void 0:n.includeDisabled),l!=null){if(this.isCell(r)){let o=r.colIndex?r.colIndex:r.index;return this.getKeyForItemInRowByIndex(l,o)}if(this.focusMode==="row")return l}return null}getKeyRightOf(e){var l,r;let n=this.collection.getItem(e);if(!n)return null;if(this.isRow(n)){let o=Ce(n,this.collection);return(this.direction==="rtl"?(l=In(o))==null?void 0:l.key:(r=Pt(o))==null?void 0:r.key)??null}if(this.isCell(n)&&n.parentKey!=null){let o=this.collection.getItem(n.parentKey);if(!o)return null;let i=Ce(o,this.collection),u=(this.direction==="rtl"?en(i,n.index-1):en(i,n.index+1))??null;return u?u.key??null:this.focusMode==="row"?n.parentKey??null:(this.direction==="rtl"?this.getFirstKey(e):this.getLastKey(e))??null}return null}getKeyLeftOf(e){var l,r;let n=this.collection.getItem(e);if(!n)return null;if(this.isRow(n)){let o=Ce(n,this.collection);return(this.direction==="rtl"?(l=Pt(o))==null?void 0:l.key:(r=In(o))==null?void 0:r.key)??null}if(this.isCell(n)&&n.parentKey!=null){let o=this.collection.getItem(n.parentKey);if(!o)return null;let i=Ce(o,this.collection),u=(this.direction==="rtl"?en(i,n.index+1):en(i,n.index-1))??null;return u?u.key??null:this.focusMode==="row"?n.parentKey??null:(this.direction==="rtl"?this.getLastKey(e):this.getFirstKey(e))??null}return null}getFirstKey(e,n){var o,i;let l=e??null,r;if(l!=null){if(r=this.collection.getItem(l),!r)return null;if(this.isCell(r)&&!n&&r.parentKey!=null){let u=this.collection.getItem(r.parentKey);return u?((o=Pt(Ce(u,this.collection)))==null?void 0:o.key)??null:null}}if(l=this.findNextKey(void 0,u=>u.type==="item"),l!=null&&(r&&this.isCell(r)&&n||this.focusMode==="cell")){let u=this.collection.getItem(l);if(!u)return null;l=((i=Pt(Ce(u,this.collection)))==null?void 0:i.key)??null}return l}getLastKey(e,n){var o,i;let l=e??null,r;if(l!=null){if(r=this.collection.getItem(l),!r)return null;if(this.isCell(r)&&!n&&r.parentKey!=null){let u=this.collection.getItem(r.parentKey);if(!u)return null;let a=Ce(u,this.collection);return((o=In(a))==null?void 0:o.key)??null}}if(l=this.findPreviousKey(void 0,u=>u.type==="item"),l!=null&&(r&&this.isCell(r)&&n||this.focusMode==="cell")){let u=this.collection.getItem(l);if(!u)return null;let a=Ce(u,this.collection);l=((i=In(a))==null?void 0:i.key)??null}return l}getKeyPageAbove(e){let n=e,l=this.layoutDelegate.getItemRect(n);if(!l)return null;let r=Math.max(0,l.y+l.height-this.layoutDelegate.getVisibleRect().height);for(;l&&l.y>r&&n!=null&&(n=this.getKeyAbove(n)??null,n!=null);)l=this.layoutDelegate.getItemRect(n);return n}getKeyPageBelow(e){let n=e,l=this.layoutDelegate.getItemRect(n);if(!l)return null;let r=this.layoutDelegate.getVisibleRect().height,o=Math.min(this.layoutDelegate.getContentSize().height,l.y+r);for(;l&&l.y+l.heightc.type==="item"),l==null&&!i&&(l=this.getFirstKey(),i=!0)}return null}}class gg{constructor(e){this.layout=e}getContentSize(){return this.layout.getContentSize()}getItemRect(e){var n;return((n=this.layout.getLayoutInfo(e))==null?void 0:n.rect)||null}getVisibleRect(){return this.layout.virtualizer.visibleRect}}const Qr=new WeakMap;function yg(t,e,n){let{isVirtualized:l,disallowTypeAhead:r,keyboardDelegate:o,focusMode:i,scrollRef:u,getRowText:a,onRowAction:c,onCellAction:f,escapeKeyBehavior:d="clearSelection",shouldSelectOnPressUp:b}=t,{selectionManager:p}=e;!t["aria-label"]&&!t["aria-labelledby"]&&console.warn("An aria-label or aria-labelledby prop is required for accessibility.");let h=En({usage:"search",sensitivity:"base"}),{direction:$}=Re(),y=e.selectionManager.disabledBehavior,m=s.useMemo(()=>o||new lf({collection:e.collection,disabledKeys:e.disabledKeys,disabledBehavior:y,ref:n,direction:$,collator:h,focusMode:i}),[o,e.collection,e.disabledKeys,y,n,$,h,i]),{collectionProps:v}=Vr({ref:n,selectionManager:p,keyboardDelegate:m,isVirtualized:l,scrollRef:u,disallowTypeAhead:r,escapeKeyBehavior:d}),E=$e(t.id);Qr.set(e,{keyboardDelegate:m,actions:{onRowAction:c,onCellAction:f},shouldSelectOnPressUp:b});let C=J3({selectionManager:p,hasItemActions:!!(c||f)}),R=ie(t,{labelable:!0}),A=s.useCallback(B=>{if(p.isFocused){te(B.currentTarget,j(B))||p.setFocused(!1);return}te(B.currentTarget,j(B))&&p.setFocused(!0)},[p]),K=s.useMemo(()=>({onBlur:v.onBlur,onFocus:A}),[A,v.onBlur]),P=q3(n,{isDisabled:e.collection.size!==0}),z=G(R,{role:"grid",id:E,"aria-multiselectable":p.selectionMode==="multiple"?"true":void 0},e.isKeyboardNavigationDisabled?K:v,e.collection.size===0&&{tabIndex:P?-1:0}||void 0,C);return l&&(z["aria-rowcount"]=e.collection.size,z["aria-colcount"]=e.collection.columnCount),Y3({getRowText:a},e),{gridProps:z}}const eo=new WeakMap;function dr(t){return typeof t=="string"?t.replace(/\s*/g,""):""+t}function rf(t,e){let n=eo.get(t);if(!n)throw new Error("Unknown grid");return`${n}-${dr(e)}`}function of(t,e,n){let l=eo.get(t);if(!l)throw new Error("Unknown grid");return`${l}-${dr(e)}-${dr(n)}`}function fr(t,e){return[...t.collection.rowHeaderColumnKeys].map(n=>of(t,e,n)).join(" ")}var uf={};uf={ascending:"تصاعدي",ascendingSort:t=>`ترتيب حسب العمود ${t.columnName} بترتيب تصاعدي`,columnSize:t=>`${t.value} بالبكسل`,descending:"تنازلي",descendingSort:t=>`ترتيب حسب العمود ${t.columnName} بترتيب تنازلي`,resizerDescription:"اضغط على مفتاح Enter لبدء تغيير الحجم",select:"تحديد",selectAll:"تحديد الكل",sortable:"عمود قابل للترتيب",collapse:"طي",expand:"تمديد"};var af={};af={ascending:"възходящ",ascendingSort:t=>`сортирано по колона ${t.columnName} във възходящ ред`,columnSize:t=>`${t.value} пиксела`,descending:"низходящ",descendingSort:t=>`сортирано по колона ${t.columnName} в низходящ ред`,resizerDescription:"Натиснете „Enter“, за да започнете да преоразмерявате",select:"Изберете",selectAll:"Изберете всичко",sortable:"сортираща колона",collapse:"Свиване",expand:"Разширяване"};var sf={};sf={ascending:"vzestupně",ascendingSort:t=>`řazeno vzestupně podle sloupce ${t.columnName}`,columnSize:t=>`${t.value} pixelů`,descending:"sestupně",descendingSort:t=>`řazeno sestupně podle sloupce ${t.columnName}`,resizerDescription:"Stisknutím klávesy Enter začnete měnit velikost",select:"Vybrat",selectAll:"Vybrat vše",sortable:"sloupec s možností řazení",collapse:"Sbalit",expand:"Roztáhnout"};var cf={};cf={ascending:"stigende",ascendingSort:t=>`sorteret efter kolonne ${t.columnName} i stigende rækkefølge`,columnSize:t=>`${t.value} pixels`,descending:"faldende",descendingSort:t=>`sorteret efter kolonne ${t.columnName} i faldende rækkefølge`,resizerDescription:"Tryk på Enter for at ændre størrelse",select:"Vælg",selectAll:"Vælg alle",sortable:"sorterbar kolonne",collapse:"Skjul",expand:"Udvid"};var df={};df={ascending:"aufsteigend",ascendingSort:t=>`sortiert nach Spalte ${t.columnName} in aufsteigender Reihenfolge`,columnSize:t=>`${t.value} Pixel`,descending:"absteigend",descendingSort:t=>`sortiert nach Spalte ${t.columnName} in absteigender Reihenfolge`,resizerDescription:"Eingabetaste zum Starten der Größenänderung drücken",select:"Auswählen",selectAll:"Alles auswählen",sortable:"sortierbare Spalte",collapse:"Reduzieren",expand:"Erweitern"};var ff={};ff={ascending:"αύξουσα",ascendingSort:t=>`διαλογή ανά στήλη ${t.columnName} σε αύξουσα σειρά`,columnSize:t=>`${t.value} pixel`,descending:"φθίνουσα",descendingSort:t=>`διαλογή ανά στήλη ${t.columnName} σε φθίνουσα σειρά`,resizerDescription:"Πατήστε Enter για έναρξη της αλλαγής μεγέθους",select:"Επιλογή",selectAll:"Επιλογή όλων",sortable:"Στήλη διαλογής",collapse:"Σύμπτυξη",expand:"Ανάπτυξη"};var pf={};pf={select:"Select",selectAll:"Select All",sortable:"sortable column",ascending:"ascending",descending:"descending",ascendingSort:t=>`sorted by column ${t.columnName} in ascending order`,descendingSort:t=>`sorted by column ${t.columnName} in descending order`,columnSize:t=>`${t.value} pixels`,resizerDescription:"Press Enter to start resizing",expand:"Expand",collapse:"Collapse"};var bf={};bf={ascending:"ascendente",ascendingSort:t=>`ordenado por columna ${t.columnName} en sentido ascendente`,columnSize:t=>`${t.value} píxeles`,descending:"descendente",descendingSort:t=>`ordenado por columna ${t.columnName} en orden descendente`,resizerDescription:"Pulse Intro para empezar a redimensionar",select:"Seleccionar",selectAll:"Seleccionar todos",sortable:"columna ordenable",collapse:"Contraer",expand:"Ampliar"};var hf={};hf={ascending:"tõusev järjestus",ascendingSort:t=>`sorditud veeru järgi ${t.columnName} tõusvas järjestuses`,columnSize:t=>`${t.value} pikslit`,descending:"laskuv järjestus",descendingSort:t=>`sorditud veeru järgi ${t.columnName} laskuvas järjestuses`,resizerDescription:"Suuruse muutmise alustamiseks vajutage klahvi Enter",select:"Vali",selectAll:"Vali kõik",sortable:"sorditav veerg",collapse:"Ahenda",expand:"Laienda"};var mf={};mf={ascending:"nouseva",ascendingSort:t=>`lajiteltu sarakkeen ${t.columnName} mukaan nousevassa järjestyksessä`,columnSize:t=>`${t.value} pikseliä`,descending:"laskeva",descendingSort:t=>`lajiteltu sarakkeen ${t.columnName} mukaan laskevassa järjestyksessä`,resizerDescription:"Aloita koon muutos painamalla Enter-näppäintä",select:"Valitse",selectAll:"Valitse kaikki",sortable:"lajiteltava sarake",collapse:"Pienennä",expand:"Laajenna"};var gf={};gf={ascending:"croissant",ascendingSort:t=>`trié en fonction de la colonne ${t.columnName} par ordre croissant`,columnSize:t=>`${t.value} pixels`,descending:"décroissant",descendingSort:t=>`trié en fonction de la colonne ${t.columnName} par ordre décroissant`,resizerDescription:"Appuyez sur Entrée pour commencer le redimensionnement.",select:"Sélectionner",selectAll:"Sélectionner tout",sortable:"colonne triable",collapse:"Réduire",expand:"Développer"};var yf={};yf={ascending:"עולה",ascendingSort:t=>`מוין לפי עמודה ${t.columnName} בסדר עולה`,columnSize:t=>`${t.value} פיקסלים`,descending:"יורד",descendingSort:t=>`מוין לפי עמודה ${t.columnName} בסדר יורד`,resizerDescription:"הקש Enter כדי לשנות את הגודל",select:"בחר",selectAll:"בחר הכול",sortable:"עמודה שניתן למיין",collapse:"כווץ",expand:"הרחב"};var $f={};$f={ascending:"rastući",ascendingSort:t=>`razvrstano po stupcima ${t.columnName} rastućem redoslijedom`,columnSize:t=>`${t.value} piksela`,descending:"padajući",descendingSort:t=>`razvrstano po stupcima ${t.columnName} padajućim redoslijedom`,resizerDescription:"Pritisnite Enter da biste započeli promenu veličine",select:"Odaberite",selectAll:"Odaberite sve",sortable:"stupac koji se može razvrstati",collapse:"Sažmi",expand:"Proširi"};var vf={};vf={ascending:"növekvő",ascendingSort:t=>`rendezve a(z) ${t.columnName} oszlop szerint, növekvő sorrendben`,columnSize:t=>`${t.value} képpont`,descending:"csökkenő",descendingSort:t=>`rendezve a(z) ${t.columnName} oszlop szerint, csökkenő sorrendben`,resizerDescription:"Nyomja le az Enter billentyűt az átméretezés megkezdéséhez",select:"Kijelölés",selectAll:"Összes kijelölése",sortable:"rendezendő oszlop",collapse:"Összecsukás",expand:"Kibontás"};var xf={};xf={ascending:"crescente",ascendingSort:t=>`in ordine crescente in base alla colonna ${t.columnName}`,columnSize:t=>`${t.value} pixel`,descending:"decrescente",descendingSort:t=>`in ordine decrescente in base alla colonna ${t.columnName}`,resizerDescription:"Premi Invio per iniziare a ridimensionare",select:"Seleziona",selectAll:"Seleziona tutto",sortable:"colonna ordinabile",collapse:"Comprimi",expand:"Espandi"};var Cf={};Cf={ascending:"昇順",ascendingSort:t=>`列 ${t.columnName} を昇順で並べ替え`,columnSize:t=>`${t.value} ピクセル`,descending:"降順",descendingSort:t=>`列 ${t.columnName} を降順で並べ替え`,resizerDescription:"Enter キーを押してサイズ変更を開始",select:"選択",selectAll:"すべて選択",sortable:"並べ替え可能な列",collapse:"折りたたむ",expand:"展開"};var Ef={};Ef={ascending:"오름차순",ascendingSort:t=>`${t.columnName} 열을 기준으로 오름차순으로 정렬됨`,columnSize:t=>`${t.value} 픽셀`,descending:"내림차순",descendingSort:t=>`${t.columnName} 열을 기준으로 내림차순으로 정렬됨`,resizerDescription:"크기 조정을 시작하려면 Enter를 누르세요.",select:"선택",selectAll:"모두 선택",sortable:"정렬 가능한 열",collapse:"접기",expand:"펼치기"};var wf={};wf={ascending:"didėjančia tvarka",ascendingSort:t=>`surikiuota pagal stulpelį ${t.columnName} didėjančia tvarka`,columnSize:t=>`${t.value} piks.`,descending:"mažėjančia tvarka",descendingSort:t=>`surikiuota pagal stulpelį ${t.columnName} mažėjančia tvarka`,resizerDescription:"Paspauskite „Enter“, kad pradėtumėte keisti dydį",select:"Pasirinkti",selectAll:"Pasirinkti viską",sortable:"rikiuojamas stulpelis",collapse:"Sutraukti",expand:"Išskleisti"};var Sf={};Sf={ascending:"augošā secībā",ascendingSort:t=>`kārtots pēc kolonnas ${t.columnName} augošā secībā`,columnSize:t=>`${t.value} pikseļi`,descending:"dilstošā secībā",descendingSort:t=>`kārtots pēc kolonnas ${t.columnName} dilstošā secībā`,resizerDescription:"Nospiediet Enter, lai sāktu izmēru mainīšanu",select:"Atlasīt",selectAll:"Atlasīt visu",sortable:"kārtojamā kolonna",collapse:"Sakļaut",expand:"Izvērst"};var Df={};Df={ascending:"stigende",ascendingSort:t=>`sortert etter kolonne ${t.columnName} i stigende rekkefølge`,columnSize:t=>`${t.value} piksler`,descending:"synkende",descendingSort:t=>`sortert etter kolonne ${t.columnName} i synkende rekkefølge`,resizerDescription:"Trykk på Enter for å starte størrelsesendring",select:"Velg",selectAll:"Velg alle",sortable:"kolonne som kan sorteres",collapse:"Skjul",expand:"Utvid"};var kf={};kf={ascending:"oplopend",ascendingSort:t=>`gesorteerd in oplopende volgorde in kolom ${t.columnName}`,columnSize:t=>`${t.value} pixels`,descending:"aflopend",descendingSort:t=>`gesorteerd in aflopende volgorde in kolom ${t.columnName}`,resizerDescription:"Druk op Enter om het formaat te wijzigen",select:"Selecteren",selectAll:"Alles selecteren",sortable:"sorteerbare kolom",collapse:"Samenvouwen",expand:"Uitvouwen"};var Pf={};Pf={ascending:"rosnąco",ascendingSort:t=>`posortowano według kolumny ${t.columnName} w porządku rosnącym`,columnSize:t=>`Liczba pikseli: ${t.value}`,descending:"malejąco",descendingSort:t=>`posortowano według kolumny ${t.columnName} w porządku malejącym`,resizerDescription:"Naciśnij Enter, aby rozpocząć zmienianie rozmiaru",select:"Zaznacz",selectAll:"Zaznacz wszystko",sortable:"kolumna z możliwością sortowania",collapse:"Zwiń",expand:"Rozwiń"};var Af={};Af={ascending:"crescente",ascendingSort:t=>`classificado pela coluna ${t.columnName} em ordem crescente`,columnSize:t=>`${t.value} pixels`,descending:"decrescente",descendingSort:t=>`classificado pela coluna ${t.columnName} em ordem decrescente`,resizerDescription:"Pressione Enter para começar a redimensionar",select:"Selecionar",selectAll:"Selecionar tudo",sortable:"coluna classificável",collapse:"Recolher",expand:"Expandir"};var Tf={};Tf={ascending:"ascendente",ascendingSort:t=>`Ordenar por coluna ${t.columnName} em ordem ascendente`,columnSize:t=>`${t.value} pixels`,descending:"descendente",descendingSort:t=>`Ordenar por coluna ${t.columnName} em ordem descendente`,resizerDescription:"Prima Enter para iniciar o redimensionamento",select:"Selecionar",selectAll:"Selecionar tudo",sortable:"Coluna ordenável",collapse:"Colapsar",expand:"Expandir"};var Bf={};Bf={ascending:"crescătoare",ascendingSort:t=>`sortate după coloana ${t.columnName} în ordine crescătoare`,columnSize:t=>`${t.value} pixeli`,descending:"descrescătoare",descendingSort:t=>`sortate după coloana ${t.columnName} în ordine descrescătoare`,resizerDescription:"Apăsați pe Enter pentru a începe redimensionarea",select:"Selectare",selectAll:"Selectare totală",sortable:"coloană sortabilă",collapse:"Restrângeți",expand:"Extindeți"};var Kf={};Kf={ascending:"возрастание",ascendingSort:t=>`сортировать столбец ${t.columnName} в порядке возрастания`,columnSize:t=>`${t.value} пикс.`,descending:"убывание",descendingSort:t=>`сортировать столбец ${t.columnName} в порядке убывания`,resizerDescription:"Нажмите клавишу Enter для начала изменения размеров",select:"Выбрать",selectAll:"Выбрать все",sortable:"сортируемый столбец",collapse:"Свернуть",expand:"Развернуть"};var Rf={};Rf={ascending:"vzostupne",ascendingSort:t=>`zoradené zostupne podľa stĺpca ${t.columnName}`,columnSize:t=>`Počet pixelov: ${t.value}`,descending:"zostupne",descendingSort:t=>`zoradené zostupne podľa stĺpca ${t.columnName}`,resizerDescription:"Stlačením klávesu Enter začnete zmenu veľkosti",select:"Vybrať",selectAll:"Vybrať všetko",sortable:"zoraditeľný stĺpec",collapse:"Zbaliť",expand:"Rozbaliť"};var Mf={};Mf={ascending:"naraščajoče",ascendingSort:t=>`razvrščeno po stolpcu ${t.columnName} v naraščajočem vrstnem redu`,columnSize:t=>`${t.value} slikovnih pik`,descending:"padajoče",descendingSort:t=>`razvrščeno po stolpcu ${t.columnName} v padajočem vrstnem redu`,resizerDescription:"Pritisnite tipko Enter da začnete spreminjati velikost",select:"Izberite",selectAll:"Izberite vse",sortable:"razvrstljivi stolpec",collapse:"Strni",expand:"Razširi"};var If={};If={ascending:"rastući",ascendingSort:t=>`sortirano po kolonama ${t.columnName} rastućim redosledom`,columnSize:t=>`${t.value} piksela`,descending:"padajući",descendingSort:t=>`sortirano po kolonama ${t.columnName} padajućim redosledom`,resizerDescription:"Pritisnite Enter da biste započeli promenu veličine",select:"Izaberite",selectAll:"Izaberite sve",sortable:"kolona koja se može sortirati",collapse:" Skupi",expand:"Proširi"};var Ff={};Ff={ascending:"stigande",ascendingSort:t=>`sorterat på kolumn ${t.columnName} i stigande ordning`,columnSize:t=>`${t.value} pixlar`,descending:"fallande",descendingSort:t=>`sorterat på kolumn ${t.columnName} i fallande ordning`,resizerDescription:"Tryck på Retur för att börja ändra storlek",select:"Markera",selectAll:"Markera allt",sortable:"sorterbar kolumn",collapse:"Dölj",expand:"Expandera"};var Lf={};Lf={ascending:"artan sırada",ascendingSort:t=>`${t.columnName} sütuna göre artan düzende sırala`,columnSize:t=>`${t.value} piksel`,descending:"azalan sırada",descendingSort:t=>`${t.columnName} sütuna göre azalan düzende sırala`,resizerDescription:"Yeniden boyutlandırmak için Enter'a basın",select:"Seç",selectAll:"Tümünü Seç",sortable:"Sıralanabilir sütun",collapse:"Daralt",expand:"Genişlet"};var zf={};zf={ascending:"висхідний",ascendingSort:t=>`відсортовано за стовпцем ${t.columnName} у висхідному порядку`,columnSize:t=>`${t.value} пікс.`,descending:"низхідний",descendingSort:t=>`відсортовано за стовпцем ${t.columnName} у низхідному порядку`,resizerDescription:"Натисніть Enter, щоб почати зміну розміру",select:"Вибрати",selectAll:"Вибрати все",sortable:"сортувальний стовпець",collapse:"Згорнути",expand:"Розгорнути"};var Nf={};Nf={ascending:"升序",ascendingSort:t=>`按列 ${t.columnName} 升序排序`,columnSize:t=>`${t.value} 像素`,descending:"降序",descendingSort:t=>`按列 ${t.columnName} 降序排序`,resizerDescription:"按“输入”键开始调整大小。",select:"选择",selectAll:"全选",sortable:"可排序的列",collapse:"折叠",expand:"扩展"};var Of={};Of={ascending:"遞增",ascendingSort:t=>`已依據「${t.columnName}」欄遞增排序`,columnSize:t=>`${t.value} 像素`,descending:"遞減",descendingSort:t=>`已依據「${t.columnName}」欄遞減排序`,resizerDescription:"按 Enter 鍵以開始調整大小",select:"選取",selectAll:"全選",sortable:"可排序的欄",collapse:"收合",expand:"展開"};var Wt={};Wt={"ar-AE":uf,"bg-BG":af,"cs-CZ":sf,"da-DK":cf,"de-DE":df,"el-GR":ff,"en-US":pf,"es-ES":bf,"et-EE":hf,"fi-FI":mf,"fr-FR":gf,"he-IL":yf,"hr-HR":$f,"hu-HU":vf,"it-IT":xf,"ja-JP":Cf,"ko-KR":Ef,"lt-LT":wf,"lv-LV":Sf,"nb-NO":Df,"nl-NL":kf,"pl-PL":Pf,"pt-BR":Af,"pt-PT":Tf,"ro-RO":Bf,"ru-RU":Kf,"sk-SK":Rf,"sl-SI":Mf,"sr-SP":If,"sv-SE":Ff,"tr-TR":Lf,"uk-UA":zf,"zh-CN":Nf,"zh-TW":Of};class $g extends lf{isCell(e){return e.type==="cell"||e.type==="rowheader"||e.type==="column"}getKeyBelow(e,n){let l=this.collection.getItem(e);if(!l)return null;if(l.type==="column"){let r=Pt(Ce(l,this.collection));if(r)return r.key;let o=this.getFirstKey();return o==null||!this.collection.getItem(o)?null:super.getKeyForItemInRowByIndex(o,l.index)}return super.getKeyBelow(e,n)}getKeyAbove(e,n){let l=this.collection.getItem(e);if(!l)return null;if(l.type==="column"){let i=l.parentKey!=null?this.collection.getItem(l.parentKey):null;return i&&i.type==="column"?i.key:null}let r=super.getKeyAbove(e,n),o=r!=null?this.collection.getItem(r):null;return o&&o.type!=="headerrow"?r:this.isCell(l)?this.collection.columns[l.index].key:this.collection.columns[0].key}findNextColumnKey(e){let n=this.findNextKey(e.key,r=>r.type==="column");if(n!=null)return n;let l=this.collection.headerRows[e.level];for(let r of Ce(l,this.collection))if(r.type==="column")return r.key;return null}findPreviousColumnKey(e){let n=this.findPreviousKey(e.key,o=>o.type==="column");if(n!=null)return n;let l=this.collection.headerRows[e.level],r=[...Ce(l,this.collection)];for(let o=r.length-1;o>=0;o--){let i=r[o];if(i.type==="column")return i.key}return null}getKeyRightOf(e){let n=this.collection.getItem(e);return n?n.type==="column"?this.direction==="rtl"?this.findPreviousColumnKey(n):this.findNextColumnKey(n):super.getKeyRightOf(e):null}getKeyLeftOf(e){let n=this.collection.getItem(e);return n?n.type==="column"?this.direction==="rtl"?this.findNextColumnKey(n):this.findPreviousColumnKey(n):super.getKeyLeftOf(e):null}getKeyForSearch(e,n){if(!this.collator)return null;let l=this.collection,r=n??this.getFirstKey();if(r==null)return null;let o=l.getItem(r);(o==null?void 0:o.type)==="cell"&&(r=o.parentKey??null);let i=!1;for(;r!=null;){let u=l.getItem(r);if(!u)return null;if(u.textValue){let a=u.textValue.slice(0,e.length);if(this.collator.compare(a,e)===0)return u.key}for(let a of Ce(u,this.collection)){let c=l.columns[a.index];if(l.rowHeaderColumnKeys.has(c.key)&&a.textValue){let f=a.textValue.slice(0,e.length);if(this.collator.compare(f,e)===0){let d=n!=null?l.getItem(n):o;return(d==null?void 0:d.type)==="cell"?a.key:u.key}}}r=this.getKeyBelow(r),r==null&&!i&&(r=this.getFirstKey(),i=!0)}return null}}function vg(t){return t&&t.__esModule?t.default:t}function xg(t,e,n){let{keyboardDelegate:l,isVirtualized:r,layoutDelegate:o,layout:i}=t,u=En({usage:"search",sensitivity:"base"}),{direction:a}=Re(),c=e.selectionManager.disabledBehavior,f=s.useMemo(()=>l||new $g({collection:e.collection,disabledKeys:e.disabledKeys,disabledBehavior:c,ref:n,direction:a,collator:u,layoutDelegate:o,layout:i}),[l,e.collection,e.disabledKeys,c,n,a,u,o,i]),d=$e(t.id);eo.set(e,d);let{gridProps:b}=yg({...t,id:d,keyboardDelegate:f},e,n);r&&(b["aria-rowcount"]=e.collection.size+e.collection.headerRows.length),e.treeColumn!=null&&(b.role="treegrid");let{column:p,direction:h}=e.sortDescriptor||{},$=Ne(vg(Wt),"@react-aria/table"),y=s.useMemo(()=>{var E;let v=((E=e.collection.columns.find(C=>C.key===p))==null?void 0:E.textValue)??"";return h&&p?$.format(`${h}Sort`,{columnName:v}):void 0},[h,p,e.collection.columns]),m=mn(y);return $r(()=>{y&>(y,"assertive",500)},[y]),{gridProps:G(b,m,{"aria-describedby":[m["aria-describedby"],b["aria-describedby"]].filter(Boolean).join(" ")})}}function Vf(t,e,n){let{node:l,isVirtualized:r,focusMode:o="child",shouldSelectOnPressUp:i,onAction:u}=t,{direction:a}=Re(),{keyboardDelegate:c,actions:{onCellAction:f}}=Qr.get(e),d=s.useRef(null),b=()=>{if(n.current){let v=Fe(n.current);if(o==="child"){if(vt(n.current)&&n.current!==oe())return;let E=e.selectionManager.childFocusStrategy==="last"?Il(v):v.firstChild();if(E){ve(E);return}}(d.current!=null&&l.key!==d.current||!vt(n.current))&&ve(n.current)}},{itemProps:p,isPressed:h}=jr({selectionManager:e.selectionManager,key:l.key,ref:n,isVirtualized:r,focus:b,shouldSelectOnPressUp:i,onAction:f?()=>f(l.key):u,isDisabled:e.collection.size===0}),$=v=>{var R,A,K,P,z;let E=oe();if(!te(v.currentTarget,j(v))||e.isKeyboardNavigationDisabled||!n.current||!E)return;let C=Fe(n.current);switch(C.currentNode=E,v.key){case"ArrowLeft":{let B=a==="rtl"?C.nextNode():C.previousNode();if(o==="child"&&B===n.current&&(B=null),v.preventDefault(),v.stopPropagation(),B)ve(B),it(B,{containingElement:Xe(n.current)});else{if(((R=c.getKeyLeftOf)==null?void 0:R.call(c,l.key))!==l.key){(A=n.current.parentElement)==null||A.dispatchEvent(new KeyboardEvent(v.nativeEvent.type,v.nativeEvent));break}o==="cell"&&a==="rtl"?(ve(n.current),it(n.current,{containingElement:Xe(n.current)})):(C.currentNode=n.current,B=a==="rtl"?C.firstChild():Il(C),B&&(ve(B),it(B,{containingElement:Xe(n.current)})))}break}case"ArrowRight":{let B=a==="rtl"?C.previousNode():C.nextNode();if(o==="child"&&B===n.current&&(B=null),v.preventDefault(),v.stopPropagation(),B)ve(B),it(B,{containingElement:Xe(n.current)});else{if(((K=c.getKeyRightOf)==null?void 0:K.call(c,l.key))!==l.key){(P=n.current.parentElement)==null||P.dispatchEvent(new KeyboardEvent(v.nativeEvent.type,v.nativeEvent));break}o==="cell"&&a==="ltr"?(ve(n.current),it(n.current,{containingElement:Xe(n.current)})):(C.currentNode=n.current,B=a==="rtl"?Il(C):C.firstChild(),B&&(ve(B),it(B,{containingElement:Xe(n.current)})))}break}case"ArrowUp":case"ArrowDown":!v.altKey&&te(n.current,j(v))&&(v.stopPropagation(),v.preventDefault(),(z=n.current.parentElement)==null||z.dispatchEvent(new KeyboardEvent(v.nativeEvent.type,v.nativeEvent)));break}},y=v=>{if(d.current=l.key,j(v)!==n.current){Ft()||e.selectionManager.setFocusedKey(l.key);return}requestAnimationFrame(()=>{o==="child"&&oe()===n.current&&b()})},m=G(p,{role:"gridcell",onKeyDownCapture:$,"aria-colspan":l.colSpan,"aria-colindex":l.colIndex!=null?l.colIndex+1:void 0,colSpan:r?void 0:l.colSpan,onFocus:y});return r&&(m["aria-colindex"]=(l.colIndex??l.index)+1),i&&m.tabIndex!=null&&m.onPointerDown==null&&(m.onPointerDown=v=>{let E=v.currentTarget,C=E.getAttribute("tabindex");E.removeAttribute("tabindex"),requestAnimationFrame(()=>{C!=null&&E.setAttribute("tabindex",C)})}),{gridCellProps:m,isPressed:h}}function Il(t){let e=null,n=null;do n=t.lastChild(),n&&(e=n);while(n);return e}function Cg(t){return t&&t.__esModule?t.default:t}function Eg(t,e,n){var m,v;let{node:l}=t,r=l.props.allowsSorting,{gridCellProps:o}=Vf({...t,focusMode:"child"},e,n),i=l.props.isSelectionCell&&e.selectionManager.selectionMode==="single",{pressProps:u,isPressed:a}=lt({isDisabled:!r||i,onPress(){e.sort(l.key)},ref:n}),{focusableProps:c}=jt({},n),f,d=((m=e.sortDescriptor)==null?void 0:m.column)===l.key,b=(v=e.sortDescriptor)==null?void 0:v.direction;l.props.allowsSorting&&!rn()&&(f=d?b:"none");let p=Ne(Cg(Wt),"@react-aria/table"),h;r&&(h=`${p.format("sortable")}`,d&&b&&rn()&&(h=`${h}, ${p.format(b)}`));let $=mn(h),y=e.collection.size===0;return s.useEffect(()=>{y&&e.selectionManager.focusedKey===l.key&&e.selectionManager.setFocusedKey(null)},[y,e.selectionManager,l.key]),{columnHeaderProps:{...G(c,o,u,$,y?{tabIndex:-1}:null),role:"columnheader",id:rf(e,l.key),"aria-colspan":l.colSpan&&l.colSpan>1?l.colSpan:void 0,"aria-sort":f},isPressed:a}}function wg(t,e,n){var h,$;let{node:l,isVirtualized:r,shouldSelectOnPressUp:o,onAction:i}=t,{actions:u,shouldSelectOnPressUp:a}=Qr.get(e),c=u.onRowAction?()=>{var y;return(y=u.onRowAction)==null?void 0:y.call(u,l.key)}:i,{itemProps:f,...d}=jr({selectionManager:e.selectionManager,key:l.key,ref:n,isVirtualized:r,shouldSelectOnPressUp:a||o,onAction:c||(h=l==null?void 0:l.props)!=null&&h.onAction?dt(($=l==null?void 0:l.props)==null?void 0:$.onAction,c):void 0,isDisabled:e.collection.size===0}),b=e.selectionManager.isSelected(l.key),p={role:"row","aria-selected":e.selectionManager.selectionMode!=="none"?b:void 0,"aria-disabled":d.isDisabled||void 0,...f};return r&&(p["aria-rowindex"]=l.index+1),{rowProps:p,...d}}function Sg(t){return t&&t.__esModule?t.default:t}const Hi={expand:{ltr:"ArrowRight",rtl:"ArrowLeft"},collapse:{ltr:"ArrowLeft",rtl:"ArrowRight"}};function Dg(t,e,n){var $,y;let{node:l,isVirtualized:r}=t,{rowProps:o,...i}=wg(t,e,n),{direction:u}=Re();r&&e.treeColumn==null?o["aria-rowindex"]=l.index+1+e.collection.headerRows.length:delete o["aria-rowindex"];let a=e.treeColumn!=null&&(e.expandedKeys==="all"||e.expandedKeys.has(l.key)),c=Ne(Sg(Wt),"@react-aria/table"),f=un({"aria-label":a?c.format("collapse"):c.format("expand"),"aria-labelledby":fr(e,l.key)}),d={},b={};if(e.treeColumn!=null){let m=e.collection.getItem(l.key);if(m!=null){let v=Wi(e.collection,l),E=(($=m.props)==null?void 0:$.hasChildRows)||((y=m.props)==null?void 0:y.UNSTABLE_childItems)||(v==null?void 0:v.type)!=="cell",C=e.collection.getItem(l.parentKey),R=C.type==="tablebody"||C.type==="body",A=Wi(e.collection,C);for(;A&&A.type!=="item"&&A.prevKey!=null;)A=e.collection.getItem(A.prevKey);d={onKeyDown:K=>{K.key===Hi.expand[u]&&e.selectionManager.focusedKey===m.key&&E&&e.expandedKeys!=="all"&&!e.expandedKeys.has(m.key)?(e.toggleKey(m.key),K.stopPropagation()):K.key===Hi.collapse[u]&&e.selectionManager.focusedKey===m.key&&(e.expandedKeys!=="all"?E&&e.expandedKeys.has(m.key)?(e.toggleKey(m.key),K.stopPropagation()):!e.expandedKeys.has(m.key)&&m.parentKey!=null&&m.level>0&&(e.selectionManager.setFocusedKey(m.parentKey),K.stopPropagation()):e.expandedKeys==="all"&&(e.toggleKey(m.key),K.stopPropagation()))},"aria-expanded":E?e.expandedKeys==="all"||e.expandedKeys.has(l.key):void 0,"aria-level":m.level+1,"aria-posinset":m.index-(R?0:e.collection.columnCount)+1,"aria-setsize":A.index-(R?0:e.collection.columnCount)+1},b={isDisabled:i.isDisabled,onPress:()=>{i.isDisabled||(e.toggleKey(l.key),e.selectionManager.setFocused(!0),e.selectionManager.setFocusedKey(l.key))},excludeFromTabOrder:!0,preventFocusOnPress:!0,"data-react-aria-prevent-focus":!0,...f}}}let p=$p(l.props),h=i.hasAction?p:{};return{rowProps:{...G(o,d,h),"aria-labelledby":fr(e,l.key)},expandButtonProps:b,...i}}function Wi(t,e){return"lastChildKey"in e?e.lastChildKey!=null?t.getItem(e.lastChildKey):null:Array.from(e.childNodes).findLast(n=>n.parentKey===e.key)}function kg(t,e,n){let{node:l,isVirtualized:r}=t,o={role:"row"};return r&&e.treeColumn==null&&(o["aria-rowindex"]=l.index+1),{rowProps:o}}function Pg(t,e,n){var i;let{gridCellProps:l,isPressed:r}=Vf(t,e,n),o=(i=t.node.column)==null?void 0:i.key;return o!=null&&e.collection.rowHeaderColumnKeys.has(o)&&(l.role="rowheader",l.id=of(e,t.node.parentKey,o)),{gridCellProps:l,isPressed:r}}function Ag(t){return t&&t.__esModule?t.default:t}function Tg(t,e){let{key:n}=t;const{checkboxProps:l}=lg(t,e);return{checkboxProps:{...l,"aria-labelledby":`${l.id} ${fr(e,n)}`}}}function Bg(t){let{isEmpty:e,isSelectAll:n,selectionMode:l}=t.selectionManager;return{checkboxProps:{"aria-label":Ne(Ag(Wt),"@react-aria/table").format(l==="single"?"select":"selectAll"),isSelected:n,isDisabled:l!=="multiple"||t.collection.size===0||t.collection.rows.length===1&&t.collection.rows[0].type==="loader",isIndeterminate:!e&&!n,onChange:()=>t.selectionManager.toggleSelectAll()}}}function Kg(t){return t&&t.__esModule?t.default:t}function Rg(t,e,n){let{column:l,triggerRef:r,isDisabled:o,onResizeStart:i,onResize:u,onResizeEnd:a,"aria-label":c}=t;const f=Ne(Kg(Wt),"@react-aria/table");let d=$e(),b=e.resizingColumn===l.key,p=s.useRef(b),h=s.useRef(null),$=s.useRef(!1),y=e.tableState.isKeyboardNavigationDisabled,{direction:m}=Re(),v=s.useCallback(F=>{p.current||(h.current=e.updateResizedColumns(F.key,e.getColumnWidth(F.key)),e.startResize(F.key),e.tableState.setKeyboardNavigationDisabled(!0),i==null||i(h.current)),p.current=!0},[e,i]),E=s.useCallback((F,V)=>{let q=e.updateResizedColumns(F.key,V);u==null||u(q),h.current=q},[e,u]),C=s.useCallback(F=>{p.current&&(h.current==null&&(h.current=e.updateResizedColumns(F.key,e.getColumnWidth(F.key))),e.endResize(),e.tableState.setKeyboardNavigationDisabled(!1),a==null||a(h.current),p.current=!1,r!=null&&r.current&&!$.current&&ve(r.current)),h.current=null},[e,r,a]),{keyboardProps:R}=Tr({onKeyDown:F=>{y?(F.key==="Escape"||F.key==="Enter"||F.key===" "||F.key==="Tab")&&(F.preventDefault(),C(l)):(F.continuePropagation(),F.key==="Enter"&&v(l))}});const A=s.useRef(0),{moveProps:K}=T3({onMoveStart(){A.current=e.getColumnWidth(l.key),v(l)},onMove(F){let{deltaX:V,deltaY:q,pointerType:Q}=F;m==="rtl"&&(V*=-1),Q==="keyboard"&&(q!==0&&V===0&&(V=q*-1),V*=10),V!==0&&(A.current+=V,E(l,A.current))},onMoveEnd(F){let{pointerType:V}=F;A.current=0,(V==="mouse"||V==="touch"&&$.current)&&C(l)}});let P=s.useCallback(F=>{var V;y&&((V=K.onKeyDown)==null||V.call(K,F))},[y,K]),z=Math.floor(e.getColumnMinWidth(l.key)),B=Math.floor(e.getColumnMaxWidth(l.key));B===1/0&&(B=Number.MAX_SAFE_INTEGER);let N=Math.floor(e.getColumnWidth(l.key)),U=Nu();U==="virtual"&&typeof window<"u"&&"ontouchstart"in window&&(U="touch");let _=(r==null?void 0:r.current)==null&&(U==="keyboard"||U==="virtual")&&!b?f.format("resizerDescription"):void 0,x=mn(_),S={"aria-label":c,"aria-orientation":"horizontal","aria-labelledby":`${d} ${rf(e.tableState,l.key)}`,"aria-valuetext":f.format("columnSize",{value:N}),type:"range",min:z,max:B,value:N,...x};const I=s.useCallback(()=>{n.current&&ve(n.current)},[n]);let w=e.resizingColumn,k=s.useRef(null),D=Ee(v);s.useEffect(()=>{if(k.current!==w&&w!=null&&w===l.key){$.current=oe()===n.current,D(l);let F=setTimeout(()=>I(),0),V=setTimeout(I,400);return()=>{clearTimeout(F),clearTimeout(V)}}k.current=w},[w,l,I,n]);let T=F=>{let V=e.getColumnWidth(l.key),q=parseFloat(j(F).value);q>V?q=V+10:q=V-10,E(l,q)},{pressProps:O}=lt({preventFocusOnPress:!0,onPressStart:F=>{if(!(F.ctrlKey||F.altKey||F.metaKey||F.shiftKey||F.pointerType==="keyboard")){if(F.pointerType==="virtual"&&e.resizingColumn!=null){C(l);return}I(),F.pointerType!=="virtual"&&v(l)}},onPress:F=>{(F.pointerType==="touch"&&$.current||F.pointerType==="mouse")&&e.resizingColumn!=null&&C(l)}}),{visuallyHiddenProps:Z}=$n();return{resizerProps:G(R,{...K,onKeyDown:P},O,{style:{touchAction:"none"}}),inputProps:G(Z,{id:d,onBlur:()=>{C(l)},onChange:T,disabled:o},S),isResizing:b}}function Mg(){return{rowGroupProps:{role:"rowgroup"}}}function jf(){return Mg()}function Ig(t){return t&&t.__esModule?t.default:t}class Fg extends Ia{withExpandedKeys(e){let n=this.clone();return n.expandedKeys=e,n.frozen=this.frozen,n.rows=Array.from(n.getRows()),n}addNode(e){super.addNode(e),this.columnsDirty||(this.columnsDirty=e.type==="column"),e.type==="tableheader"&&(this.head=e)}getRows(){let e=[];for(let n of this)(n.type==="tablebody"||n.type==="tablefooter")&&e.push(...this.getChildren(n.key));return e}get body(){for(let e of this)if(e.type==="tablebody")return e;return new Xn(-2)}commit(e,n,l=!1){this.updateColumns(l),this.firstKey=e,this.lastKey=n,this.rows=[];for(let r of this.getRows()){let o=r.lastChildKey;if(o!=null){let i=this.getItem(o);for(;i&&i.type!=="cell";)i=i.prevKey!=null?this.getItem(i.prevKey):null;if(i){let u=(i.colIndex??i.index)+(i.colSpan??1);if(u!==this.columns.length&&!l)throw new Error(`Cell count must match column count. Found ${u} cells and ${this.columns.length} columns.`)}}this.rows.push(r)}super.commit(e,n,l)}updateColumns(e){if(!this.columnsDirty)return;this.rowHeaderColumnKeys=new Set,this.columns=[];let n=new Map,l=r=>{switch(r.type){case"column":n.set(r.key,r),r.hasChildNodes||(r.index=this.columns.length,this.columns.push(r),r.props.isRowHeader&&this.rowHeaderColumnKeys.add(r.key));break}for(let o of this.getChildren(r.key))l(o)};for(let r of this.getChildren(this.head.key))l(r);if(this.headerRows=ef(n,this.columns),this.columnsDirty=!1,this.rowHeaderColumnKeys.size===0&&this.columns.length>0&&!e)throw new Error("A table must have at least one Column with the isRowHeader prop set to true")}get columnCount(){return this.columns.length}*[Symbol.iterator](){let e=this.firstKey;for(;e!=null;){let n=this.getItem(e);n&&(yield n),e=(n==null?void 0:n.nextKey)??null}}getFirstKey(){for(let e of this)if(e.type==="tablebody")return e.firstChildKey??null;return null}getLastKey(){let e=this.lastKey;if(e==null)return null;let n=this.getItem(e);for(;(n==null?void 0:n.lastChildKey)!=null&&(n.type!=="item"||this.expandedKeys.has(n.key));)n=this.getItem(n.lastChildKey);return n==null?void 0:n.key}getKeyAfter(e){let n=this.getItem(e);if((n==null?void 0:n.type)==="column")return n.nextKey??null;if(!n)return null;if(n.type==="item"&&n.firstChildKey!=null&&this.expandedKeys.has(n.key)){let l=this.getItem(n.firstChildKey);for(;l;){if(l.type==="item")return l.key;l=l.nextKey!=null?this.getItem(l.nextKey):null}}return super.getKeyAfter(e)}getKeyBefore(e){var r;let n=this.getItem(e);if((n==null?void 0:n.type)==="column")return n.prevKey??null;if(!n)return null;let l=null;if(n.prevKey!=null){for(n=this.getItem(n.prevKey);n&&(n.type!=="item"||this.expandedKeys.has(n.key))&&n.lastChildKey!=null;)n=this.getItem(n.lastChildKey);l=(n==null?void 0:n.key)??null}return l==null&&(l=n.parentKey),l!=null&&((r=this.getItem(l))==null?void 0:r.type)==="tableheader"?null:l}getChildren(e){let n=this.getItem(e);if(!n){for(let r of this.headerRows)if(r.key===e)return r.childNodes}let l=this;return(n==null?void 0:n.type)==="tablebody"||(n==null?void 0:n.type)==="tablefooter"?{*[Symbol.iterator](){let r=n.firstChildKey,o=r!=null?l.getItem(r):null;for(;o;){yield o;let i=l.getKeyAfter(o.key);if(o=i!=null?l.getItem(i):null,o&&o.parentKey===n.parentKey)break}}}:{*[Symbol.iterator](){let r=l.getItem(e),o=(r==null?void 0:r.firstChildKey)!=null?l.getItem(r.firstChildKey):null;for(;o&&(yield o,o=o.nextKey!=null?l.getItem(o.nextKey):null,!((r==null?void 0:r.type)==="item"&&(o==null?void 0:o.type)!=="cell")););}}}clone(){let e=super.clone();return e.headerRows=this.headerRows,e.columns=this.columns,e.rows=this.rows,e.rowHeaderColumnKeys=this.rowHeaderColumnKeys,e.head=this.head,e}getTextValue(e){let n=this.getItem(e);if(!n)return"";if(n.textValue)return n.textValue;let l=this.rowHeaderColumnKeys,r=[];for(let o of this.getChildren(e)){let i=this.columns[o.index];if(l.has(i.key)&&o.textValue&&r.push(o.textValue),r.length===l.size)break}return r.join(" ")}constructor(...e){super(...e),this.headerRows=[],this.columns=[],this.rows=[],this.rowHeaderColumnKeys=new Set,this.head=new Yn(-1),this.columnsDirty=!0,this.expandedKeys=new Set}}const to=s.createContext(null),Lg=s.forwardRef(function(e,n){let l=ke(n),r=s.useRef(null),o=s.useRef(null),[i,u]=s.useState(0);ne(()=>{let c=r.current;for(;c&&c!==l.current&&!st(c);)c=c.parentElement;o.current=c},[l]),an({ref:o,box:"border-box",onResize(){var c;u(((c=o.current)==null?void 0:c.clientWidth)??0)}}),ne(()=>{var c;u(((c=o.current)==null?void 0:c.clientWidth)??0)},[]);let a=s.useMemo(()=>({tableRef:r,scrollRef:o,tableWidth:i,useTableColumnResizeState:fg,onResizeStart:e.onResizeStart,onResize:e.onResize,onResizeEnd:e.onResizeEnd}),[r,i,e.onResizeStart,e.onResize,e.onResizeEnd]);return g.createElement(le.div,{render:e.render,...ie(e,{global:!0}),ref:l,className:e.className||"react-aria-ResizableTableContainer",style:e.style,onScroll:e.onScroll},g.createElement(to.Provider,{value:a},e.children))}),zg=s.createContext(null),Ze=s.createContext(null),no=s.createContext(null),Ng=s.forwardRef(function(e,n){var f;[e,n]=xe(e,n,zg);let l=Hr(e),{selectionBehavior:r,selectionMode:o,disallowEmptySelection:i}=l,u=!!((f=e.dragAndDropHooks)!=null&&f.useDraggableCollectionState),a=s.useMemo(()=>({selectionBehavior:o==="none"?null:r,selectionMode:o,disallowEmptySelection:i,allowsDragging:u}),[r,o,i,u]),c=g.createElement(jg.Provider,{value:a},g.createElement(xn,e));return g.createElement(zr,{content:c,createCollection:()=>new Fg},d=>g.createElement(Vg,{props:e,forwardedRef:n,selectionState:l,collection:d}))});let Og=s.forwardRef(function(e,n){let{isVirtualized:l}=s.useContext(fe);return l?g.createElement(le.div,{...e,ref:n}):g.createElement(le.table,{...e,ref:n})});const Ui={expand:{ltr:"ArrowRight",rtl:"ArrowLeft"},collapse:{ltr:"ArrowLeft",rtl:"ArrowRight"}};function Vg({props:t,forwardedRef:e,selectionState:n,collection:l}){[t,e]=xe(t,e,rr);let{shouldUseVirtualFocus:r,disallowTypeAhead:o,filter:i,...u}=t,a=s.useContext(to);e=ke(s.useMemo(()=>ft(e,a==null?void 0:a.tableRef),[e,a==null?void 0:a.tableRef]));let[c,f]=Ct(t.expandedKeys?new Set(t.expandedKeys):void 0,t.defaultExpandedKeys?new Set(t.defaultExpandedKeys):new Set,t.onExpandedChange);l=s.useMemo(()=>l.withExpandedKeys(c),[l,c]);let d=hg({...u,collection:l,children:void 0,UNSAFE_selectionState:n,expandedKeys:c,onExpandedChange:f}),b=mg(d,i),{isVirtualized:p,layoutDelegate:h,dropTargetDelegate:$,CollectionRoot:y}=s.useContext(fe),{dragAndDropHooks:m}=t,{gridProps:v}=xg({...u,layoutDelegate:h,isVirtualized:p},b,e),E=b.selectionManager,C=!!(m!=null&&m.useDraggableCollectionState),R=!!(m!=null&&m.useDroppableCollectionState);s.useRef(C),s.useRef(R),s.useEffect(()=>{},[C,R]);let A,K,P,z=!1,B=null,N=s.useRef(null),{direction:U}=Re(),[_]=s.useState(()=>new rg);if(C&&m){A=m.useDraggableCollectionState({collection:b.collection,selectionManager:E,preview:m.renderDragPreview?N:void 0}),m.useDraggableCollection({},A,e);let Z=m.DragPreview;B=m.renderDragPreview?g.createElement(Z,{ref:N},m.renderDragPreview):null}if(R&&m){K=m.useDroppableCollectionState({collection:b.collection,selectionManager:E});let Z=new sl({collection:b.collection,disabledKeys:E.disabledKeys,disabledBehavior:E.disabledBehavior,ref:e,layoutDelegate:h}),F=m.dropTargetDelegate||$||new m.ListDropTargetDelegate(l.rows,e);_.setup(F,d,U),P=m.useDroppableCollection({keyboardDelegate:Z,dropTargetDelegate:_,onDropActivate:V=>{var q;if(V.target.type==="item"){let Q=V.target.key,J=d.collection.getItem(Q),ge=c.has(Q);J&&J.hasChildNodes&&(!ge||(q=m==null?void 0:m.isVirtualDragging)!=null&&q.call(m))&&d.toggleKey(Q)}},onKeyDown:V=>{let q=K==null?void 0:K.target;if(q&&q.type==="item"&&q.dropPosition==="on"){let Q=d.collection.getItem(q.key);(V.key===Ui.expand[U]&&(Q!=null&&Q.hasChildNodes)&&!d.expandedKeys.has(q.key)||V.key===Ui.collapse[U]&&(Q!=null&&Q.hasChildNodes)&&d.expandedKeys.has(q.key))&&d.toggleKey(q.key)}}},K,e),z=K.isDropTarget({type:"root"})}let{focusProps:x,isFocused:S,isFocusVisible:I}=je(),w=ce({...t,children:void 0,defaultClassName:"react-aria-Table",values:{isDropTarget:z,isFocused:S,isFocusVisible:I,state:b}}),k=!!(C&&!(A!=null&&A.isDisabled)),D=w.style,T=null;a&&(T=a.useTableColumnResizeState({tableWidth:a.tableWidth},b),p||(D={...D,tableLayout:"fixed",width:"min-content"}));let O=ie(t,{global:!0});return g.createElement(_e,{values:[[Ze,b],[no,T],[qe,{dragAndDropHooks:m,dragState:A,dropState:K}],[qr,{render:e0}],[rr,null],[ja,null]]},g.createElement(Mr,null,g.createElement(Og,{...G(O,w,v,x,P==null?void 0:P.collectionProps),style:D,ref:e,slot:t.slot||void 0,onScroll:t.onScroll,"data-allows-dragging":k||void 0,"data-drop-target":z||void 0,"data-focused":S||void 0,"data-focus-visible":I||void 0},g.createElement(_a,null,g.createElement(y,{collection:b.collection,scrollRef:(a==null?void 0:a.scrollRef)??e,persistedKeys:yc(E,m,K)})))),B)}const jg=s.createContext(null),so=class so extends Ge{};so.type="tableheader";let Yn=so,_g=s.forwardRef(function(e,n){let{isVirtualized:l}=s.useContext(fe);return l?g.createElement(le.div,{...e,ref:n}):g.createElement(le.thead,{...e,ref:n})});const Hg=al(Yn,(t,e)=>{let n=s.useContext(Ze).collection,l=Lr({items:n.headerRows,children:s.useCallback(a=>{switch(a.type){case"headerrow":return g.createElement(Ug,{item:a});default:throw new Error("Unsupported node type in TableHeader: "+a.type)}},[])}),{rowGroupProps:r}=jf(),{hoverProps:o,isHovered:i}=He({onHoverStart:t.onHoverStart,onHoverChange:t.onHoverChange,onHoverEnd:t.onHoverEnd}),u=ce({...t,children:void 0,defaultClassName:"react-aria-TableHeader",values:{isHovered:i}});return g.createElement(_g,{...G(ie(t,{global:!0}),r,o),...u,ref:e,"data-hovered":i||void 0},l)},t=>g.createElement(xn,{dependencies:t.dependencies,items:t.columns},t.children));let Wg=s.forwardRef(function(e,n){let{isVirtualized:l}=s.useContext(fe);return l?g.createElement("div",{...e,ref:n}):g.createElement("tr",{...e,ref:n})});function Ug({item:t}){let e=s.useRef(null),n=s.useContext(Ze),{isVirtualized:l,CollectionBranch:r}=s.useContext(fe),{rowProps:o}=kg({node:t,isVirtualized:l},n,e),{checkboxProps:i}=Bg(n);return g.createElement(Wg,{...o,ref:e},g.createElement(_e,{values:[[Xr,{slots:{selection:i}}],[Tc,{slots:{selection:i}}]]},g.createElement(r,{collection:n.collection,parent:t})))}const co=class co extends Ge{};co.type="column";let pr=co,Gg=s.forwardRef(function(e,n){let{isVirtualized:l}=s.useContext(fe);return l?g.createElement(le.div,{...e,ref:n}):g.createElement(le.th,{...e,ref:n})});const qg=vn(pr,(t,e,n)=>{var v,E;let l=ke(e),r=s.useContext(Ze),{isVirtualized:o}=s.useContext(fe),{columnHeaderProps:i,isPressed:u}=Eg({node:n,isVirtualized:o},r,l),{isFocused:a,isFocusVisible:c,focusProps:f}=je(),d=s.useContext(no),b=!1;d&&(b=d.resizingColumn===n.key);let{hoverProps:p,isHovered:h}=He({isDisabled:!t.allowsSorting}),$=ce({...t,id:void 0,children:n.rendered,defaultClassName:"react-aria-Column",values:{isHovered:h,isPressed:u,isFocused:a,isFocusVisible:c,allowsSorting:n.props.allowsSorting,sortDirection:((v=r.sortDescriptor)==null?void 0:v.column)===n.key?r.sortDescriptor.direction:void 0,isResizing:b,startResize:()=>{if(d)d.startResize(n.key),r.setKeyboardNavigationDisabled(!0);else throw new Error("Wrap your in a to enable column resizing")},sort:C=>{r.sort(n.key,C)}}}),y=$.style;d&&(y={...y,width:d.getColumnWidth(n.key)});let m=ie(t,{global:!0});return delete m.id,g.createElement(Gg,{...G(m,i,f,p),...$,style:y,ref:l,"data-hovered":h||void 0,"data-pressed":u||void 0,"data-focused":a||void 0,"data-focus-visible":c||void 0,"data-resizing":b||void 0,"data-allows-sorting":n.props.allowsSorting||void 0,"data-sort-direction":((E=r.sortDescriptor)==null?void 0:E.column)===n.key?r.sortDescriptor.direction:void 0},g.createElement(_e,{values:[[_f,{column:n,triggerRef:l}],[fe,Nr]]},$.children))}),_f=s.createContext(null),Zg=s.forwardRef(function(e,n){let l=s.useContext(no);if(!l)throw new Error("Wrap your
in a to enable column resizing");let r=Ne(Ig(gc),"react-aria-components"),{onResizeStart:o,onResize:i,onResizeEnd:u}=s.useContext(to),{column:a,triggerRef:c}=s.useContext(_f),f=s.useRef(null),{resizerProps:d,inputProps:b,isResizing:p}=Rg({column:a,"aria-label":e["aria-label"]||r.format("tableResizer"),onResizeStart:o,onResize:i,onResizeEnd:u,triggerRef:c},l,f),{focusProps:h,isFocused:$,isFocusVisible:y}=je(),{hoverProps:m,isHovered:v}=He(e),E=l.getColumnMinWidth(a.key)>=l.getColumnWidth(a.key),C=l.getColumnMaxWidth(a.key)<=l.getColumnWidth(a.key),{direction:R}=Re(),A="both";E?A=R==="rtl"?"right":"left":C?A=R==="rtl"?"left":"right":A="both";let K=ke(n),[P,z]=s.useState("");s.useEffect(()=>{if(!K.current)return;let S=window.getComputedStyle(K.current);z(S.cursor)},[K,A]);let B=ce({...e,defaultClassName:"react-aria-ColumnResizer",values:{isFocused:$,isFocusVisible:y,isResizing:p,isHovered:v,resizableDirection:A}}),[N,U]=s.useState(!1),_=S=>{S.pointerType==="mouse"&&U(!0)};!p&&N&&U(!1);let x=ie(e,{global:!0});return g.createElement(le.div,{ref:K,role:"presentation",...G(x,B,d,{onPointerDown:_},m),"data-hovered":v||void 0,"data-focused":$||void 0,"data-focus-visible":y||void 0,"data-resizing":p||void 0,"data-resizable-direction":A},B.children,g.createElement("input",{ref:f,...G(b,h)}),p&&N&&Yi.createPortal(g.createElement("div",{style:{position:"fixed",top:0,left:0,bottom:0,right:0,cursor:P}}),document.body))}),fo=class fo extends ul{};fo.type="tablebody";let Xn=fo,Yg=s.forwardRef(function(e,n){let{isVirtualized:l}=s.useContext(fe);return l?g.createElement(le.div,{...e,ref:n}):g.createElement(le.tbody,{...e,ref:n})});const Xg=al(Xn,(t,e,n)=>{let l=s.useContext(Ze),{isVirtualized:r}=s.useContext(fe),o=l.collection,{CollectionBranch:i}=s.useContext(fe),{dragAndDropHooks:u,dropState:a}=s.useContext(qe),c=!!(u!=null&&u.useDroppableCollectionState)&&!(a!=null&&a.isDisabled),f=c&&!!a&&(a.isDropTarget({type:"root"})??!1),d=o.size===0,b={isDropTarget:f,isEmpty:d},p=ce({...t,id:void 0,children:void 0,defaultClassName:"react-aria-TableBody",values:b}),h,$=o.columnCount;if(d&&t.renderEmptyState&&l){let v={},E={},C={};r?(E["aria-colspan"]=$,C={display:"contents"}):E.colSpan=$,h=g.createElement(Lt,{role:"row",...v,style:C},g.createElement(zt,{role:"rowheader",...E,style:C},t.renderEmptyState(b)))}let{rowGroupProps:y}=jf(),m=ie(t,{global:!0});return g.createElement(Yg,{...G(m,p,y),ref:e,"data-empty":d||void 0},c&&g.createElement(o0,null),g.createElement(i,{collection:o,parent:n,renderDropIndicator:Zr(u,a)}),h)}),po=class po extends ul{};po.type="tablefooter";let Gi=po;const Hf=s.createContext({isFocusVisibleWithinRow:!1}),bo=class bo extends Ge{filter(e,n,l){let r=e.getChildren(this.key);for(let o of r)if(l(o.textValue,o)){let i=this.clone();return n.addDescendants(i,e),i}return null}};bo.type="item";let br=bo,Lt=s.forwardRef(function(e,n){let{isVirtualized:l}=s.useContext(fe);return l?g.createElement(le.div,{...e,ref:n}):g.createElement(le.tr,{...e,ref:n})});const Jg=al(br,(t,e,n)=>{var k;let l=ke(e),r=s.useContext(Ze),{dragAndDropHooks:o,dragState:i,dropState:u}=s.useContext(qe),{isVirtualized:a,CollectionBranch:c}=s.useContext(fe),f=i&&!(i.isDisabled||i.selectionManager.isDisabled(n.key)),{rowProps:d,expandButtonProps:b,...p}=Dg({node:n,shouldSelectOnPressUp:!!i,isVirtualized:a},r,l),{isFocused:h,isFocusVisible:$,focusProps:y}=je(),{isFocusVisible:m,focusProps:v}=je({within:!0}),{hoverProps:E,isHovered:C}=He({isDisabled:!p.allowsSelection&&!p.hasAction&&!f,onHoverStart:t.onHoverStart,onHoverChange:t.onHoverChange,onHoverEnd:t.onHoverEnd}),{checkboxProps:R}=Tg({key:n.key},r),A;i&&o&&(A=o.useDraggableItem({key:n.key,hasDragButton:!0},i));let K,P=s.useRef(null),{visuallyHiddenProps:z}=$n();u&&o&&(K=o.useDropIndicator({target:{type:"item",key:n.key,dropPosition:"on"}},u,P));let B=s.useRef(null);s.useEffect(()=>{i&&B.current},[]);let N=i&&i.isDragging(n.key),{children:U,..._}=t,x=t.hasChildItems||((k=r.collection.getItem(n.lastChildKey))==null?void 0:k.type)!=="cell",S=x&&r.expandedKeys.has(n.key),I=ce({..._,id:void 0,defaultClassName:"react-aria-Row",defaultStyle:{"--table-row-level":n.level+1},values:{...p,state:r,isHovered:C,isFocused:h,isFocusVisible:$,selectionMode:r.selectionManager.selectionMode,selectionBehavior:r.selectionManager.selectionBehavior,isDragging:N,isDropTarget:K==null?void 0:K.isDropTarget,isFocusVisibleWithin:m,id:n.key,hasChildItems:x,isExpanded:S,level:n.level+1}}),w=ie(t,{global:!0});return delete w.id,delete w.onClick,g.createElement(g.Fragment,null,K&&!K.isHidden&&g.createElement(Lt,{role:"row",style:{height:0}},g.createElement(zt,{role:"gridcell",colSpan:r.collection.columnCount,style:{padding:0}},g.createElement("div",{role:"button",...z,...K.dropIndicatorProps,ref:P}))),g.createElement(Lt,{...G(w,I,d,y,E,A==null?void 0:A.dragProps,v),ref:l,"data-disabled":p.isDisabled||void 0,"data-selected":p.isSelected||void 0,"data-hovered":C||void 0,"data-focused":p.isFocused||void 0,"data-focus-visible":$||void 0,"data-pressed":p.isPressed||void 0,"data-dragging":N||void 0,"data-drop-target":(K==null?void 0:K.isDropTarget)||void 0,"data-selection-mode":r.selectionManager.selectionMode==="none"?void 0:r.selectionManager.selectionMode,"data-focus-visible-within":m||void 0,"data-expanded":S||void 0,"data-has-child-items":x||void 0,"data-level":n.level+1},g.createElement(_e,{values:[[Xr,{slots:{[mt]:{},selection:R}}],[Tc,{slots:{[mt]:{},selection:R}}],[yn,{slots:{[mt]:{},chevron:b,drag:{...A==null?void 0:A.dragButtonProps,ref:B,style:{pointerEvents:"none"}}}}],[Ha,{isSelected:p.isSelected}],[Hf,{isFocusVisibleWithinRow:m}]]},g.createElement(c,{collection:r.collection,parent:n}))))},t=>{if(t.id==null&&typeof t.children=="function")throw new Error("No id detected for the Row element. The Row element requires a id to be provided to it when the cells are rendered dynamically.");let e=[t.value].concat(t.dependencies);return g.createElement(xn,{dependencies:e,items:t.columns,idScope:t.id},t.children)}),ho=class ho extends Ge{};ho.type="cell";let hr=ho,zt=s.forwardRef(function(e,n){let{isVirtualized:l}=s.useContext(fe);return l?g.createElement(le.div,{...e,ref:n}):g.createElement(le.td,{...e,ref:n})});const Qg=vn(hr,(t,e,n)=>{var K;let l=ke(e),r=s.useContext(Ze),{dragState:o}=s.useContext(qe),{isVirtualized:i}=s.useContext(fe);n.column=r.collection.columns[n.index];let{gridCellProps:u,isPressed:a}=Pg({node:n,shouldSelectOnPressUp:!!o,isVirtualized:i},r,l),{isFocused:c,isFocusVisible:f,focusProps:d}=je(),{hoverProps:b,isHovered:p}=He({}),{isFocusVisibleWithinRow:h}=s.useContext(Hf),$=n.parentKey!=null?r.selectionManager.isSelected(n.parentKey):!1,y=n.colIndex||n.index,m=r.collection.getItem(n.parentKey),v=m.props.hasChildItems||((K=r.collection.getItem(m.lastChildKey))==null?void 0:K.type)!=="cell",E=v&&r.expandedKeys.has(n.parentKey),C=r.selectionManager.isDisabled(n.parentKey),R=ce({...t,id:void 0,defaultClassName:"react-aria-Cell",values:{isFocused:c,isFocusVisible:f,isFocusVisibleWithinRow:h,isPressed:a,isHovered:p,isSelected:$,id:n.key,columnIndex:y,hasChildItems:v,isExpanded:E,isDisabled:C,level:m.level+1,isTreeColumn:n.column.key===r.treeColumn}}),A=ie(t,{global:!0});return delete A.id,g.createElement(zt,{...G(A,R,u,d,b),ref:l,"data-focused":c||void 0,"data-focus-visible":f||void 0,"data-focus-visible-within-row":h||void 0,"data-pressed":a||void 0,"data-selected":$||void 0,"data-column-index":y,"data-expanded":E||void 0,"data-has-child-items":v||void 0,"data-level":m.level+1,"data-tree-column":n.column.key===r.treeColumn||void 0,"data-disabled":C||void 0},g.createElement(fe.Provider,{value:Nr},R.children))});function e0(t,e){var c;e=ke(e);let{dragAndDropHooks:n,dropState:l}=s.useContext(qe),r=s.useRef(null),{dropIndicatorProps:o,isHidden:i,isDropTarget:u}=n.useDropIndicator(t,l,r);if(i)return null;let a=l&&t.target.type==="item"?(((c=l.collection.getItem(t.target.key))==null?void 0:c.level)||0)+1:1;return g.createElement(r0,{...t,dropIndicatorProps:o,isDropTarget:u,buttonRef:r,level:a,ref:e})}let t0=s.forwardRef(function(e,n){let{isVirtualized:l}=s.useContext(fe);return l?g.createElement(le.div,{...e,ref:n}):g.createElement(le.tr,{...e,ref:n})}),n0=s.forwardRef(function(e,n){let{isVirtualized:l}=s.useContext(fe);return l?g.createElement(le.div,{...e,ref:n}):g.createElement(le.td,{...e,ref:n})});function l0(t,e){let{dropIndicatorProps:n,isDropTarget:l,buttonRef:r,level:o,...i}=t,u=s.useContext(Ze),{visuallyHiddenProps:a}=$n(),c=ce({...i,defaultClassName:"react-aria-DropIndicator",defaultStyle:{"--table-row-level":o+1},values:{isDropTarget:l}});return g.createElement(t0,{...ie(t,{global:!0}),...c,role:"row",ref:e,"data-drop-target":l||void 0,"aria-level":o},g.createElement(n0,{role:"gridcell",colSpan:u.collection.columnCount,style:{padding:0}},g.createElement("div",{...a,role:"button",...n,ref:r}),c.children))}const r0=s.forwardRef(l0);function o0(){let t=s.useContext(Ze),{dragAndDropHooks:e,dropState:n}=s.useContext(qe),l=s.useRef(null),{dropIndicatorProps:r}=e.useDropIndicator({target:{type:"root"}},n,l),o=n.isDropTarget({type:"root"}),{visuallyHiddenProps:i}=$n();return!o&&r["aria-hidden"]?null:g.createElement(Lt,{role:"row","aria-hidden":r["aria-hidden"],style:{height:0}},g.createElement(zt,{role:"gridcell",colSpan:t.collection.columnCount,style:{padding:0}},g.createElement("div",{role:"button",...i,...r,ref:l})))}const i0=vn(qn,function(e,n,l){let r=s.useContext(Ze),{isVirtualized:o}=s.useContext(fe),{isLoading:i,onLoadMore:u,scrollOffset:a,...c}=e,f=r.collection.columns.length,d=s.useRef(null),b=s.useMemo(()=>({onLoadMore:u,collection:r==null?void 0:r.collection,sentinelRef:d,scrollOffset:a}),[u,a,r==null?void 0:r.collection]);uu(b,d);let p=ce({...c,id:void 0,children:l.rendered,defaultClassName:"react-aria-TableLoadingIndicator",defaultStyle:{"--table-row-level":l.level+1},values:void 0}),h={},$={},y={};return o?($["aria-colspan"]=f,y={display:"contents"}):$.colSpan=f,g.createElement(g.Fragment,null,g.createElement(Lt,{style:{height:0},inert:au(!0)},g.createElement(zt,{style:{padding:0,border:0}},g.createElement("div",{"data-testid":"loadMoreSentinel",ref:d,style:{position:"relative",height:1,width:1}}))),i&&p.children&&g.createElement(Lt,{...G(ie(e,{global:!0}),h),...p,role:"row",ref:n,"aria-level":l.level+1,"data-level":l.level+1},g.createElement(zt,{role:"rowheader",...$,style:y},p.children)))}),Wf=s.createContext({}),qi=({children:t,className:e,variant:n,...l})=>{const r=g.useMemo(()=>sh({variant:n}),[n]);return M.jsx(Jm,{className:me(e,r.item()),"data-slot":"list-box-item",...l,children:o=>M.jsx(Wf,{value:{slots:r,state:o},children:typeof t=="function"?t(o):t})})},Uf=({children:t,className:e,...n})=>{const{slots:l,state:r}=s.useContext(Wf),o=r==null?void 0:r.isSelected,i=typeof t=="function"?t(r??{}):t||M.jsx("svg",{"aria-hidden":"true","data-slot":"list-box-item-indicator--checkmark",fill:"none",role:"presentation",stroke:"currentColor",strokeDasharray:22,strokeDashoffset:o?44:66,strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,viewBox:"0 0 17 18",children:M.jsx("polyline",{points:"1 9 7 14 15 4"})});return M.jsx(Se.span,{"aria-hidden":"true",className:de(l==null?void 0:l.indicator,e),"data-slot":"list-box-item-indicator","data-visible":o||void 0,...n,children:i})},u0=Object.assign(qi,{Root:qi,Indicator:Uf}),a0=({children:t,className:e,...n})=>{const l=g.useMemo(()=>ch({class:typeof e=="string"?e:void 0}),[e]);return M.jsx(Xm,{className:l,...n,children:t})},s0=a0;function Zi({className:t,variant:e,...n}){const l=g.useMemo(()=>ah({variant:e}),[e]);return M.jsx(Zm,{className:me(t,l),"data-slot":"list-box",...n})}const D0=Object.assign(Zi,{Root:Zi,Item:u0,ItemIndicator:Uf,Section:s0}),Me=s.createContext({}),mr=({children:t,className:e,variant:n,...l})=>{const r=g.useMemo(()=>fh({variant:n}),[n]);return M.jsx(Me,{value:{slots:r},children:M.jsx(Se.div,{className:r.base({className:e}),"data-slot":"table",...l,children:t})})};mr.displayName="HeroUI.Table";const Gf=({className:t,...e})=>{const{slots:n}=s.useContext(Me);return M.jsx(Se.div,{className:de(n==null?void 0:n.scrollContainer,t),"data-slot":"table-scroll-container",...e})};Gf.displayName="HeroUI.Table.ScrollContainer";function qf({className:t,...e}){const{slots:n}=s.useContext(Me);return M.jsx(Ng,{className:me(t,n==null?void 0:n.content()),"data-slot":"table-content",...e})}qf.displayName="HeroUI.Table.Content";function Zf({className:t,...e}){const{slots:n}=s.useContext(Me);return M.jsx(Hg,{className:me(t,n==null?void 0:n.header()),"data-slot":"table-header",...e})}Zf.displayName="HeroUI.Table.Header";const Yf=g.forwardRef(({className:t,...e},n)=>{const{slots:l}=s.useContext(Me);return M.jsx(qg,{ref:n,className:me(t,l==null?void 0:l.column()),"data-slot":"table-column",...e})});Yf.displayName="HeroUI.Table.Column";function Xf({className:t,...e}){const{slots:n}=s.useContext(Me);return M.jsx(Xg,{className:me(t,n==null?void 0:n.body()),"data-slot":"table-body",...e})}Xf.displayName="HeroUI.Table.Body";function Jf({className:t,...e}){const{slots:n}=s.useContext(Me);return M.jsx(Jg,{className:me(t,n==null?void 0:n.row()),"data-slot":"table-row",...e})}Jf.displayName="HeroUI.Table.Row";const Qf=g.forwardRef(({className:t,...e},n)=>{const{slots:l}=s.useContext(Me);return M.jsx(Qg,{ref:n,className:me(t,l==null?void 0:l.cell()),"data-slot":"table-cell",...e})});Qf.displayName="HeroUI.Table.Cell";const ep=({className:t,...e})=>{const{slots:n}=s.useContext(Me);return M.jsx(Se.div,{className:de(n==null?void 0:n.footer,t),"data-slot":"table-footer",...e})};ep.displayName="HeroUI.Table.Footer";const tp=g.forwardRef(({className:t,...e},n)=>M.jsx(Lg,{ref:n,className:It("table__resizable-container",t),"data-slot":"table-resizable-container",...e}));tp.displayName="HeroUI.Table.ResizableContainer";const np=g.forwardRef(({className:t,...e},n)=>{const{slots:l}=s.useContext(Me);return M.jsx(Zg,{ref:n,className:me(t,l==null?void 0:l.columnResizer()),"data-slot":"table-column-resizer",...e})});np.displayName="HeroUI.Table.ColumnResizer";const lp=g.forwardRef(({className:t,...e},n)=>{const{slots:l}=s.useContext(Me);return M.jsx(i0,{ref:n,className:de(l==null?void 0:l.loadMore,t),"data-slot":"table-load-more",...e})});lp.displayName="HeroUI.Table.LoadMore";const rp=({className:t,...e})=>{const{slots:n}=s.useContext(Me);return M.jsx(Se.div,{className:de(n==null?void 0:n.loadMoreContent,t),"data-slot":"table-load-more-content",...e})};rp.displayName="HeroUI.Table.LoadMoreContent";const op=g.forwardRef(({children:t,className:e,indicator:n,showIndicator:l=!0,sortDirection:r,...o},i)=>{const{slots:u}=s.useContext(Me),a=l&&!!r;let c=null;if(a)if(n===void 0)c=M.jsx(Uh,{className:u==null?void 0:u.sortableColumnIndicator(),"data-direction":r,"data-slot":"table-sortable-column-indicator"});else if(g.isValidElement(n)){const f=n;c=g.cloneElement(f,{className:de(u==null?void 0:u.sortableColumnIndicator,f.props.className),"data-direction":r,"data-slot":"table-sortable-column-indicator"})}else c=n;return M.jsxs("span",{ref:i,className:de(u==null?void 0:u.sortableColumnHeader,e),"data-direction":r,"data-slot":"table-sortable-column-header",...o,children:[t,c]})});op.displayName="HeroUI.Table.SortableColumnHeader";const c0=xn,k0=Object.assign(mr,{Body:Xf,Cell:Qf,Collection:c0,Column:Yf,ColumnResizer:np,Content:qf,Footer:ep,Header:Zf,LoadMore:lp,LoadMoreContent:rp,ResizableContainer:tp,Root:mr,Row:Jf,ScrollContainer:Gf,SortableColumnHeader:op});export{y0 as $,b0 as A,m0 as B,v0 as C,S0 as D,C0 as I,w0 as L,x0 as S,E0 as T,D0 as a,u0 as b,Fp as c,g0 as d,h0 as e,$0 as f,Qb as g,k0 as h,V4 as r}; diff --git a/src/gateway/static/dashboard/assets/index-D1O_nkKy.js b/src/gateway/static/dashboard/assets/index-D1O_nkKy.js new file mode 100644 index 00000000..b459cefc --- /dev/null +++ b/src/gateway/static/dashboard/assets/index-D1O_nkKy.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ActivityPage-DyhDMr6Q.js","assets/tanstack-query-1t81HyiD.js","assets/react-dgEcD0HR.js","assets/heroui-DZj66Arc.js","assets/tableSelection-CLDlIlLU.js","assets/ConfirmDialog-CSBsET-p.js","assets/DataTable-mgItq60H.js","assets/TablePagination-CsvD577_.js","assets/AliasesPage-B5d3dytf.js","assets/Field-DEJ6Wjg9.js","assets/BudgetsPage-Dnhf8Nve.js","assets/KeysPage-BiO9tu08.js","assets/ModelScopeControl-DPtZaEWl.js","assets/ModelsPage-BS-xT7Ts.js","assets/OverviewPage-BINTdHsm.js","assets/charts-CuOShutR.js","assets/recharts-D7kuKp97.js","assets/ProvidersPage-BKJfR2nH.js","assets/SettingsPage-DPkAq-xL.js","assets/ToolsGuardrailsPage-jvTZg2ew.js","assets/UsagePage-B6UkNWAG.js","assets/UsersPage-Cz68J9bP.js"])))=>i.map(i=>d[i]); +var _e=Object.defineProperty;var Te=(e,t,n)=>t in e?_e(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var ae=(e,t,n)=>Te(e,typeof t!="symbol"?t+"":t,n);import{u as y,j as r,a as p,b as f,k as J,Q as Le,c as Ae}from"./tanstack-query-1t81HyiD.js";import{d as Ie,r as i,N as de,O as qe,H as Re,e as Oe,f as w,h as De}from"./react-dgEcD0HR.js";import{C as M,L as me,I as fe,a as Me,b as Fe,d as O,B as C,c as N,T as Ke,e as Ue}from"./heroui-DZj66Arc.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))s(l);new MutationObserver(l=>{for(const a of l)if(a.type==="childList")for(const x of a.addedNodes)x.tagName==="LINK"&&x.rel==="modulepreload"&&s(x)}).observe(document,{childList:!0,subtree:!0});function n(l){const a={};return l.integrity&&(a.integrity=l.integrity),l.referrerPolicy&&(a.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?a.credentials="include":l.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function s(l){if(l.ep)return;l.ep=!0;const a=n(l);fetch(l.href,a)}})();var Be=Ie();const $e="modulepreload",Qe=function(e){return"/"+e},ie={},E=function(t,n,s){let l=Promise.resolve();if(n&&n.length>0){let x=function(u){return Promise.all(u.map(b=>Promise.resolve(b).then(h=>({status:"fulfilled",value:h}),h=>({status:"rejected",reason:h}))))};document.getElementsByTagName("link");const m=document.querySelector("meta[property=csp-nonce]"),v=(m==null?void 0:m.nonce)||(m==null?void 0:m.getAttribute("nonce"));l=x(n.map(u=>{if(u=Qe(u),u in ie)return;ie[u]=!0;const b=u.endsWith(".css"),h=b?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${h}`))return;const d=document.createElement("link");if(d.rel=b?"stylesheet":$e,b||(d.as="script"),d.crossOrigin="",d.href=u,v&&d.setAttribute("nonce",v),document.head.appendChild(d),b)return new Promise((L,q)=>{d.addEventListener("load",L),d.addEventListener("error",()=>q(new Error(`Unable to preload CSS for ${u}`)))})}))}function a(x){const m=new Event("vite:preloadError",{cancelable:!0});if(m.payload=x,window.dispatchEvent(m),!m.defaultPrevented)throw x}return l.then(x=>{for(const m of x||[])m.status==="rejected"&&a(m.reason);return t().catch(a)})};class _ extends Error{constructor(n,s){super(s);ae(this,"status");this.name="ApiError",this.status=n}}let F=null;function oe(e){F=e}async function W(e){try{const t=await e.json();if(typeof t.detail=="string")return t.detail;if(t.detail!=null)return JSON.stringify(t.detail)}catch{}return e.statusText||`Request failed (${e.status})`}async function ze(e){let t;try{t=await fetch("/v1/auth/session",{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({master_key:e})})}catch{throw new _(0,"Network error: could not reach the gateway.")}if(t.status===401||t.status===403)return!1;if(!t.ok)throw new _(t.status,await W(t));return!0}async function Ve(){try{await fetch("/v1/auth/session",{method:"DELETE"})}catch{}}async function o(e,t={}){const n=new Headers(t.headers);n.set("Accept","application/json"),t.body!=null&&!n.has("Content-Type")&&n.set("Content-Type","application/json");let s;try{s=await fetch(e,{...t,headers:n})}catch{throw new _(0,"Network error: could not reach the gateway.")}if(s.status===401||s.status===403)throw F==null||F(),new _(s.status,await W(s));if(!s.ok)throw new _(s.status,await W(s));if(s.status!==204)return await s.json()}const G="otari.dashboard.hasSession",he=i.createContext(null);function He(){try{return window.localStorage.getItem(G)==="1"}catch{return!1}}function We({children:e}){const t=y(),[n,s]=i.useState(He),l=i.useCallback(()=>{Ve(),s(!1),t.clear();try{window.localStorage.removeItem(G)}catch{}},[t]),a=i.useCallback(()=>{t.clear(),s(!0);try{window.localStorage.setItem(G,"1")}catch{}},[t]);i.useEffect(()=>(oe(l),()=>oe(null)),[l]);const x=i.useMemo(()=>({isAuthenticated:n,login:a,logout:l}),[n,a,l]);return r.jsx(he.Provider,{value:x,children:e})}function Y(){const e=i.useContext(he);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e}function Ge(e){return e instanceof _&&e.status===0}function Je(){const e=y(),[t,n]=i.useState(!1);return i.useEffect(()=>{const s=e.getQueryCache(),l=()=>s.getAll().some(a=>a.state.status==="error"&&Ge(a.state.error));return n(l()),s.subscribe(()=>n(l()))},[e]),t}function Ye(){return Je()?r.jsxs("div",{role:"alert","aria-live":"assertive",className:"fixed right-4 bottom-4 z-50 flex max-w-sm items-start gap-2.5 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700 shadow-lg",children:[r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2","aria-hidden":!0,className:"mt-0.5 h-5 w-5 shrink-0",children:[r.jsx("path",{d:"M12 9v4M12 17h.01",strokeLinecap:"round",strokeLinejoin:"round"}),r.jsx("path",{d:"M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z",strokeLinejoin:"round"})]}),r.jsxs("span",{children:[r.jsx("strong",{className:"font-semibold",children:"Can’t reach the gateway."})," The backend isn’t responding; data won’t load or save until the connection is restored."]})]}):null}const T="models",U="pricing",xe="settings",ye="tool-settings",X="aliases",Z="discoverable",ee="providers",te="provider-health",ve="stored-providers",Xe="model-metadata",Ze="build",A="keys",I="budgets",ge="users",D="usage",et=6e4,le=60*6e4;function Gt(){return p({queryKey:[T],queryFn:()=>o("/v1/models"),staleTime:6e4})}function tt(){return p({queryKey:[Ze],queryFn:()=>o("/dashboard-build.json"),refetchInterval:et,refetchOnWindowFocus:!0,staleTime:0,retry:!1})}function Jt(){return p({queryKey:[Z],queryFn:()=>o("/v1/models/discoverable"),staleTime:5*6e4})}function Yt(){return p({queryKey:[ee],queryFn:()=>o("/v1/providers"),staleTime:5*6e4})}function Xt(){return p({queryKey:["provider-catalog"],queryFn:()=>o("/v1/providers/catalog"),staleTime:1/0})}function Zt(e){return p({queryKey:["provider-catalog",e],queryFn:()=>o(`/v1/providers/catalog/${encodeURIComponent(e)}`),enabled:e!=="",staleTime:1/0})}function er(){return p({queryKey:[te],queryFn:()=>o("/v1/providers/health"),staleTime:le,refetchInterval:le})}function tr(){const e=y();return f({mutationFn:()=>o("/v1/providers/health?refresh=true"),onSuccess:t=>e.setQueryData([te],t)})}function rr(){return p({queryKey:[ve],queryFn:()=>o("/v1/provider-credentials"),staleTime:6e4})}function B(e){e.invalidateQueries({queryKey:[ve]}),e.invalidateQueries({queryKey:[ee]}),e.invalidateQueries({queryKey:[T]}),e.invalidateQueries({queryKey:[Z]}),e.invalidateQueries({queryKey:[te]})}function nr(){const e=y();return f({mutationFn:t=>o("/v1/provider-credentials",{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>B(e)})}function sr(){const e=y();return f({mutationFn:({instance:t,body:n})=>o(`/v1/provider-credentials/${encodeURIComponent(t)}`,{method:"PATCH",body:JSON.stringify(n)}),onSuccess:()=>B(e)})}function ar(){const e=y();return f({mutationFn:t=>o(`/v1/provider-credentials/${encodeURIComponent(t)}`,{method:"DELETE"}),onSuccess:()=>B(e)})}function ir(){const e=y();return f({mutationFn:()=>o("/v1/provider-credentials/reencrypt",{method:"POST"}),onSuccess:()=>B(e)})}function or(){return f({mutationFn:e=>o(`/v1/provider-credentials/${encodeURIComponent(e)}/test`,{method:"POST"})})}function lr(){return f({mutationFn:e=>o("/v1/provider-credentials/test",{method:"POST",body:JSON.stringify(e)})})}function cr(){return p({queryKey:[Xe],queryFn:()=>o("/v1/models/metadata"),staleTime:10*6e4})}function ur(){return p({queryKey:[X],queryFn:()=>o("/v1/aliases"),staleTime:6e4})}function dr(){const e=y();return f({mutationFn:t=>o("/v1/aliases",{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>{e.invalidateQueries({queryKey:[X]}),e.invalidateQueries({queryKey:[T]})}})}function mr(){const e=y();return f({mutationFn:t=>o(`/v1/aliases/${encodeURIComponent(t)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:[X]}),e.invalidateQueries({queryKey:[T]})}})}function rt(){return p({queryKey:[xe],queryFn:()=>o("/v1/settings"),staleTime:6e4})}function nt(){const e=y();return f({mutationFn:t=>o("/v1/settings",{method:"PATCH",body:JSON.stringify(t)}),onSuccess:t=>{e.setQueryData([xe],t),e.invalidateQueries({queryKey:[T]}),e.invalidateQueries({queryKey:[Z]})}})}function fr(){return f({mutationFn:()=>o("/v1/settings/master-key/rotate",{method:"POST"})})}function hr(){return p({queryKey:[ye],queryFn:()=>o("/v1/tool-settings"),staleTime:6e4})}function xr(){const e=y();return f({mutationFn:t=>o("/v1/tool-settings",{method:"PATCH",body:JSON.stringify(t)}),onSuccess:t=>{e.setQueryData([ye],t)}})}function yr(){return f({mutationFn:({service:e,url:t})=>o(`/v1/tool-settings/${encodeURIComponent(e)}/test`,{method:"POST",body:JSON.stringify({url:t})})})}const $=1e3,st=100;async function at(){const e=[];for(let t=0;to("/v1/pricing",{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>{e.invalidateQueries({queryKey:[U]}),e.invalidateQueries({queryKey:[T]})}})}function pr(){const e=y();return f({mutationFn:t=>o(`/v1/pricing/${encodeURIComponent(t)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:[U]}),e.invalidateQueries({queryKey:[T]})}})}function br(){return f({mutationFn:()=>o("/v1/pricing/refresh",{method:"POST"})})}function jr(){const e=y();return f({mutationFn:()=>o("/v1/pricing/refresh/confirm",{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:[U]}),e.invalidateQueries({queryKey:[T]}),e.invalidateQueries({queryKey:[ee]})}})}function wr(){return f({mutationFn:()=>o("/v1/pricing/refresh/reject",{method:"POST"})})}const Q=1e3,it=100;async function ot(){const e=[];for(let t=0;to("/v1/keys",{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>void e.invalidateQueries({queryKey:[A]})})}function Er(){const e=y();return f({mutationFn:({id:t,body:n})=>o(`/v1/keys/${encodeURIComponent(t)}`,{method:"PATCH",body:JSON.stringify(n)}),onSuccess:()=>void e.invalidateQueries({queryKey:[A]})})}function Pr(){const e=y();return f({mutationFn:t=>o(`/v1/keys/${encodeURIComponent(t)}/rotate`,{method:"POST"}),onSuccess:()=>void e.invalidateQueries({queryKey:[A]})})}function Nr(){const e=y();return f({mutationFn:t=>o(`/v1/keys/${encodeURIComponent(t)}`,{method:"DELETE"}),onSuccess:()=>void e.invalidateQueries({queryKey:[A]})})}const z=1e3,lt=100;async function ct(){const e=[];for(let t=0;to(`/v1/budgets/${encodeURIComponent(e)}/reset-logs`),enabled:e!==null,staleTime:6e4})}function Tr(){const e=y();return f({mutationFn:t=>o("/v1/budgets",{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>void e.invalidateQueries({queryKey:[I]})})}function Lr(){const e=y();return f({mutationFn:({id:t,body:n})=>o(`/v1/budgets/${encodeURIComponent(t)}`,{method:"PATCH",body:JSON.stringify(n)}),onSuccess:()=>void e.invalidateQueries({queryKey:[I]})})}function Ar(){const e=y();return f({mutationFn:t=>o(`/v1/budgets/${encodeURIComponent(t)}`,{method:"DELETE"}),onSuccess:()=>void e.invalidateQueries({queryKey:[I]})})}const V=1e3,ut=100;async function dt(){const e=[];for(let t=0;to("/v1/users",{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>re(e)})}function Rr(){const e=y();return f({mutationFn:({id:t,body:n})=>o(`/v1/users/${encodeURIComponent(t)}`,{method:"PATCH",body:JSON.stringify(n)}),onSuccess:()=>re(e)})}function Or(){const e=y();return f({mutationFn:t=>o(`/v1/users/${encodeURIComponent(t)}`,{method:"DELETE"}),onSuccess:()=>{re(e),e.invalidateQueries({queryKey:[A]})}})}function ne(e){const t=new URLSearchParams;return e.start_date&&t.set("start_date",e.start_date),e.end_date&&t.set("end_date",e.end_date),e.status&&t.set("status",e.status),e.model&&t.set("model",e.model),e.endpoint&&t.set("endpoint",e.endpoint),e.user_id&&t.set("user_id",e.user_id),e.api_key_id&&t.set("api_key_id",e.api_key_id),e.source&&t.set("source",e.source),e.priced!==void 0&&t.set("priced",String(e.priced)),e.counts_toward_budget!==void 0&&t.set("counts_toward_budget",String(e.counts_toward_budget)),t}function Dr(e,t,n){return p({queryKey:[D,"list",e,t,n],queryFn:()=>{const s=ne(e);return s.set("skip",String(t*n)),s.set("limit",String(n)),o(`/v1/usage?${s.toString()}`)},placeholderData:J,staleTime:1e4})}function Mr(e,t=!0){return p({queryKey:[D,"count",e],queryFn:()=>o(`/v1/usage/count?${ne(e).toString()}`),enabled:t,placeholderData:J,staleTime:1e4})}function Fr(){const e=y();return f({mutationFn:t=>o("/v1/usage",{method:"DELETE",body:JSON.stringify(t)}),onSuccess:()=>{e.invalidateQueries({queryKey:[D]})}})}function Kr(){const e=y();return f({mutationFn:t=>o("/v1/usage/set-price",{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>{e.invalidateQueries({queryKey:[D]})}})}function Ur(e,t,n=!0){return p({queryKey:[D,"summary",e,t],queryFn:()=>{const s=ne(e);return s.set("bucket",t),o(`/v1/usage/summary?${s.toString()}`)},enabled:n,placeholderData:J,staleTime:3e4})}function Br(e){return e==null?"0":new Intl.NumberFormat("en-US").format(e)}function $r(e){if(e==null)return"$0.00";const t=e!==0&&Math.abs(e)<.01?4:2;return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:t}).format(e)}function Qr(e){if(e==null)return"—";if(e>=1e6){const t=e/1e6;return`${Number.isInteger(t)?t:t.toFixed(1)}M`}if(e>=1e3){const t=Math.round(e/1e3);return t>=1e3?"1M":`${t}K`}return String(e)}const mt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function zr(e){if(!e)return"—";const t=/^(\d{4})-(\d{2})/.exec(e);if(!t)return e;const n=Number(t[2])-1;return n<0||n>11?t[1]:`${mt[n]} ${t[1]}`}const ft=new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:2});function Vr(e){return ft.format(e)}function Hr(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function ht(e){return`${(e*100).toFixed(1)}%`}function Wr(e,t){return t===void 0||t===0?null:(e-t)/t}function Gr(e,t=Date.now()){if(!e)return"never";const n=new Date(e);if(Number.isNaN(n.getTime()))return e;const s=Math.round((t-n.getTime())/1e3),l=s<0,a=Math.abs(s),x=[["second",60],["minute",60],["hour",24],["day",30],["month",12],["year",Number.POSITIVE_INFINITY]];let m=a,v="second";for(const[b,h]of x){if(v=b,m0?"▲":e<0?"▼":"•";return r.jsxs("span",{className:"text-[var(--otari-muted)]",children:[t," ",ht(Math.abs(e))," vs prev"]})}function xt(e){return e instanceof _||e instanceof Error?e.message:"Something went wrong."}function yt({error:e}){return e?r.jsx("div",{role:"alert",className:"rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700",children:xt(e)}):null}function vt({tone:e="info",children:t}){const n=e==="warning"?"border-amber-200 bg-amber-50 text-amber-800":"border-[var(--otari-brand)] bg-[var(--otari-brand-tint)] text-[var(--otari-brand-dark)]";return r.jsx("div",{className:`rounded-lg border px-4 py-3 text-sm ${n}`,children:t})}function Xr({title:e,description:t,action:n}){return r.jsxs("div",{className:"flex flex-col gap-3",children:[r.jsxs("div",{children:[r.jsx("h1",{className:"text-xl font-semibold text-[var(--otari-ink)]",children:e}),t?r.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:t}):null]}),n?r.jsx("div",{className:"flex flex-wrap gap-2",children:n}):null]})}function Zr({children:e,confirmLabel:t,onConfirm:n,isPending:s}){const[l,a]=i.useState(!1);return l?r.jsxs("span",{className:"inline-flex items-center gap-1",children:[r.jsx(C,{size:"sm",variant:"danger",isDisabled:s,onPress:n,children:t}),r.jsx(C,{size:"sm",variant:"ghost",isDisabled:s,onPress:()=>a(!1),children:"Cancel"})]}):r.jsx(C,{size:"sm",variant:"danger-soft",onPress:()=>a(!0),children:e})}const gt="rounded-lg border border-[var(--otari-line)] bg-[var(--otari-bg)] px-3 py-2 text-sm text-[var(--otari-ink)] focus:border-[var(--otari-brand)] focus:outline-none";function en({id:e,label:t,ariaLabel:n,value:s,onChange:l,options:a,children:x,disabled:m}){const v=i.useId(),u=e??(t?v:void 0),b=r.jsx("select",{id:u,"aria-label":t?void 0:n,value:s,disabled:m,onChange:h=>l(h.target.value),className:gt,children:a?a.map(h=>r.jsx("option",{value:h.value,children:h.label},h.value)):x});return t?r.jsxs("div",{className:"flex flex-col gap-1",children:[r.jsx("label",{htmlFor:u,className:"text-xs font-medium text-[var(--otari-muted)]",children:t}),b]}):b}function tn({label:e,value:t,onChange:n,options:s,placeholder:l,maxVisible:a=50,allowsCustom:x=!1}){const m=d=>{var L;return((L=s.find(q=>q.value===d))==null?void 0:L.label)??d},[v,u]=i.useState(()=>m(t));i.useEffect(()=>{u(m(t))},[t]);const b=v.trim().toLowerCase(),h=s.filter(d=>!b||d.value.toLowerCase().includes(b)||d.label.toLowerCase().includes(b)).slice(0,a);return r.jsxs(M.Root,{allowsEmptyCollection:!0,allowsCustomValue:x,menuTrigger:"focus",inputValue:v,onInputChange:d=>{u(d),x?n(d.trim()):d.trim()===""&&n("")},onSelectionChange:d=>{d!=null&&n(String(d))},className:"flex flex-col gap-1",children:[r.jsx(me,{className:"text-xs font-medium text-[var(--otari-muted)]",children:e}),r.jsxs(M.InputGroup,{children:[r.jsx(fe,{placeholder:l,autoComplete:"off",onFocus:d=>d.currentTarget.select()}),r.jsx(M.Trigger,{})]}),r.jsx(M.Popover,{children:r.jsx(Me,{items:h,className:"max-h-72 overflow-auto",children:d=>r.jsx(Fe,{id:d.value,textValue:d.label,children:d.label})})})]})}function pt(){var a;const e=rt(),t=nt(),[n,s]=i.useState(!1);return!(((a=e.data)==null?void 0:a.require_pricing)===!0&&e.data.default_pricing===!1)||n?null:r.jsx("div",{className:"shrink-0 px-6 pt-3",children:r.jsx(vt,{tone:"warning",children:r.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[r.jsxs("span",{children:["Requests are rejected until pricing is set (",r.jsx("code",{children:"require_pricing"})," is on). Enable default pricing to meter new models with public rates right away."]}),r.jsxs("span",{className:"flex items-center gap-2",children:[r.jsx(C,{size:"sm",variant:"primary",isDisabled:t.isPending,onPress:()=>t.mutate({default_pricing:!0}),children:t.isPending?"Enabling…":"Enable default pricing"}),r.jsx(C,{size:"sm",variant:"ghost",onPress:()=>s(!0),children:"Dismiss"})]})]})})})}function bt(){const{data:e}=tt(),t=i.useRef(null);return e&&t.current===null&&(t.current=e.build),e!=null&&t.current!=null&&e.build!==t.current}function jt(){const e=bt(),[t,n]=i.useState(!1);return!e||t?null:r.jsx("div",{className:"pointer-events-none absolute inset-x-0 top-0 z-50 flex justify-center",children:r.jsxs("div",{role:"status",className:"pointer-events-auto mt-1.5 flex items-center gap-3 rounded-full border border-[var(--otari-brand)] bg-[var(--otari-brand-tint)] py-1.5 pr-1.5 pl-4 text-sm text-[var(--otari-brand-dark)] shadow-md",children:[r.jsxs("span",{children:[r.jsx("strong",{className:"font-semibold",children:"An update is available."})," Reloading keeps you signed in."]}),r.jsx(C,{size:"sm",variant:"primary",onPress:()=>window.location.reload(),children:"Update now"}),r.jsx(C,{size:"sm",variant:"ghost",onPress:()=>n(!0),children:"Later"})]})})}const pe=200,be=480,H=240,wt=60,je="otari.dashboard.sidebarWidth",we="otari.dashboard.sidebarCollapsed",ue=16,Se="(max-width: 767px)",K=e=>Math.min(be,Math.max(pe,e));function St(){return typeof window>"u"||typeof window.matchMedia!="function"?!1:window.matchMedia(Se).matches}const kt='a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])';function Et(e){return e?Array.from(e.querySelectorAll(kt)).filter(t=>t.offsetParent!==null||t===document.activeElement):[]}function Pt(){if(typeof window>"u")return H;try{const e=window.localStorage.getItem(je),t=e?Number.parseInt(e,10):Number.NaN;return Number.isNaN(t)?H:K(t)}catch{return H}}function Nt(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(we)==="1"}catch{return!1}}const Ct=[{key:"home"},{key:"observability",label:"Observability"},{key:"catalog",label:"Catalog"},{key:"access",label:"Access"},{key:"system"}],_t=[{to:"/",section:"home",label:"Overview",end:!0,icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("rect",{x:"3.5",y:"3.5",width:"7",height:"7",rx:"1.5",strokeLinejoin:"round"}),r.jsx("rect",{x:"13.5",y:"3.5",width:"7",height:"7",rx:"1.5",strokeLinejoin:"round"}),r.jsx("rect",{x:"3.5",y:"13.5",width:"7",height:"7",rx:"1.5",strokeLinejoin:"round"}),r.jsx("rect",{x:"13.5",y:"13.5",width:"7",height:"7",rx:"1.5",strokeLinejoin:"round"})]})},{to:"/activity",section:"observability",label:"Activity",icon:r.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:r.jsx("path",{d:"M3 12h4l2.5-6 4 12 2.5-6H21",strokeLinecap:"round",strokeLinejoin:"round"})})},{to:"/usage",section:"observability",label:"Usage",icon:r.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:r.jsx("path",{d:"M4 20V10M10 20V4M16 20v-7M22 20H2",strokeLinecap:"round",strokeLinejoin:"round"})})},{to:"/providers",section:"catalog",label:"Providers",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("rect",{x:"3.5",y:"4.5",width:"17",height:"6",rx:"1.5",strokeLinejoin:"round"}),r.jsx("rect",{x:"3.5",y:"13.5",width:"17",height:"6",rx:"1.5",strokeLinejoin:"round"}),r.jsx("path",{d:"M7 7.5h.01M7 16.5h.01",strokeLinecap:"round",strokeLinejoin:"round"})]})},{to:"/users",section:"access",label:"Users",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("circle",{cx:"9",cy:"8",r:"3.2",strokeLinejoin:"round"}),r.jsx("path",{d:"M3.5 19a5.5 5.5 0 0 1 11 0",strokeLinecap:"round",strokeLinejoin:"round"}),r.jsx("path",{d:"M16 5.2a3.2 3.2 0 0 1 0 5.6M17.5 19a5.5 5.5 0 0 0-3-4.9",strokeLinecap:"round",strokeLinejoin:"round"})]})},{to:"/keys",section:"access",label:"API keys",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("circle",{cx:"7.5",cy:"15.5",r:"3.5"}),r.jsx("path",{d:"M10 13l7-7M14 5l3 3M16.5 7.5l2-2",strokeLinecap:"round",strokeLinejoin:"round"})]})},{to:"/budgets",section:"access",label:"Budgets",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("path",{d:"M3 7.5A1.5 1.5 0 0 1 4.5 6H18a1.5 1.5 0 0 1 1.5 1.5V9",strokeLinejoin:"round"}),r.jsx("rect",{x:"3",y:"7.5",width:"18",height:"12",rx:"1.5",strokeLinejoin:"round"}),r.jsx("path",{d:"M16 13.5h.01",strokeLinecap:"round",strokeLinejoin:"round"}),r.jsx("path",{d:"M21 12v3h-3.5a1.5 1.5 0 0 1 0-3H21z",strokeLinejoin:"round"})]})},{to:"/models",section:"catalog",label:"Models",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("path",{d:"M12 3l8 4.5v9L12 21l-8-4.5v-9L12 3z",strokeLinejoin:"round"}),r.jsx("path",{d:"M12 12l8-4.5M12 12v9M12 12L4 7.5",strokeLinejoin:"round"})]})},{to:"/aliases",section:"catalog",label:"Aliases",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("path",{d:"M20.6 13.4L13.4 20.6a2 2 0 0 1-2.8 0l-7-7A2 2 0 0 1 3 12.2V5a2 2 0 0 1 2-2h7.2a2 2 0 0 1 1.4.6l7 7a2 2 0 0 1 0 2.8z",strokeLinejoin:"round"}),r.jsx("circle",{cx:"7.5",cy:"7.5",r:"1.5"})]})},{to:"/tools",section:"system",label:"Tools & Guardrails",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("path",{d:"M14.7 6.3a4 4 0 0 1 5 5l-8.4 8.4a2 2 0 0 1-2.8 0l-2.2-2.2a2 2 0 0 1 0-2.8z",strokeLinejoin:"round"}),r.jsx("path",{d:"M12 9 5 16",strokeLinecap:"round"})]})},{to:"/settings",section:"system",label:"Settings",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("circle",{cx:"12",cy:"12",r:"3"}),r.jsx("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z",strokeLinejoin:"round"})]})}];function Tt(){const{logout:e}=Y(),t=i.useRef(null),n=i.useRef(null),[s,l]=i.useState(Pt),[a,x]=i.useState(Nt),[m,v]=i.useState(!1),[u,b]=i.useState(St),[h,d]=i.useState(!1);i.useEffect(()=>{if(typeof window>"u"||typeof window.matchMedia!="function")return;const c=window.matchMedia(Se),g=j=>{b(j.matches),j.matches||d(!1)};return typeof c.addEventListener=="function"?(c.addEventListener("change",g),()=>c.removeEventListener("change",g)):(c.addListener(g),()=>c.removeListener(g))},[]),i.useEffect(()=>{if(!h)return;const c=g=>{g.key==="Escape"&&d(!1)};return window.addEventListener("keydown",c),()=>window.removeEventListener("keydown",c)},[h]),i.useEffect(()=>{var c,g,j;u&&(h?(c=t.current)==null||c.focus():(g=t.current)!=null&&g.contains(document.activeElement)&&((j=n.current)==null||j.focus()))},[u,h]);const L=i.useCallback(c=>{if(c.key!=="Tab")return;const g=Et(t.current);if(g.length===0)return;const j=g[0],S=g[g.length-1],R=document.activeElement;c.shiftKey&&(R===j||R===t.current)?(c.preventDefault(),S.focus()):!c.shiftKey&&R===S&&(c.preventDefault(),j.focus())},[]);i.useEffect(()=>{const c=window.setTimeout(()=>{try{window.localStorage.setItem(je,String(Math.round(s)))}catch{}},200);return()=>window.clearTimeout(c)},[s]),i.useEffect(()=>{try{window.localStorage.setItem(we,a?"1":"0")}catch{}},[a]);const q=i.useCallback(c=>{c.preventDefault(),c.currentTarget.setPointerCapture(c.pointerId),v(!0)},[]),Ee=i.useCallback(c=>{var j;if(!c.currentTarget.hasPointerCapture(c.pointerId))return;const g=((j=t.current)==null?void 0:j.getBoundingClientRect().left)??0;l(K(c.clientX-g))},[]),Pe=i.useCallback(c=>{c.currentTarget.hasPointerCapture(c.pointerId)&&c.currentTarget.releasePointerCapture(c.pointerId),v(!1)},[]),Ne=i.useCallback(c=>{c.key==="ArrowLeft"?(c.preventDefault(),l(g=>K(g-ue))):c.key==="ArrowRight"&&(c.preventDefault(),l(g=>K(g+ue)))},[]),Ce=a?wt:s,P=u?!1:a,se=u&&h?!0:void 0;return r.jsxs("div",{className:N("relative flex h-full flex-col overflow-hidden",m&&"cursor-col-resize select-none"),children:[r.jsxs("header",{inert:se,className:"flex shrink-0 items-center justify-between border-b border-[var(--otari-line)] bg-[var(--otari-surface)] px-5 py-3",children:[r.jsxs("div",{className:"flex items-center gap-2.5",children:[r.jsx("button",{type:"button",ref:n,onClick:()=>d(c=>!c),"aria-label":h?"Close navigation":"Open navigation","aria-expanded":h,"aria-controls":"app-sidebar",className:"-ml-1 flex h-8 w-8 items-center justify-center rounded-lg text-[var(--otari-muted)] transition-colors hover:bg-[var(--otari-bg)] hover:text-[var(--otari-ink)] md:hidden",children:r.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5",children:r.jsx("path",{d:"M4 6h16M4 12h16M4 18h16",strokeLinecap:"round",strokeLinejoin:"round"})})}),r.jsx("img",{src:"/favicon.svg",alt:"",className:"h-7 w-7 shrink-0"}),r.jsx("span",{className:"text-base font-semibold text-[var(--otari-ink)]",children:"Otari"})]}),r.jsx(C,{size:"sm",variant:"outline",onPress:e,"aria-label":"Sign out",children:"Sign out"})]}),r.jsx(jt,{}),r.jsx(Ye,{}),r.jsx(pt,{}),r.jsxs("div",{className:"flex min-h-0 flex-1",children:[u&&h?r.jsx("div",{"aria-hidden":"true",onClick:()=>d(!1),className:"fixed inset-0 z-30 bg-black/40 md:hidden"}):null,r.jsxs("aside",{ref:t,id:"app-sidebar",role:u?"dialog":void 0,"aria-modal":u&&h?!0:void 0,"aria-label":u?"Navigation":void 0,tabIndex:u?-1:void 0,inert:u&&!h?!0:void 0,onKeyDown:u&&h?L:void 0,style:u?void 0:{width:Ce},className:N("flex flex-col border-r border-[var(--otari-line)] bg-[var(--otari-surface)] focus:outline-none",u?N("fixed inset-y-0 left-0 z-40 w-[17rem] shadow-xl transition-transform duration-200",h?"translate-x-0":"-translate-x-full"):N("relative shrink-0",!m&&"transition-[width] duration-150")),children:[r.jsx("button",{type:"button",onClick:()=>x(c=>!c),"aria-label":a?"Expand sidebar":"Collapse sidebar","aria-pressed":a,title:a?"Expand sidebar":"Collapse sidebar",className:"absolute -right-3 top-4 z-30 hidden h-6 w-6 items-center justify-center rounded-full border border-[var(--otari-line)] bg-[var(--otari-surface)] text-[var(--otari-muted)] shadow-sm transition-colors hover:border-[var(--otari-brand)] hover:text-[var(--otari-brand-dark)] md:flex",children:r.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",className:N("h-3.5 w-3.5 transition-transform",a&&"rotate-180"),children:r.jsx("path",{d:"M15 6l-6 6 6 6",strokeLinecap:"round",strokeLinejoin:"round"})})}),r.jsx("nav",{className:N("flex flex-col py-4",P?"px-2":"px-3"),children:Ct.map((c,g)=>{const j=_t.filter(S=>S.section===c.key);return j.length===0?null:r.jsxs("div",{className:g>0?"mt-4":void 0,children:[!P&&c.label?r.jsx("div",{className:"px-3 pb-1 text-[11px] font-semibold tracking-wider text-[var(--otari-muted)] uppercase",children:c.label}):null,g>0&&(P||!c.label)?r.jsx("div",{className:"mx-1 mb-2 border-t border-[var(--otari-line)]"}):null,r.jsx("div",{className:"flex flex-col gap-1",children:j.map(S=>r.jsxs(de,{to:S.to,end:S.end,onClick:()=>d(!1),"aria-label":P?S.label:void 0,title:P?S.label:void 0,className:({isActive:R})=>N("flex items-center rounded-lg py-2 text-sm font-medium transition-colors",P?"justify-center px-0":"gap-3 px-3",R?"bg-[var(--otari-brand-tint)] text-[var(--otari-brand-dark)]":"text-[var(--otari-muted)] hover:bg-[var(--otari-bg)] hover:text-[var(--otari-ink)]"),children:[S.icon,P?null:S.label]},S.to))})]},c.key)})}),r.jsxs("a",{href:"https://otari.ai",target:"_blank",rel:"noreferrer",title:"otari.ai — the hosted Otari gateway",className:N("mt-auto mb-3 flex items-center rounded-lg py-2 text-xs font-medium text-[var(--otari-muted)] transition-colors hover:bg-[var(--otari-bg)] hover:text-[var(--otari-brand-dark)]",P?"mx-2 justify-center px-0":"mx-3 gap-2 px-3"),children:[r.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-4 w-4 shrink-0",children:r.jsx("path",{d:"M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z",strokeLinejoin:"round"})}),P?null:r.jsxs("span",{className:"flex-1",children:["otari.ai ",r.jsx("span",{"aria-hidden":!0,children:"↗"})]})]}),a||u?null:r.jsx("div",{role:"separator","aria-orientation":"vertical","aria-label":"Resize sidebar","aria-valuenow":Math.round(s),"aria-valuemin":pe,"aria-valuemax":be,tabIndex:0,onPointerDown:q,onPointerMove:Ee,onPointerUp:Pe,onKeyDown:Ne,className:N("absolute top-0 right-0 z-10 h-full w-1.5 cursor-col-resize touch-none transition-colors","hover:bg-[var(--otari-brand)] focus-visible:bg-[var(--otari-brand)] focus:outline-none",m?"bg-[var(--otari-brand)]":"bg-transparent")})]}),r.jsx("main",{inert:se,className:"flex-1 overflow-y-auto",children:r.jsx("div",{className:"mx-auto flex max-w-[1800px] flex-col gap-6 px-4 py-5 md:px-6 md:py-6",children:r.jsx(qe,{})})})]})]})}function Lt(){const{login:e}=Y(),[t,n]=i.useState(""),[s,l]=i.useState(null),[a,x]=i.useState(!1),m=async()=>{const v=t.trim();if(!(!v||a)){x(!0),l(null);try{await ze(v)?e():l(new Error("Invalid master key."))}catch(u){l(u)}finally{x(!1)}}};return r.jsx("div",{className:"flex min-h-full items-center justify-center p-6",children:r.jsx(O,{className:"w-full max-w-md",children:r.jsxs(O.Content,{className:"flex flex-col gap-5 p-7",children:[r.jsxs("div",{className:"flex flex-col items-center gap-3 text-center",children:[r.jsx("img",{src:"/favicon.svg",alt:"Otari",className:"h-12 w-12"}),r.jsxs("div",{children:[r.jsx("h1",{className:"text-lg font-semibold text-[var(--otari-ink)]",children:"Otari Dashboard"}),r.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:"Sign in with your master key to browse models, set pricing, and manage settings."})]})]}),r.jsxs("form",{className:"flex flex-col gap-4",onSubmit:v=>{v.preventDefault(),m()},children:[r.jsxs(Ke,{value:t,onChange:v=>{n(v),s&&l(null)},type:"password",isRequired:!0,className:"flex flex-col gap-1",children:[r.jsx(me,{className:"text-sm font-medium text-[var(--otari-ink)]",children:"Master key"}),r.jsx(fe,{placeholder:"otari-mk-… or your master key",autoFocus:!0,autoComplete:"off"})]}),r.jsxs("details",{className:"text-xs text-[var(--otari-muted)]",children:[r.jsx("summary",{className:"cursor-pointer font-medium text-[var(--otari-brand-dark)]",children:"First run? Where to find your key"}),r.jsxs("p",{className:"mt-2 leading-relaxed",children:["If you did not set ",r.jsx("code",{children:"OTARI_MASTER_KEY"}),", Otari generated one and printed it to the server logs on startup. Look for the line ",r.jsx("code",{children:"Your master key:"})," (for example, run"," ",r.jsx("code",{children:"docker logs "}),") and paste it above."]})]}),r.jsx(yt,{error:s}),r.jsx(C,{type:"submit",variant:"primary",fullWidth:!0,isDisabled:!t.trim()||a,children:a?"Signing in…":"Sign in"})]}),r.jsx("p",{className:"text-center text-xs text-[var(--otari-muted)]",children:"The key is sent once to this gateway and exchanged for a session cookie; it is never stored in the browser."}),r.jsx("div",{className:"border-t border-[var(--otari-line)] pt-4 text-center",children:r.jsx(Ue,{href:"/welcome",className:"text-sm font-medium text-[var(--otari-brand-dark)]",children:"New to Otari? Open the welcome guide"})})]})})})}const At=i.lazy(async()=>({default:(await E(async()=>{const{ActivityPage:e}=await import("./ActivityPage-DyhDMr6Q.js");return{ActivityPage:e}},__vite__mapDeps([0,1,2,3,4,5,6,7]))).ActivityPage})),It=i.lazy(async()=>({default:(await E(async()=>{const{AliasesPage:e}=await import("./AliasesPage-B5d3dytf.js");return{AliasesPage:e}},__vite__mapDeps([8,1,2,4,3,5,6,9]))).AliasesPage})),qt=i.lazy(async()=>({default:(await E(async()=>{const{BudgetsPage:e}=await import("./BudgetsPage-Dnhf8Nve.js");return{BudgetsPage:e}},__vite__mapDeps([10,1,2,4,3,5,6,9]))).BudgetsPage})),Rt=i.lazy(async()=>({default:(await E(async()=>{const{KeysPage:e}=await import("./KeysPage-BiO9tu08.js");return{KeysPage:e}},__vite__mapDeps([11,1,2,4,3,5,6,9,12]))).KeysPage})),Ot=i.lazy(async()=>({default:(await E(async()=>{const{ModelsPage:e}=await import("./ModelsPage-BS-xT7Ts.js");return{ModelsPage:e}},__vite__mapDeps([13,1,2,4,3,6,7]))).ModelsPage})),Dt=i.lazy(async()=>({default:(await E(async()=>{const{OverviewIndex:e}=await import("./OverviewPage-BINTdHsm.js");return{OverviewIndex:e}},__vite__mapDeps([14,1,2,15,16,3,6]))).OverviewIndex})),Mt=i.lazy(async()=>({default:(await E(async()=>{const{ProvidersPage:e}=await import("./ProvidersPage-BKJfR2nH.js");return{ProvidersPage:e}},__vite__mapDeps([17,1,2,9,3,6]))).ProvidersPage})),Ft=i.lazy(async()=>({default:(await E(async()=>{const{SettingsPage:e}=await import("./SettingsPage-DPkAq-xL.js");return{SettingsPage:e}},__vite__mapDeps([18,1,2,3]))).SettingsPage})),Kt=i.lazy(async()=>({default:(await E(async()=>{const{ToolsGuardrailsPage:e}=await import("./ToolsGuardrailsPage-jvTZg2ew.js");return{ToolsGuardrailsPage:e}},__vite__mapDeps([19,1,2,3]))).ToolsGuardrailsPage})),Ut=i.lazy(async()=>({default:(await E(async()=>{const{UsagePage:e}=await import("./UsagePage-B6UkNWAG.js");return{UsagePage:e}},__vite__mapDeps([20,1,2,3,4,15,16,5,6,7]))).UsagePage})),Bt=i.lazy(async()=>({default:(await E(async()=>{const{UsersPage:e}=await import("./UsersPage-Cz68J9bP.js");return{UsersPage:e}},__vite__mapDeps([21,1,2,4,3,5,6,9,12]))).UsersPage}));function k(e){return r.jsx(i.Suspense,{fallback:r.jsx("div",{role:"status",children:"Loading page…"}),children:e})}function $t(){const{isAuthenticated:e}=Y();return e?r.jsx(Re,{children:r.jsx(Oe,{children:r.jsxs(w,{element:r.jsx(Tt,{}),children:[r.jsx(w,{index:!0,element:k(r.jsx(Dt,{}))}),r.jsx(w,{path:"providers",element:k(r.jsx(Mt,{}))}),r.jsx(w,{path:"keys",element:k(r.jsx(Rt,{}))}),r.jsx(w,{path:"users",element:k(r.jsx(Bt,{}))}),r.jsx(w,{path:"budgets",element:k(r.jsx(qt,{}))}),r.jsx(w,{path:"activity",element:k(r.jsx(At,{}))}),r.jsx(w,{path:"usage",element:k(r.jsx(Ut,{}))}),r.jsx(w,{path:"models",element:k(r.jsx(Ot,{}))}),r.jsx(w,{path:"aliases",element:k(r.jsx(It,{}))}),r.jsx(w,{path:"tools",element:k(r.jsx(Kt,{}))}),r.jsx(w,{path:"settings",element:k(r.jsx(Ft,{}))}),r.jsx(w,{path:"*",element:r.jsx(De,{to:"/",replace:!0})})]})})}):r.jsx(Lt,{})}function Qt({children:e}){const[t]=i.useState(()=>new Le({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:(n,s)=>s instanceof _&&(s.status===401||s.status===403)?!1:n<2}}}));return r.jsx(Ae,{client:t,children:r.jsx(We,{children:e})})}const ke=document.getElementById("root");if(!ke)throw new Error("Root element #root not found");Be.createRoot(ke).render(r.jsx(i.StrictMode,{children:r.jsx(Qt,{children:r.jsx($t,{})})}));export{Zt as $,Qr as A,pr as B,Zr as C,xt as D,yt as E,en as F,zr as G,$r as H,vt as I,rt as J,Yt as K,er as L,Wr as M,Vr as N,Yr as O,Xr as P,Br as Q,ht as R,Jr as S,Gr as T,rr as U,ar as V,or as W,nt as X,sr as Y,tr as Z,nr as _,Sr as a,Xt as a0,lr as a1,br as a2,jr as a3,wr as a4,fr as a5,ir as a6,hr as a7,xr as a8,yr as a9,Hr as aa,Or as ab,qr as ac,Dr as b,Mr as c,Ur as d,Fr as e,Kr as f,tn as g,Jt as h,ur as i,mr as j,dr as k,Cr as l,Tr as m,Lr as n,Ar as o,Rr as p,_r as q,Er as r,Pr as s,Nr as t,Ir as u,kr as v,Gt as w,vr as x,cr as y,gr as z}; diff --git a/src/gateway/static/dashboard/assets/index-d3Tp3DkF.js b/src/gateway/static/dashboard/assets/index-d3Tp3DkF.js deleted file mode 100644 index 7537f6d1..00000000 --- a/src/gateway/static/dashboard/assets/index-d3Tp3DkF.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ActivityPage-CuHC0RK1.js","assets/tanstack-query-1t81HyiD.js","assets/react-dgEcD0HR.js","assets/heroui-BX6JwHY-.js","assets/Table-CLdjdyTx.js","assets/AliasesPage-BqLd7LKr.js","assets/Field-HzRk1KDP.js","assets/BudgetsPage-Bg0Es-aw.js","assets/KeysPage-BfiWORhW.js","assets/ModelScopeControl-yafJYqc3.js","assets/ModelsPage-DAJitSnp.js","assets/OverviewPage-D-4Und7I.js","assets/charts-Cr3Dij9t.js","assets/recharts-CR3TAEof.js","assets/ProvidersPage-ZF6ihggi.js","assets/SettingsPage-CWqsNLqk.js","assets/ToolsGuardrailsPage-CrPO-IWo.js","assets/UsagePage-B_5F4WNt.js","assets/UsersPage-28zvfI6e.js"])))=>i.map(i=>d[i]); -var Te=Object.defineProperty;var _e=(e,t,n)=>t in e?Te(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var ae=(e,t,n)=>_e(e,typeof t!="symbol"?t+"":t,n);import{u as y,j as r,a as g,b as h,k as G,Q as Le,c as Ae}from"./tanstack-query-1t81HyiD.js";import{d as Ie,r as i,N as de,O as qe,H as Re,e as Oe,f as w,h as De}from"./react-dgEcD0HR.js";import{C as D,L as me,I as fe,a as Me,b as Fe,B as C,d as O,c as N,T as Ke,e as Ue}from"./heroui-BX6JwHY-.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))s(l);new MutationObserver(l=>{for(const a of l)if(a.type==="childList")for(const x of a.addedNodes)x.tagName==="LINK"&&x.rel==="modulepreload"&&s(x)}).observe(document,{childList:!0,subtree:!0});function n(l){const a={};return l.integrity&&(a.integrity=l.integrity),l.referrerPolicy&&(a.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?a.credentials="include":l.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function s(l){if(l.ep)return;l.ep=!0;const a=n(l);fetch(l.href,a)}})();var Be=Ie();const $e="modulepreload",ze=function(e){return"/"+e},ie={},E=function(t,n,s){let l=Promise.resolve();if(n&&n.length>0){let x=function(u){return Promise.all(u.map(b=>Promise.resolve(b).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const m=document.querySelector("meta[property=csp-nonce]"),v=(m==null?void 0:m.nonce)||(m==null?void 0:m.getAttribute("nonce"));l=x(n.map(u=>{if(u=ze(u),u in ie)return;ie[u]=!0;const b=u.endsWith(".css"),f=b?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${f}`))return;const d=document.createElement("link");if(d.rel=b?"stylesheet":$e,b||(d.as="script"),d.crossOrigin="",d.href=u,v&&d.setAttribute("nonce",v),document.head.appendChild(d),b)return new Promise((L,q)=>{d.addEventListener("load",L),d.addEventListener("error",()=>q(new Error(`Unable to preload CSS for ${u}`)))})}))}function a(x){const m=new Event("vite:preloadError",{cancelable:!0});if(m.payload=x,window.dispatchEvent(m),!m.defaultPrevented)throw x}return l.then(x=>{for(const m of x||[])m.status==="rejected"&&a(m.reason);return t().catch(a)})};class T extends Error{constructor(n,s){super(s);ae(this,"status");this.name="ApiError",this.status=n}}let M=null;function oe(e){M=e}async function H(e){try{const t=await e.json();if(typeof t.detail=="string")return t.detail;if(t.detail!=null)return JSON.stringify(t.detail)}catch{}return e.statusText||`Request failed (${e.status})`}async function Qe(e){let t;try{t=await fetch("/v1/auth/session",{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({master_key:e})})}catch{throw new T(0,"Network error: could not reach the gateway.")}if(t.status===401||t.status===403)return!1;if(!t.ok)throw new T(t.status,await H(t));return!0}async function Ve(){try{await fetch("/v1/auth/session",{method:"DELETE"})}catch{}}async function o(e,t={}){const n=new Headers(t.headers);n.set("Accept","application/json"),t.body!=null&&!n.has("Content-Type")&&n.set("Content-Type","application/json");let s;try{s=await fetch(e,{...t,headers:n})}catch{throw new T(0,"Network error: could not reach the gateway.")}if(s.status===401||s.status===403)throw M==null||M(),new T(s.status,await H(s));if(!s.ok)throw new T(s.status,await H(s));if(s.status!==204)return await s.json()}const W="otari.dashboard.hasSession",he=i.createContext(null);function He(){try{return window.localStorage.getItem(W)==="1"}catch{return!1}}function We({children:e}){const t=y(),[n,s]=i.useState(He),l=i.useCallback(()=>{Ve(),s(!1),t.clear();try{window.localStorage.removeItem(W)}catch{}},[t]),a=i.useCallback(()=>{t.clear(),s(!0);try{window.localStorage.setItem(W,"1")}catch{}},[t]);i.useEffect(()=>(oe(l),()=>oe(null)),[l]);const x=i.useMemo(()=>({isAuthenticated:n,login:a,logout:l}),[n,a,l]);return r.jsx(he.Provider,{value:x,children:e})}function J(){const e=i.useContext(he);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e}function Ge(e){return e instanceof T&&e.status===0}function Je(){const e=y(),[t,n]=i.useState(!1);return i.useEffect(()=>{const s=e.getQueryCache(),l=()=>s.getAll().some(a=>a.state.status==="error"&&Ge(a.state.error));return n(l()),s.subscribe(()=>n(l()))},[e]),t}function Ye(){return Je()?r.jsxs("div",{role:"alert","aria-live":"assertive",className:"fixed right-4 bottom-4 z-50 flex max-w-sm items-start gap-2.5 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700 shadow-lg",children:[r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2","aria-hidden":!0,className:"mt-0.5 h-5 w-5 shrink-0",children:[r.jsx("path",{d:"M12 9v4M12 17h.01",strokeLinecap:"round",strokeLinejoin:"round"}),r.jsx("path",{d:"M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z",strokeLinejoin:"round"})]}),r.jsxs("span",{children:[r.jsx("strong",{className:"font-semibold",children:"Can’t reach the gateway."})," The backend isn’t responding; data won’t load or save until the connection is restored."]})]}):null}const _="models",K="pricing",xe="settings",ye="tool-settings",Y="aliases",X="discoverable",Z="providers",ee="provider-health",ve="stored-providers",Xe="model-metadata",Ze="build",A="keys",I="budgets",pe="users",te="usage",et=6e4,le=60*6e4;function Gt(){return g({queryKey:[_],queryFn:()=>o("/v1/models"),staleTime:6e4})}function tt(){return g({queryKey:[Ze],queryFn:()=>o("/dashboard-build.json"),refetchInterval:et,refetchOnWindowFocus:!0,staleTime:0,retry:!1})}function Jt(){return g({queryKey:[X],queryFn:()=>o("/v1/models/discoverable"),staleTime:5*6e4})}function Yt(){return g({queryKey:[Z],queryFn:()=>o("/v1/providers"),staleTime:5*6e4})}function Xt(){return g({queryKey:["provider-catalog"],queryFn:()=>o("/v1/providers/catalog"),staleTime:1/0})}function Zt(e){return g({queryKey:["provider-catalog",e],queryFn:()=>o(`/v1/providers/catalog/${encodeURIComponent(e)}`),enabled:e!=="",staleTime:1/0})}function er(){return g({queryKey:[ee],queryFn:()=>o("/v1/providers/health"),staleTime:le,refetchInterval:le})}function tr(){const e=y();return h({mutationFn:()=>o("/v1/providers/health?refresh=true"),onSuccess:t=>e.setQueryData([ee],t)})}function rr(){return g({queryKey:[ve],queryFn:()=>o("/v1/provider-credentials"),staleTime:6e4})}function U(e){e.invalidateQueries({queryKey:[ve]}),e.invalidateQueries({queryKey:[Z]}),e.invalidateQueries({queryKey:[_]}),e.invalidateQueries({queryKey:[X]}),e.invalidateQueries({queryKey:[ee]})}function nr(){const e=y();return h({mutationFn:t=>o("/v1/provider-credentials",{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>U(e)})}function sr(){const e=y();return h({mutationFn:({instance:t,body:n})=>o(`/v1/provider-credentials/${encodeURIComponent(t)}`,{method:"PATCH",body:JSON.stringify(n)}),onSuccess:()=>U(e)})}function ar(){const e=y();return h({mutationFn:t=>o(`/v1/provider-credentials/${encodeURIComponent(t)}`,{method:"DELETE"}),onSuccess:()=>U(e)})}function ir(){const e=y();return h({mutationFn:()=>o("/v1/provider-credentials/reencrypt",{method:"POST"}),onSuccess:()=>U(e)})}function or(){return h({mutationFn:e=>o(`/v1/provider-credentials/${encodeURIComponent(e)}/test`,{method:"POST"})})}function lr(){return h({mutationFn:e=>o("/v1/provider-credentials/test",{method:"POST",body:JSON.stringify(e)})})}function cr(){return g({queryKey:[Xe],queryFn:()=>o("/v1/models/metadata"),staleTime:10*6e4})}function ur(){return g({queryKey:[Y],queryFn:()=>o("/v1/aliases"),staleTime:6e4})}function dr(){const e=y();return h({mutationFn:t=>o("/v1/aliases",{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>{e.invalidateQueries({queryKey:[Y]}),e.invalidateQueries({queryKey:[_]})}})}function mr(){const e=y();return h({mutationFn:t=>o(`/v1/aliases/${encodeURIComponent(t)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:[Y]}),e.invalidateQueries({queryKey:[_]})}})}function rt(){return g({queryKey:[xe],queryFn:()=>o("/v1/settings"),staleTime:6e4})}function nt(){const e=y();return h({mutationFn:t=>o("/v1/settings",{method:"PATCH",body:JSON.stringify(t)}),onSuccess:t=>{e.setQueryData([xe],t),e.invalidateQueries({queryKey:[_]}),e.invalidateQueries({queryKey:[X]})}})}function fr(){return h({mutationFn:()=>o("/v1/settings/master-key/rotate",{method:"POST"})})}function hr(){return g({queryKey:[ye],queryFn:()=>o("/v1/tool-settings"),staleTime:6e4})}function xr(){const e=y();return h({mutationFn:t=>o("/v1/tool-settings",{method:"PATCH",body:JSON.stringify(t)}),onSuccess:t=>{e.setQueryData([ye],t)}})}function yr(){return h({mutationFn:({service:e,url:t})=>o(`/v1/tool-settings/${encodeURIComponent(e)}/test`,{method:"POST",body:JSON.stringify({url:t})})})}const B=1e3,st=100;async function at(){const e=[];for(let t=0;to("/v1/pricing",{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>{e.invalidateQueries({queryKey:[K]}),e.invalidateQueries({queryKey:[_]})}})}function gr(){const e=y();return h({mutationFn:t=>o(`/v1/pricing/${encodeURIComponent(t)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:[K]}),e.invalidateQueries({queryKey:[_]})}})}function br(){return h({mutationFn:()=>o("/v1/pricing/refresh",{method:"POST"})})}function jr(){const e=y();return h({mutationFn:()=>o("/v1/pricing/refresh/confirm",{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:[K]}),e.invalidateQueries({queryKey:[_]}),e.invalidateQueries({queryKey:[Z]})}})}function wr(){return h({mutationFn:()=>o("/v1/pricing/refresh/reject",{method:"POST"})})}const $=1e3,it=100;async function ot(){const e=[];for(let t=0;to("/v1/keys",{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>void e.invalidateQueries({queryKey:[A]})})}function Er(){const e=y();return h({mutationFn:({id:t,body:n})=>o(`/v1/keys/${encodeURIComponent(t)}`,{method:"PATCH",body:JSON.stringify(n)}),onSuccess:()=>void e.invalidateQueries({queryKey:[A]})})}function Pr(){const e=y();return h({mutationFn:t=>o(`/v1/keys/${encodeURIComponent(t)}/rotate`,{method:"POST"}),onSuccess:()=>void e.invalidateQueries({queryKey:[A]})})}function Nr(){const e=y();return h({mutationFn:t=>o(`/v1/keys/${encodeURIComponent(t)}`,{method:"DELETE"}),onSuccess:()=>void e.invalidateQueries({queryKey:[A]})})}const z=1e3,lt=100;async function ct(){const e=[];for(let t=0;to(`/v1/budgets/${encodeURIComponent(e)}/reset-logs`),enabled:e!==null,staleTime:6e4})}function _r(){const e=y();return h({mutationFn:t=>o("/v1/budgets",{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>void e.invalidateQueries({queryKey:[I]})})}function Lr(){const e=y();return h({mutationFn:({id:t,body:n})=>o(`/v1/budgets/${encodeURIComponent(t)}`,{method:"PATCH",body:JSON.stringify(n)}),onSuccess:()=>void e.invalidateQueries({queryKey:[I]})})}function Ar(){const e=y();return h({mutationFn:t=>o(`/v1/budgets/${encodeURIComponent(t)}`,{method:"DELETE"}),onSuccess:()=>void e.invalidateQueries({queryKey:[I]})})}const Q=1e3,ut=100;async function dt(){const e=[];for(let t=0;to("/v1/users",{method:"POST",body:JSON.stringify(t)}),onSuccess:()=>re(e)})}function Rr(){const e=y();return h({mutationFn:({id:t,body:n})=>o(`/v1/users/${encodeURIComponent(t)}`,{method:"PATCH",body:JSON.stringify(n)}),onSuccess:()=>re(e)})}function Or(){const e=y();return h({mutationFn:t=>o(`/v1/users/${encodeURIComponent(t)}`,{method:"DELETE"}),onSuccess:()=>{re(e),e.invalidateQueries({queryKey:[A]})}})}function ne(e){const t=new URLSearchParams;return e.start_date&&t.set("start_date",e.start_date),e.end_date&&t.set("end_date",e.end_date),e.status&&t.set("status",e.status),e.model&&t.set("model",e.model),e.endpoint&&t.set("endpoint",e.endpoint),e.user_id&&t.set("user_id",e.user_id),e.api_key_id&&t.set("api_key_id",e.api_key_id),t}function Dr(e,t,n){return g({queryKey:[te,"list",e,t,n],queryFn:()=>{const s=ne(e);return s.set("skip",String(t*n)),s.set("limit",String(n)),o(`/v1/usage?${s.toString()}`)},placeholderData:G,staleTime:1e4})}function Mr(e){return g({queryKey:[te,"count",e],queryFn:()=>o(`/v1/usage/count?${ne(e).toString()}`),placeholderData:G,staleTime:1e4})}function Fr(e,t,n=!0){return g({queryKey:[te,"summary",e,t],queryFn:()=>{const s=ne(e);return s.set("bucket",t),o(`/v1/usage/summary?${s.toString()}`)},enabled:n,placeholderData:G,staleTime:3e4})}function Kr(e){return e==null?"0":new Intl.NumberFormat("en-US").format(e)}function Ur(e){if(e==null)return"$0.00";const t=e!==0&&Math.abs(e)<.01?4:2;return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:t}).format(e)}function Br(e){if(e==null)return"—";if(e>=1e6){const t=e/1e6;return`${Number.isInteger(t)?t:t.toFixed(1)}M`}if(e>=1e3){const t=Math.round(e/1e3);return t>=1e3?"1M":`${t}K`}return String(e)}const mt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function $r(e){if(!e)return"—";const t=/^(\d{4})-(\d{2})/.exec(e);if(!t)return e;const n=Number(t[2])-1;return n<0||n>11?t[1]:`${mt[n]} ${t[1]}`}const ft=new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:2});function zr(e){return ft.format(e)}function Qr(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function ht(e){return`${(e*100).toFixed(1)}%`}function Vr(e,t){return t===void 0||t===0?null:(e-t)/t}function Hr(e,t=Date.now()){if(!e)return"never";const n=new Date(e);if(Number.isNaN(n.getTime()))return e;const s=Math.round((t-n.getTime())/1e3),l=s<0,a=Math.abs(s),x=[["second",60],["minute",60],["hour",24],["day",30],["month",12],["year",Number.POSITIVE_INFINITY]];let m=a,v="second";for(const[b,f]of x){if(v=b,m0?"▲":e<0?"▼":"•";return r.jsxs("span",{className:"text-[var(--otari-muted)]",children:[t," ",ht(Math.abs(e))," vs prev"]})}function xt(e){return e instanceof T||e instanceof Error?e.message:"Something went wrong."}function yt({error:e}){return e?r.jsx("div",{role:"alert",className:"rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700",children:xt(e)}):null}function vt({tone:e="info",children:t}){const n=e==="warning"?"border-amber-200 bg-amber-50 text-amber-800":"border-[var(--otari-brand)] bg-[var(--otari-brand-tint)] text-[var(--otari-brand-dark)]";return r.jsx("div",{className:`rounded-lg border px-4 py-3 text-sm ${n}`,children:t})}function Jr({title:e,description:t,action:n}){return r.jsxs("div",{className:"flex flex-col gap-3",children:[r.jsxs("div",{children:[r.jsx("h1",{className:"text-xl font-semibold text-[var(--otari-ink)]",children:e}),t?r.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:t}):null]}),n?r.jsx("div",{className:"flex flex-wrap gap-2",children:n}):null]})}function Yr({children:e,confirmLabel:t,onConfirm:n,isPending:s}){const[l,a]=i.useState(!1);return l?r.jsxs("span",{className:"inline-flex items-center gap-1",children:[r.jsx(C,{size:"sm",variant:"danger",isDisabled:s,onPress:n,children:t}),r.jsx(C,{size:"sm",variant:"ghost",isDisabled:s,onPress:()=>a(!1),children:"Cancel"})]}):r.jsx(C,{size:"sm",variant:"danger-soft",onPress:()=>a(!0),children:e})}const pt="rounded-lg border border-[var(--otari-line)] bg-[var(--otari-bg)] px-3 py-2 text-sm text-[var(--otari-ink)] focus:border-[var(--otari-brand)] focus:outline-none";function Xr({id:e,label:t,ariaLabel:n,value:s,onChange:l,options:a,children:x,disabled:m}){const v=i.useId(),u=e??(t?v:void 0),b=r.jsx("select",{id:u,"aria-label":t?void 0:n,value:s,disabled:m,onChange:f=>l(f.target.value),className:pt,children:a?a.map(f=>r.jsx("option",{value:f.value,children:f.label},f.value)):x});return t?r.jsxs("div",{className:"flex flex-col gap-1",children:[r.jsx("label",{htmlFor:u,className:"text-xs font-medium text-[var(--otari-muted)]",children:t}),b]}):b}function Zr({label:e,value:t,onChange:n,options:s,placeholder:l,maxVisible:a=50,allowsCustom:x=!1}){const m=d=>{var L;return((L=s.find(q=>q.value===d))==null?void 0:L.label)??d},[v,u]=i.useState(()=>m(t));i.useEffect(()=>{u(m(t))},[t]);const b=v.trim().toLowerCase(),f=s.filter(d=>!b||d.value.toLowerCase().includes(b)||d.label.toLowerCase().includes(b)).slice(0,a);return r.jsxs(D.Root,{allowsEmptyCollection:!0,allowsCustomValue:x,menuTrigger:"focus",inputValue:v,onInputChange:d=>{u(d),x?n(d.trim()):d.trim()===""&&n("")},onSelectionChange:d=>{d!=null&&n(String(d))},className:"flex flex-col gap-1",children:[r.jsx(me,{className:"text-xs font-medium text-[var(--otari-muted)]",children:e}),r.jsxs(D.InputGroup,{children:[r.jsx(fe,{placeholder:l,autoComplete:"off",onFocus:d=>d.currentTarget.select()}),r.jsx(D.Trigger,{})]}),r.jsx(D.Popover,{children:r.jsx(Me,{items:f,className:"max-h-72 overflow-auto",children:d=>r.jsx(Fe,{id:d.value,textValue:d.label,children:d.label})})})]})}function gt(){var a;const e=rt(),t=nt(),[n,s]=i.useState(!1);return!(((a=e.data)==null?void 0:a.require_pricing)===!0&&e.data.default_pricing===!1)||n?null:r.jsx("div",{className:"shrink-0 px-6 pt-3",children:r.jsx(vt,{tone:"warning",children:r.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[r.jsxs("span",{children:["Requests are rejected until pricing is set (",r.jsx("code",{children:"require_pricing"})," is on). Enable default pricing to meter new models with public rates right away."]}),r.jsxs("span",{className:"flex items-center gap-2",children:[r.jsx(C,{size:"sm",variant:"primary",isDisabled:t.isPending,onPress:()=>t.mutate({default_pricing:!0}),children:t.isPending?"Enabling…":"Enable default pricing"}),r.jsx(C,{size:"sm",variant:"ghost",onPress:()=>s(!0),children:"Dismiss"})]})]})})})}function bt(){const{data:e}=tt(),t=i.useRef(null);return e&&t.current===null&&(t.current=e.build),e!=null&&t.current!=null&&e.build!==t.current}function jt(){const e=bt(),[t,n]=i.useState(!1);return!e||t?null:r.jsx("div",{className:"pointer-events-none absolute inset-x-0 top-0 z-50 flex justify-center",children:r.jsxs("div",{role:"status",className:"pointer-events-auto mt-1.5 flex items-center gap-3 rounded-full border border-[var(--otari-brand)] bg-[var(--otari-brand-tint)] py-1.5 pr-1.5 pl-4 text-sm text-[var(--otari-brand-dark)] shadow-md",children:[r.jsxs("span",{children:[r.jsx("strong",{className:"font-semibold",children:"An update is available."})," Reloading keeps you signed in."]}),r.jsx(C,{size:"sm",variant:"primary",onPress:()=>window.location.reload(),children:"Update now"}),r.jsx(C,{size:"sm",variant:"ghost",onPress:()=>n(!0),children:"Later"})]})})}const ge=200,be=480,V=240,wt=60,je="otari.dashboard.sidebarWidth",we="otari.dashboard.sidebarCollapsed",ue=16,Se="(max-width: 767px)",F=e=>Math.min(be,Math.max(ge,e));function St(){return typeof window>"u"||typeof window.matchMedia!="function"?!1:window.matchMedia(Se).matches}const kt='a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])';function Et(e){return e?Array.from(e.querySelectorAll(kt)).filter(t=>t.offsetParent!==null||t===document.activeElement):[]}function Pt(){if(typeof window>"u")return V;try{const e=window.localStorage.getItem(je),t=e?Number.parseInt(e,10):Number.NaN;return Number.isNaN(t)?V:F(t)}catch{return V}}function Nt(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(we)==="1"}catch{return!1}}const Ct=[{key:"home"},{key:"observability",label:"Observability"},{key:"catalog",label:"Catalog"},{key:"access",label:"Access"},{key:"system"}],Tt=[{to:"/",section:"home",label:"Overview",end:!0,icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("rect",{x:"3.5",y:"3.5",width:"7",height:"7",rx:"1.5",strokeLinejoin:"round"}),r.jsx("rect",{x:"13.5",y:"3.5",width:"7",height:"7",rx:"1.5",strokeLinejoin:"round"}),r.jsx("rect",{x:"3.5",y:"13.5",width:"7",height:"7",rx:"1.5",strokeLinejoin:"round"}),r.jsx("rect",{x:"13.5",y:"13.5",width:"7",height:"7",rx:"1.5",strokeLinejoin:"round"})]})},{to:"/activity",section:"observability",label:"Activity",icon:r.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:r.jsx("path",{d:"M3 12h4l2.5-6 4 12 2.5-6H21",strokeLinecap:"round",strokeLinejoin:"round"})})},{to:"/usage",section:"observability",label:"Usage",icon:r.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:r.jsx("path",{d:"M4 20V10M10 20V4M16 20v-7M22 20H2",strokeLinecap:"round",strokeLinejoin:"round"})})},{to:"/providers",section:"catalog",label:"Providers",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("rect",{x:"3.5",y:"4.5",width:"17",height:"6",rx:"1.5",strokeLinejoin:"round"}),r.jsx("rect",{x:"3.5",y:"13.5",width:"17",height:"6",rx:"1.5",strokeLinejoin:"round"}),r.jsx("path",{d:"M7 7.5h.01M7 16.5h.01",strokeLinecap:"round",strokeLinejoin:"round"})]})},{to:"/users",section:"access",label:"Users",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("circle",{cx:"9",cy:"8",r:"3.2",strokeLinejoin:"round"}),r.jsx("path",{d:"M3.5 19a5.5 5.5 0 0 1 11 0",strokeLinecap:"round",strokeLinejoin:"round"}),r.jsx("path",{d:"M16 5.2a3.2 3.2 0 0 1 0 5.6M17.5 19a5.5 5.5 0 0 0-3-4.9",strokeLinecap:"round",strokeLinejoin:"round"})]})},{to:"/keys",section:"access",label:"API keys",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("circle",{cx:"7.5",cy:"15.5",r:"3.5"}),r.jsx("path",{d:"M10 13l7-7M14 5l3 3M16.5 7.5l2-2",strokeLinecap:"round",strokeLinejoin:"round"})]})},{to:"/budgets",section:"access",label:"Budgets",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("path",{d:"M3 7.5A1.5 1.5 0 0 1 4.5 6H18a1.5 1.5 0 0 1 1.5 1.5V9",strokeLinejoin:"round"}),r.jsx("rect",{x:"3",y:"7.5",width:"18",height:"12",rx:"1.5",strokeLinejoin:"round"}),r.jsx("path",{d:"M16 13.5h.01",strokeLinecap:"round",strokeLinejoin:"round"}),r.jsx("path",{d:"M21 12v3h-3.5a1.5 1.5 0 0 1 0-3H21z",strokeLinejoin:"round"})]})},{to:"/models",section:"catalog",label:"Models",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("path",{d:"M12 3l8 4.5v9L12 21l-8-4.5v-9L12 3z",strokeLinejoin:"round"}),r.jsx("path",{d:"M12 12l8-4.5M12 12v9M12 12L4 7.5",strokeLinejoin:"round"})]})},{to:"/aliases",section:"catalog",label:"Aliases",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("path",{d:"M20.6 13.4L13.4 20.6a2 2 0 0 1-2.8 0l-7-7A2 2 0 0 1 3 12.2V5a2 2 0 0 1 2-2h7.2a2 2 0 0 1 1.4.6l7 7a2 2 0 0 1 0 2.8z",strokeLinejoin:"round"}),r.jsx("circle",{cx:"7.5",cy:"7.5",r:"1.5"})]})},{to:"/tools",section:"system",label:"Tools & Guardrails",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("path",{d:"M14.7 6.3a4 4 0 0 1 5 5l-8.4 8.4a2 2 0 0 1-2.8 0l-2.2-2.2a2 2 0 0 1 0-2.8z",strokeLinejoin:"round"}),r.jsx("path",{d:"M12 9 5 16",strokeLinecap:"round"})]})},{to:"/settings",section:"system",label:"Settings",icon:r.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5 shrink-0",children:[r.jsx("circle",{cx:"12",cy:"12",r:"3"}),r.jsx("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z",strokeLinejoin:"round"})]})}];function _t(){const{logout:e}=J(),t=i.useRef(null),n=i.useRef(null),[s,l]=i.useState(Pt),[a,x]=i.useState(Nt),[m,v]=i.useState(!1),[u,b]=i.useState(St),[f,d]=i.useState(!1);i.useEffect(()=>{if(typeof window>"u"||typeof window.matchMedia!="function")return;const c=window.matchMedia(Se),p=j=>{b(j.matches),j.matches||d(!1)};return typeof c.addEventListener=="function"?(c.addEventListener("change",p),()=>c.removeEventListener("change",p)):(c.addListener(p),()=>c.removeListener(p))},[]),i.useEffect(()=>{if(!f)return;const c=p=>{p.key==="Escape"&&d(!1)};return window.addEventListener("keydown",c),()=>window.removeEventListener("keydown",c)},[f]),i.useEffect(()=>{var c,p,j;u&&(f?(c=t.current)==null||c.focus():(p=t.current)!=null&&p.contains(document.activeElement)&&((j=n.current)==null||j.focus()))},[u,f]);const L=i.useCallback(c=>{if(c.key!=="Tab")return;const p=Et(t.current);if(p.length===0)return;const j=p[0],S=p[p.length-1],R=document.activeElement;c.shiftKey&&(R===j||R===t.current)?(c.preventDefault(),S.focus()):!c.shiftKey&&R===S&&(c.preventDefault(),j.focus())},[]);i.useEffect(()=>{const c=window.setTimeout(()=>{try{window.localStorage.setItem(je,String(Math.round(s)))}catch{}},200);return()=>window.clearTimeout(c)},[s]),i.useEffect(()=>{try{window.localStorage.setItem(we,a?"1":"0")}catch{}},[a]);const q=i.useCallback(c=>{c.preventDefault(),c.currentTarget.setPointerCapture(c.pointerId),v(!0)},[]),Ee=i.useCallback(c=>{var j;if(!c.currentTarget.hasPointerCapture(c.pointerId))return;const p=((j=t.current)==null?void 0:j.getBoundingClientRect().left)??0;l(F(c.clientX-p))},[]),Pe=i.useCallback(c=>{c.currentTarget.hasPointerCapture(c.pointerId)&&c.currentTarget.releasePointerCapture(c.pointerId),v(!1)},[]),Ne=i.useCallback(c=>{c.key==="ArrowLeft"?(c.preventDefault(),l(p=>F(p-ue))):c.key==="ArrowRight"&&(c.preventDefault(),l(p=>F(p+ue)))},[]),Ce=a?wt:s,P=u?!1:a,se=u&&f?!0:void 0;return r.jsxs("div",{className:N("relative flex h-full flex-col overflow-hidden",m&&"cursor-col-resize select-none"),children:[r.jsxs("header",{inert:se,className:"flex shrink-0 items-center justify-between border-b border-[var(--otari-line)] bg-[var(--otari-surface)] px-5 py-3",children:[r.jsxs("div",{className:"flex items-center gap-2.5",children:[r.jsx("button",{type:"button",ref:n,onClick:()=>d(c=>!c),"aria-label":f?"Close navigation":"Open navigation","aria-expanded":f,"aria-controls":"app-sidebar",className:"-ml-1 flex h-8 w-8 items-center justify-center rounded-lg text-[var(--otari-muted)] transition-colors hover:bg-[var(--otari-bg)] hover:text-[var(--otari-ink)] md:hidden",children:r.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-5 w-5",children:r.jsx("path",{d:"M4 6h16M4 12h16M4 18h16",strokeLinecap:"round",strokeLinejoin:"round"})})}),r.jsx("img",{src:"/favicon.svg",alt:"",className:"h-7 w-7 shrink-0"}),r.jsx("span",{className:"text-base font-semibold text-[var(--otari-ink)]",children:"Otari"})]}),r.jsx(C,{size:"sm",variant:"outline",onPress:e,"aria-label":"Sign out",children:"Sign out"})]}),r.jsx(jt,{}),r.jsx(Ye,{}),r.jsx(gt,{}),r.jsxs("div",{className:"flex min-h-0 flex-1",children:[u&&f?r.jsx("div",{"aria-hidden":"true",onClick:()=>d(!1),className:"fixed inset-0 z-30 bg-black/40 md:hidden"}):null,r.jsxs("aside",{ref:t,id:"app-sidebar",role:u?"dialog":void 0,"aria-modal":u&&f?!0:void 0,"aria-label":u?"Navigation":void 0,tabIndex:u?-1:void 0,inert:u&&!f?!0:void 0,onKeyDown:u&&f?L:void 0,style:u?void 0:{width:Ce},className:N("flex flex-col border-r border-[var(--otari-line)] bg-[var(--otari-surface)] focus:outline-none",u?N("fixed inset-y-0 left-0 z-40 w-[17rem] shadow-xl transition-transform duration-200",f?"translate-x-0":"-translate-x-full"):N("relative shrink-0",!m&&"transition-[width] duration-150")),children:[r.jsx("button",{type:"button",onClick:()=>x(c=>!c),"aria-label":a?"Expand sidebar":"Collapse sidebar","aria-pressed":a,title:a?"Expand sidebar":"Collapse sidebar",className:"absolute -right-3 top-4 z-30 hidden h-6 w-6 items-center justify-center rounded-full border border-[var(--otari-line)] bg-[var(--otari-surface)] text-[var(--otari-muted)] shadow-sm transition-colors hover:border-[var(--otari-brand)] hover:text-[var(--otari-brand-dark)] md:flex",children:r.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",className:N("h-3.5 w-3.5 transition-transform",a&&"rotate-180"),children:r.jsx("path",{d:"M15 6l-6 6 6 6",strokeLinecap:"round",strokeLinejoin:"round"})})}),r.jsx("nav",{className:N("flex flex-col py-4",P?"px-2":"px-3"),children:Ct.map((c,p)=>{const j=Tt.filter(S=>S.section===c.key);return j.length===0?null:r.jsxs("div",{className:p>0?"mt-4":void 0,children:[!P&&c.label?r.jsx("div",{className:"px-3 pb-1 text-[11px] font-semibold tracking-wider text-[var(--otari-muted)] uppercase",children:c.label}):null,p>0&&(P||!c.label)?r.jsx("div",{className:"mx-1 mb-2 border-t border-[var(--otari-line)]"}):null,r.jsx("div",{className:"flex flex-col gap-1",children:j.map(S=>r.jsxs(de,{to:S.to,end:S.end,onClick:()=>d(!1),"aria-label":P?S.label:void 0,title:P?S.label:void 0,className:({isActive:R})=>N("flex items-center rounded-lg py-2 text-sm font-medium transition-colors",P?"justify-center px-0":"gap-3 px-3",R?"bg-[var(--otari-brand-tint)] text-[var(--otari-brand-dark)]":"text-[var(--otari-muted)] hover:bg-[var(--otari-bg)] hover:text-[var(--otari-ink)]"),children:[S.icon,P?null:S.label]},S.to))})]},c.key)})}),r.jsxs("a",{href:"https://otari.ai",target:"_blank",rel:"noreferrer",title:"otari.ai — the hosted Otari gateway",className:N("mt-auto mb-3 flex items-center rounded-lg py-2 text-xs font-medium text-[var(--otari-muted)] transition-colors hover:bg-[var(--otari-bg)] hover:text-[var(--otari-brand-dark)]",P?"mx-2 justify-center px-0":"mx-3 gap-2 px-3"),children:[r.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"h-4 w-4 shrink-0",children:r.jsx("path",{d:"M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z",strokeLinejoin:"round"})}),P?null:r.jsxs("span",{className:"flex-1",children:["otari.ai ",r.jsx("span",{"aria-hidden":!0,children:"↗"})]})]}),a||u?null:r.jsx("div",{role:"separator","aria-orientation":"vertical","aria-label":"Resize sidebar","aria-valuenow":Math.round(s),"aria-valuemin":ge,"aria-valuemax":be,tabIndex:0,onPointerDown:q,onPointerMove:Ee,onPointerUp:Pe,onKeyDown:Ne,className:N("absolute top-0 right-0 z-10 h-full w-1.5 cursor-col-resize touch-none transition-colors","hover:bg-[var(--otari-brand)] focus-visible:bg-[var(--otari-brand)] focus:outline-none",m?"bg-[var(--otari-brand)]":"bg-transparent")})]}),r.jsx("main",{inert:se,className:"flex-1 overflow-y-auto",children:r.jsx("div",{className:"mx-auto flex max-w-[1800px] flex-col gap-6 px-4 py-5 md:px-6 md:py-6",children:r.jsx(qe,{})})})]})]})}function Lt(){const{login:e}=J(),[t,n]=i.useState(""),[s,l]=i.useState(null),[a,x]=i.useState(!1),m=async()=>{const v=t.trim();if(!(!v||a)){x(!0),l(null);try{await Qe(v)?e():l(new Error("Invalid master key."))}catch(u){l(u)}finally{x(!1)}}};return r.jsx("div",{className:"flex min-h-full items-center justify-center p-6",children:r.jsx(O,{className:"w-full max-w-md",children:r.jsxs(O.Content,{className:"flex flex-col gap-5 p-7",children:[r.jsxs("div",{className:"flex flex-col items-center gap-3 text-center",children:[r.jsx("img",{src:"/favicon.svg",alt:"Otari",className:"h-12 w-12"}),r.jsxs("div",{children:[r.jsx("h1",{className:"text-lg font-semibold text-[var(--otari-ink)]",children:"Otari Dashboard"}),r.jsx("p",{className:"mt-1 text-sm text-[var(--otari-muted)]",children:"Sign in with your master key to browse models, set pricing, and manage settings."})]})]}),r.jsxs("form",{className:"flex flex-col gap-4",onSubmit:v=>{v.preventDefault(),m()},children:[r.jsxs(Ke,{value:t,onChange:v=>{n(v),s&&l(null)},type:"password",isRequired:!0,className:"flex flex-col gap-1",children:[r.jsx(me,{className:"text-sm font-medium text-[var(--otari-ink)]",children:"Master key"}),r.jsx(fe,{placeholder:"otari-mk-… or your master key",autoFocus:!0,autoComplete:"off"})]}),r.jsxs("details",{className:"text-xs text-[var(--otari-muted)]",children:[r.jsx("summary",{className:"cursor-pointer font-medium text-[var(--otari-brand-dark)]",children:"First run? Where to find your key"}),r.jsxs("p",{className:"mt-2 leading-relaxed",children:["If you did not set ",r.jsx("code",{children:"OTARI_MASTER_KEY"}),", Otari generated one and printed it to the server logs on startup. Look for the line ",r.jsx("code",{children:"Your master key:"})," (for example, run"," ",r.jsx("code",{children:"docker logs "}),") and paste it above."]})]}),r.jsx(yt,{error:s}),r.jsx(C,{type:"submit",variant:"primary",fullWidth:!0,isDisabled:!t.trim()||a,children:a?"Signing in…":"Sign in"})]}),r.jsx("p",{className:"text-center text-xs text-[var(--otari-muted)]",children:"The key is sent once to this gateway and exchanged for a session cookie; it is never stored in the browser."}),r.jsx("div",{className:"border-t border-[var(--otari-line)] pt-4 text-center",children:r.jsx(Ue,{href:"/welcome",className:"text-sm font-medium text-[var(--otari-brand-dark)]",children:"New to Otari? Open the welcome guide"})})]})})})}const At=i.lazy(async()=>({default:(await E(async()=>{const{ActivityPage:e}=await import("./ActivityPage-CuHC0RK1.js");return{ActivityPage:e}},__vite__mapDeps([0,1,2,3,4]))).ActivityPage})),It=i.lazy(async()=>({default:(await E(async()=>{const{AliasesPage:e}=await import("./AliasesPage-BqLd7LKr.js");return{AliasesPage:e}},__vite__mapDeps([5,1,2,6,3,4]))).AliasesPage})),qt=i.lazy(async()=>({default:(await E(async()=>{const{BudgetsPage:e}=await import("./BudgetsPage-Bg0Es-aw.js");return{BudgetsPage:e}},__vite__mapDeps([7,1,2,6,3,4]))).BudgetsPage})),Rt=i.lazy(async()=>({default:(await E(async()=>{const{KeysPage:e}=await import("./KeysPage-BfiWORhW.js");return{KeysPage:e}},__vite__mapDeps([8,1,2,6,3,9,4]))).KeysPage})),Ot=i.lazy(async()=>({default:(await E(async()=>{const{ModelsPage:e}=await import("./ModelsPage-DAJitSnp.js");return{ModelsPage:e}},__vite__mapDeps([10,1,2,4,3]))).ModelsPage})),Dt=i.lazy(async()=>({default:(await E(async()=>{const{OverviewIndex:e}=await import("./OverviewPage-D-4Und7I.js");return{OverviewIndex:e}},__vite__mapDeps([11,1,2,12,13,3,4]))).OverviewIndex})),Mt=i.lazy(async()=>({default:(await E(async()=>{const{ProvidersPage:e}=await import("./ProvidersPage-ZF6ihggi.js");return{ProvidersPage:e}},__vite__mapDeps([14,1,2,6,3,4]))).ProvidersPage})),Ft=i.lazy(async()=>({default:(await E(async()=>{const{SettingsPage:e}=await import("./SettingsPage-CWqsNLqk.js");return{SettingsPage:e}},__vite__mapDeps([15,1,2,3]))).SettingsPage})),Kt=i.lazy(async()=>({default:(await E(async()=>{const{ToolsGuardrailsPage:e}=await import("./ToolsGuardrailsPage-CrPO-IWo.js");return{ToolsGuardrailsPage:e}},__vite__mapDeps([16,1,2,3]))).ToolsGuardrailsPage})),Ut=i.lazy(async()=>({default:(await E(async()=>{const{UsagePage:e}=await import("./UsagePage-B_5F4WNt.js");return{UsagePage:e}},__vite__mapDeps([17,1,2,3,12,13,4]))).UsagePage})),Bt=i.lazy(async()=>({default:(await E(async()=>{const{UsersPage:e}=await import("./UsersPage-28zvfI6e.js");return{UsersPage:e}},__vite__mapDeps([18,1,2,6,3,9,4]))).UsersPage}));function k(e){return r.jsx(i.Suspense,{fallback:r.jsx("div",{role:"status",children:"Loading page…"}),children:e})}function $t(){const{isAuthenticated:e}=J();return e?r.jsx(Re,{children:r.jsx(Oe,{children:r.jsxs(w,{element:r.jsx(_t,{}),children:[r.jsx(w,{index:!0,element:k(r.jsx(Dt,{}))}),r.jsx(w,{path:"providers",element:k(r.jsx(Mt,{}))}),r.jsx(w,{path:"keys",element:k(r.jsx(Rt,{}))}),r.jsx(w,{path:"users",element:k(r.jsx(Bt,{}))}),r.jsx(w,{path:"budgets",element:k(r.jsx(qt,{}))}),r.jsx(w,{path:"activity",element:k(r.jsx(At,{}))}),r.jsx(w,{path:"usage",element:k(r.jsx(Ut,{}))}),r.jsx(w,{path:"models",element:k(r.jsx(Ot,{}))}),r.jsx(w,{path:"aliases",element:k(r.jsx(It,{}))}),r.jsx(w,{path:"tools",element:k(r.jsx(Kt,{}))}),r.jsx(w,{path:"settings",element:k(r.jsx(Ft,{}))}),r.jsx(w,{path:"*",element:r.jsx(De,{to:"/",replace:!0})})]})})}):r.jsx(Lt,{})}function zt({children:e}){const[t]=i.useState(()=>new Le({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:(n,s)=>s instanceof T&&(s.status===401||s.status===403)?!1:n<2}}}));return r.jsx(Ae,{client:t,children:r.jsx(We,{children:e})})}const ke=document.getElementById("root");if(!ke)throw new Error("Root element #root not found");Be.createRoot(ke).render(r.jsx(i.StrictMode,{children:r.jsx(zt,{children:r.jsx($t,{})})}));export{lr as $,$r as A,rt as B,Yr as C,Ur as D,yt as E,Xr as F,pr as G,gr as H,vt as I,Yt as J,er as K,Vr as L,zr as M,Gr as N,ht as O,Jr as P,Hr as Q,rr as R,Wr as S,ar as T,or as U,nt as V,sr as W,tr as X,nr as Y,Zt as Z,Xt as _,Sr as a,br as a0,jr as a1,wr as a2,fr as a3,ir as a4,hr as a5,xr as a6,yr as a7,Qr as a8,Or as a9,qr as aa,Dr as b,Mr as c,Fr as d,Zr as e,Jt as f,ur as g,mr as h,xt as i,dr as j,Cr as k,_r as l,Lr as m,Ar as n,Rr as o,Tr as p,Er as q,Pr as r,Nr as s,kr as t,Ir as u,Gt as v,vr as w,cr as x,Br as y,Kr as z}; diff --git a/src/gateway/static/dashboard/assets/index-DoDRzM88.css b/src/gateway/static/dashboard/assets/index-pOfhHB4P.css similarity index 94% rename from src/gateway/static/dashboard/assets/index-DoDRzM88.css rename to src/gateway/static/dashboard/assets/index-pOfhHB4P.css index 6a68edfe..c71bc65f 100644 --- a/src/gateway/static/dashboard/assets/index-DoDRzM88.css +++ b/src/gateway/static/dashboard/assets/index-pOfhHB4P.css @@ -1 +1 @@ -/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-divide-y-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-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;--tw-content:"";--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-space-y-reverse:0;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-space-x-reverse: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-50:oklch(97.1% .013 17.38);--color-red-200:oklch(88.5% .062 18.334);--color-red-500:oklch(63.7% .237 25.331);--color-red-700:oklch(50.5% .213 27.518);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-green-50:oklch(98.2% .018 155.826);--color-green-200:oklch(92.5% .084 155.995);--color-green-500:oklch(72.3% .219 149.579);--color-green-700:oklch(52.7% .154 150.069);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-xl:calc(var(--radius) * 1.5);--radius-2xl:calc(var(--radius) * 2);--radius-3xl:calc(var(--radius) * 3);--ease-out:cubic-bezier(0, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-md:12px;--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);--shadow-surface:var(--surface-shadow);--shadow-overlay:var(--overlay-shadow);--border-width-field:var(--field-border-width,var(--border-width));--ease-smooth:ease;--ease-out-quad:cubic-bezier(.25, .46, .45, .94);--ease-out-quart:cubic-bezier(.165, .84, .44, 1);--ease-out-fluid:cubic-bezier(.32, .72, 0, 1);--ease-linear:linear}@layer theme.base{:root,.light,.default,[data-theme=light],[data-theme=default]{color-scheme:light;--white:oklch(100% 0 0);--black:oklch(0% 0 0);--snow:oklch(99.11% 0 0);--eclipse:oklch(21.03% .0059 285.89);--spacing:.25rem;--border-width:1px;--field-border-width:0px;--disabled-opacity:.5;--ring-offset-width:2px;--cursor-interactive:pointer;--cursor-disabled:not-allowed;--radius:.5rem;--field-radius:calc(var(--radius) * 1.5);--background:oklch(97.02% 0 0);--foreground:var(--eclipse);--surface:var(--white);--surface-foreground:var(--foreground);--surface-secondary:oklch(95.24% .0013 286.37);--surface-secondary-foreground:var(--foreground);--surface-tertiary:oklch(93.73% .0013 286.37);--surface-tertiary-foreground:var(--foreground);--overlay:var(--white);--overlay-foreground:var(--foreground);--muted:oklch(55.17% .0138 285.94);--scrollbar:var(--scrollbar-thumb);--scrollbar-thumb:var(--foreground)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--scrollbar-thumb:color-mix(in oklch, var(--foreground) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--scrollbar-track:transparent;--scrollbar-gutter:auto;--scrollbar-width:thin;--scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track);--default:oklch(94% .001 286.375);--default-foreground:var(--eclipse);--accent:oklch(62.04% .195 253.83);--accent-foreground:var(--snow);--field-background:var(--white);--field-foreground:oklch(21.03% .0059 285.89);--field-placeholder:var(--muted);--field-border:transparent;--success:oklch(73.29% .1935 150.81);--success-foreground:var(--eclipse);--warning:oklch(78.19% .1585 72.33);--warning-foreground:var(--eclipse);--danger:oklch(65.32% .2328 25.74);--danger-foreground:var(--snow);--segment:var(--white);--segment-foreground:var(--eclipse);--border:oklch(90% .004 286.32);--separator:oklch(92% .004 286.32);--focus:var(--accent);--link:var(--foreground);--backdrop:#00000080;--surface-hover:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--surface-hover:color-mix(in oklab, var(--surface) 92%, var(--surface-foreground) 8%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--background-secondary:var(--background)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--background-secondary:color-mix(in oklab, var(--background) 96%, var(--foreground) 4%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--background-tertiary:var(--background)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--background-tertiary:color-mix(in oklab, var(--background) 92%, var(--foreground) 8%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--background-inverse:var(--foreground);--default-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--default-hover:color-mix(in oklab, var(--default) 96%, var(--default-foreground) 4%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-hover:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-hover:color-mix(in oklab, var(--accent) 90%, var(--accent-foreground) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--success-hover:var(--success)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--success-hover:color-mix(in oklab, var(--success) 90%, var(--success-foreground) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-hover:var(--warning)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-hover:color-mix(in oklab, var(--warning) 90%, var(--warning-foreground) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-hover:var(--danger)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-hover:color-mix(in oklab, var(--danger) 90%, var(--danger-foreground) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--field-hover:var(--field-background,var(--default))}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--field-hover:color-mix(in oklab, var(--field-background,var(--default)) 90%, var(--field-foreground,var(--foreground)) 2%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--field-focus:var(--field-background,var(--default));--field-border-hover:var(--field-border,var(--border))}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--field-border-hover:color-mix(in oklab, var(--field-border,var(--border)) 88%, var(--field-foreground,var(--foreground)) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--field-border-focus:var(--field-border,var(--border))}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--field-border-focus:color-mix(in oklab, var(--field-border,var(--border)) 74%, var(--field-foreground,var(--foreground)) 22%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--default-soft:var(--default)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--default-soft:color-mix(in oklab, var(--default) 50%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--default-soft-foreground:var(--default-foreground);--default-soft-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--default-soft-hover:color-mix(in oklab, var(--default) 60%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-soft:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-soft:color-mix(in oklab, var(--accent) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-soft-foreground:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-soft-foreground:color-mix(in oklab, var(--accent) 70%, var(--foreground) 30%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-soft-hover:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-soft-hover:color-mix(in oklab, var(--accent) 20%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-soft:var(--danger)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-soft:color-mix(in oklab, var(--danger) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-soft-foreground:var(--danger)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-soft-foreground:color-mix(in oklab, var(--danger) 70%, var(--foreground) 40%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-soft-hover:var(--danger)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-soft-hover:color-mix(in oklab, var(--danger) 20%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-soft:var(--warning)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-soft:color-mix(in oklab, var(--warning) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-soft-foreground:var(--warning)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-soft-foreground:color-mix(in oklab, var(--warning) 80%, var(--foreground) 70%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-soft-hover:var(--warning)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-soft-hover:color-mix(in oklab, var(--warning) 20%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--success-soft:var(--success)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--success-soft:color-mix(in oklab, var(--success) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--success-soft-foreground:var(--success)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--success-soft-foreground:color-mix(in oklab, var(--success) 80%, var(--foreground) 60%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--success-soft-hover:var(--success)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--success-soft-hover:color-mix(in oklab, var(--success) 20%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--separator-secondary:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--separator-secondary:color-mix(in oklab, var(--surface) 85%, var(--surface-foreground) 15%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--separator-tertiary:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--separator-tertiary:color-mix(in oklab, var(--surface) 81%, var(--surface-foreground) 19%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--border-secondary:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--border-secondary:color-mix(in oklab, var(--surface) 78%, var(--surface-foreground) 22%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--border-tertiary:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--border-tertiary:color-mix(in oklab, var(--surface) 66%, var(--surface-foreground) 34%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--surface-shadow:0 2px 4px 0 #0000000a, 0 1px 2px 0 #0000000f, 0 0 1px 0 #0000000f;--overlay-shadow:0 2px 8px 0 #0000000f, 0 -6px 12px 0 #00000008, 0 14px 28px 0 #00000014;--field-shadow:0 2px 4px 0 #0000000a, 0 1px 2px 0 #0000000f, 0 0 1px 0 #0000000f;--skeleton-animation:shimmer;--tooltip-delay:1.5s;--tooltip-close-delay:.5s}.dark,[data-theme=dark]{color-scheme:dark;--background:oklch(12% .005 285.823);--foreground:var(--snow);--surface:oklch(21.03% .0059 285.89);--surface-foreground:var(--foreground);--surface-secondary:oklch(25.7% .0037 286.14);--surface-tertiary:oklch(27.21% .0024 247.91);--overlay:oklch(21.03% .0059 285.89);--overlay-foreground:var(--foreground);--muted:oklch(70.5% .015 286.067);--scrollbar:var(--scrollbar-thumb);--scrollbar-thumb:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--scrollbar-thumb:color-mix(in oklch, var(--foreground) 15%, transparent)}}.dark,[data-theme=dark]{--scrollbar-track:transparent;--scrollbar-gutter:auto;--scrollbar-width:thin;--scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track);--default:oklch(27.4% .006 286.033);--default-foreground:var(--snow);--field-background:oklch(21.03% .0059 285.89);--field-foreground:var(--foreground);--warning:oklch(82.03% .1388 76.34);--warning-foreground:var(--eclipse);--danger:oklch(59.4% .1967 24.63);--danger-foreground:var(--snow);--segment:oklch(39.64% .01 285.93);--segment-foreground:var(--foreground);--border:oklch(28% .006 286.033);--separator:oklch(25% .006 286.033);--focus:var(--accent);--link:var(--foreground);--backdrop:#0009;--surface-shadow:0 0 0 0 transparent inset;--overlay-shadow:0 0 1px 0 #ffffff4d inset;--field-shadow:0 0 0 0 transparent inset;--surface-hover:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--surface-hover:color-mix(in oklab, var(--surface) 92%, var(--surface-foreground) 8%)}}.dark,[data-theme=dark]{--background-secondary:var(--background)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--background-secondary:color-mix(in oklab, var(--background) 96%, var(--foreground) 4%)}}.dark,[data-theme=dark]{--background-tertiary:var(--background)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--background-tertiary:color-mix(in oklab, var(--background) 92%, var(--foreground) 8%)}}.dark,[data-theme=dark]{--background-inverse:var(--foreground);--default-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--default-hover:color-mix(in oklab, var(--default) 96%, var(--default-foreground) 4%)}}.dark,[data-theme=dark]{--accent-hover:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--accent-hover:color-mix(in oklab, var(--accent) 90%, var(--accent-foreground) 10%)}}.dark,[data-theme=dark]{--success-hover:var(--success)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--success-hover:color-mix(in oklab, var(--success) 90%, var(--success-foreground) 10%)}}.dark,[data-theme=dark]{--warning-hover:var(--warning)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--warning-hover:color-mix(in oklab, var(--warning) 90%, var(--warning-foreground) 10%)}}.dark,[data-theme=dark]{--danger-hover:var(--danger)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--danger-hover:color-mix(in oklab, var(--danger) 90%, var(--danger-foreground) 10%)}}.dark,[data-theme=dark]{--field-hover:var(--field-background,var(--default))}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--field-hover:color-mix(in oklab, var(--field-background,var(--default)) 90%, var(--field-foreground,var(--foreground)) 2%)}}.dark,[data-theme=dark]{--field-focus:var(--field-background,var(--default));--field-border-hover:var(--field-border,var(--border))}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--field-border-hover:color-mix(in oklab, var(--field-border,var(--border)) 88%, var(--field-foreground,var(--foreground)) 10%)}}.dark,[data-theme=dark]{--field-border-focus:var(--field-border,var(--border))}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--field-border-focus:color-mix(in oklab, var(--field-border,var(--border)) 74%, var(--field-foreground,var(--foreground)) 22%)}}.dark,[data-theme=dark]{--default-soft:var(--default)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--default-soft:color-mix(in oklab, var(--default) 50%, transparent)}}.dark,[data-theme=dark]{--default-soft-foreground:var(--default-foreground);--default-soft-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--default-soft-hover:color-mix(in oklab, var(--default) 60%, transparent)}}.dark,[data-theme=dark]{--accent-soft:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--accent-soft:color-mix(in oklab, var(--accent) 12%, transparent)}}.dark,[data-theme=dark]{--accent-soft-foreground:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--accent-soft-foreground:color-mix(in oklab, var(--accent) 80%, var(--foreground) 30%)}}.dark,[data-theme=dark]{--accent-soft-hover:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--accent-soft-hover:color-mix(in oklab, var(--accent) 16%, transparent)}}.dark,[data-theme=dark]{--danger-soft:var(--danger)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--danger-soft:color-mix(in oklab, var(--danger) 15%, transparent)}}.dark,[data-theme=dark]{--danger-soft-foreground:var(--danger)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--danger-soft-foreground:color-mix(in oklab, var(--danger) 80%, var(--foreground) 30%)}}.dark,[data-theme=dark]{--danger-soft-hover:var(--danger)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--danger-soft-hover:color-mix(in oklab, var(--danger) 20%, transparent)}}.dark,[data-theme=dark]{--warning-soft:var(--warning)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--warning-soft:color-mix(in oklab, var(--warning) 12%, transparent)}}.dark,[data-theme=dark]{--warning-soft-foreground:var(--warning)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--warning-soft-foreground:color-mix(in oklab, var(--warning) 80%, var(--foreground) 30%)}}.dark,[data-theme=dark]{--warning-soft-hover:var(--warning)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--warning-soft-hover:color-mix(in oklab, var(--warning) 16%, transparent)}}.dark,[data-theme=dark]{--success-soft:var(--success)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--success-soft:color-mix(in oklab, var(--success) 12%, transparent)}}.dark,[data-theme=dark]{--success-soft-foreground:var(--success)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--success-soft-foreground:color-mix(in oklab, var(--success) 80%, var(--foreground) 30%)}}.dark,[data-theme=dark]{--success-soft-hover:var(--success)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--success-soft-hover:color-mix(in oklab, var(--success) 16%, transparent)}}.dark,[data-theme=dark]{--separator-secondary:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--separator-secondary:color-mix(in oklab, var(--surface) 85%, var(--surface-foreground) 15%)}}.dark,[data-theme=dark]{--separator-tertiary:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--separator-tertiary:color-mix(in oklab, var(--surface) 81%, var(--surface-foreground) 19%)}}.dark,[data-theme=dark]{--border-secondary:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--border-secondary:color-mix(in oklab, var(--surface) 78%, var(--surface-foreground) 22%)}}.dark,[data-theme=dark]{--border-tertiary:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--border-tertiary:color-mix(in oklab, var(--surface) 66%, var(--surface-foreground) 34%)}}[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--accent-soft-foreground:var(--accent)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--accent-soft-foreground:color-mix(in oklab, var(--accent) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--danger-soft-foreground:var(--danger)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--danger-soft-foreground:color-mix(in oklab, var(--danger) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--warning-soft-foreground:var(--warning)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--warning-soft-foreground:color-mix(in oklab, var(--warning) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--success-soft-foreground:var(--success)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--success-soft-foreground:color-mix(in oklab, var(--success) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--accent-soft-foreground:var(--accent)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--accent-soft-foreground:color-mix(in oklab, var(--accent) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--danger-soft-foreground:var(--danger)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--danger-soft-foreground:color-mix(in oklab, var(--danger) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--warning-soft-foreground:var(--warning)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--warning-soft-foreground:color-mix(in oklab, var(--warning) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--success-soft-foreground:var(--success)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--success-soft-foreground:color-mix(in oklab, var(--success) 92%, var(--foreground) 8%)}}}@layer components;}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;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]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*,:after,:before,::backdrop{border-color:var(--border,currentColor)}::file-selector-button{border-color:var(--border,currentColor)}:root{view-transition-name:none}::view-transition{pointer-events:none}[data-scrollbar=thin]{--scrollbar-width:thin;--scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track);--scrollbar-gutter:auto}[data-scrollbar=default]{--scrollbar-width:auto;--scrollbar-color:auto;--scrollbar-gutter:auto}[data-scrollbar=none]{--scrollbar-width:none;--scrollbar-color:auto;--scrollbar-gutter:auto}}@layer components{.close-button{isolation:isolate;height:calc(var(--spacing) * 6);width:calc(var(--spacing) * 6);transform-origin:50%;border-radius:calc(var(--radius) * 1.5);padding:var(--spacing);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:transform .25s var(--ease-out-quart),color .15s var(--ease-out),background-color .1s var(--ease-out),box-shadow .15s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.close-button:focus-visible:not(:focus),.close-button[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.close-button:disabled,.close-button[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.close-button[data-pending=true]{pointer-events:none}.close-button svg{pointer-events:none;width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);margin-inline:calc(var(--spacing) * -.5);margin-block:calc(var(--spacing) * .5);flex-shrink:0;align-self:center}.close-button--default{background-color:var(--default);color:var(--muted)}@media(hover:hover){.close-button--default:hover,.close-button--default[data-hovered=true]{background-color:var(--default-hover)}}.close-button--default:active,.close-button--default[data-pressed=true]{transform:scale(.93)}.description{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));text-wrap:wrap;overflow-wrap:break-word;color:var(--muted)}.error-message{height:auto;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));overflow-wrap:break-word;color:var(--danger);transition:opacity .15s var(--ease-out),height .35s var(--ease-smooth)}.error-message:is([data-reduce-motion=true],[data-reduce-motion=true] *),.error-message:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.error-message:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.error-message:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.error-message:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.error-message:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.field-error{height:0;padding-inline:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));overflow-wrap:break-word;color:var(--danger);opacity:0}.field-error[data-visible]{opacity:1;height:auto}.field-error{transition:opacity .15s var(--ease-out),height .35s var(--ease-smooth)}.field-error:is([data-reduce-motion=true],[data-reduce-motion=true] *),.field-error:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.field-error:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.field-error:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.field-error:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.field-error:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.checkbox>.field-error,.checkbox>[data-slot=field-error],.switch>.field-error,.switch>[data-slot=field-error],.radio>.field-error,.radio>[data-slot=field-error]{height:auto;min-height:0;color:var(--muted);opacity:1;margin:0;padding:0;transition:none}.label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}:is(.label--required,[data-required=true]:not([role=group]):not([role=radiogroup]):not([role=checkboxgroup])>.label,[data-required=true]:not([data-slot=radio]):not([data-slot=checkbox])>.label):after{margin-left:calc(var(--spacing) * .5);color:var(--danger);--tw-content:"*";content:var(--tw-content)}.label--disabled,[data-disabled=true] .label{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.label--invalid,[data-invalid=true] .label,[aria-invalid=true] .label{color:var(--danger)}.accordion{contain:layout style;width:100%}.accordion__body{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.accordion__body-inner{padding-inline:calc(var(--spacing) * 4);padding-top:0;padding-bottom:calc(var(--spacing) * 4);color:var(--muted)}.accordion__indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);color:var(--muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;flex-shrink:0;margin-left:auto;transition-duration:.25s}.accordion__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.accordion__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.accordion__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.accordion__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.accordion__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.accordion__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.accordion__indicator[data-expanded=true]{rotate:-180deg}.accordion__item{--tw-border-style:none;border-style:none;position:relative}.accordion__item:after{content:"";border-radius:calc(var(--radius) * .25);background-color:var(--separator);width:100%;height:1px;position:absolute;bottom:0;left:0}.accordion__item:last-child:after{content:none}.accordion__item[data-hide-separator=true]:after{display:none}.accordion__trigger{cursor:var(--cursor-interactive);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 4);text-align:left;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);-webkit-tap-highlight-color:transparent;transition:opacity .15s var(--ease-out),box-shadow .15s var(--ease-out);flex:1;justify-content:space-between;align-items:center;display:flex}.accordion__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.accordion__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.accordion__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.accordion__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.accordion__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.accordion__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.accordion__trigger:hover:not([aria-expanded=true]),.accordion__trigger[data-hovered=true]:not([aria-expanded=true]){background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.accordion__trigger:hover:not([aria-expanded=true]),.accordion__trigger[data-hovered=true]:not([aria-expanded=true]){background-color:color-mix(in oklab,var(--foreground) 3%,transparent 90%)}}}.accordion__trigger:focus-visible:not(:focus),.accordion__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.accordion__trigger:disabled,.accordion__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.accordion__panel{opacity:0;height:var(--disclosure-panel-height);transition:height .2s var(--ease-out-quad),opacity .2s var(--ease-out);overflow:clip}.accordion__panel:is([data-reduce-motion=true],[data-reduce-motion=true] *),.accordion__panel:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.accordion__panel:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.accordion__panel:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.accordion__panel:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.accordion__panel:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.accordion__panel[data-expanded=true]{will-change:height,opacity;opacity:1}.accordion--surface{background-color:var(--surface);border-radius:min(32px,var(--radius-3xl))}@media(hover:hover){.accordion--surface .accordion__trigger:hover:not([aria-expanded=true]),.accordion--surface .accordion__trigger[data-hovered=true]:not([aria-expanded=true]){background-color:var(--default)}}.accordion--surface .accordion__item:after{background-color:var(--surface-foreground)}@supports (color:color-mix(in lab,red,red)){.accordion--surface .accordion__item:after{background-color:color-mix(in oklab,var(--surface-foreground) 6%,transparent)}}.accordion--surface .accordion__item:after{width:94%;left:3%}.accordion--surface .accordion__item:first-child [data-slot=accordion-trigger]{border-top-left-radius:min(32px,var(--radius-3xl));border-top-right-radius:min(32px,var(--radius-3xl))}.accordion--surface .accordion__item:last-child:not(:has([data-slot=accordion-trigger][aria-expanded=true])) [data-slot=accordion-trigger]{border-bottom-left-radius:min(32px,var(--radius-3xl));border-bottom-right-radius:min(32px,var(--radius-3xl))}.breadcrumbs{align-items:center;display:flex}.breadcrumbs .breadcrumbs__link{padding-inline:calc(var(--spacing) * .5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);opacity:1;text-decoration-line:none;position:relative}.breadcrumbs .breadcrumbs__link:hover,.breadcrumbs .breadcrumbs__link[data-hovered=true]{text-decoration-line:underline}.breadcrumbs .breadcrumbs__link[data-current=true]{color:var(--link);opacity:1}.breadcrumbs .breadcrumbs__item{justify-content:center;align-items:center;gap:calc(var(--spacing) * .5);padding-inline:calc(var(--spacing) * .5);flex-shrink:0;display:flex}.breadcrumbs .breadcrumbs__separator{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);color:var(--muted)}.breadcrumbs .breadcrumbs__separator:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}.disclosure-group{contain:layout style;width:100%}.disclosure{position:relative}.accordion__heading{display:flex}.disclosure__trigger{cursor:var(--cursor-interactive);-webkit-tap-highlight-color:transparent;display:inline-block}.disclosure__trigger:focus-visible:not(:focus),.disclosure__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.disclosure__trigger:disabled,.disclosure__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.disclosure__indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);color:inherit;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;flex-shrink:0;margin-left:auto;transition-duration:.25s}.disclosure__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.disclosure__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.disclosure__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.disclosure__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.disclosure__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.disclosure__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.disclosure__indicator[data-expanded=true]{rotate:-180deg}.disclosure__content{opacity:0;height:var(--disclosure-panel-height);transition:height .2s var(--ease-out-quad),opacity .2s var(--ease-out);overflow:clip}.disclosure__content:is([data-reduce-motion=true],[data-reduce-motion=true] *),.disclosure__content:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.disclosure__content:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.disclosure__content:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.disclosure__content:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.disclosure__content:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.disclosure__content[data-expanded=true]{will-change:height,opacity;opacity:1}.disclosure__body{padding:calc(var(--spacing) * 2)}.link{border-radius:calc(var(--radius) * 1.5);--tw-font-weight:var(--font-weight-medium);width:fit-content;height:fit-content;font-weight:var(--font-weight-medium);color:var(--link);text-decoration-line:none;-webkit-text-decoration-color:var(--separator-tertiary);text-decoration-color:var(--separator-tertiary);text-underline-offset:4px;-webkit-tap-highlight-color:transparent;transition:color .1s var(--ease-smooth),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out),opacity .1s var(--ease-out);align-items:center;text-decoration-thickness:1.5px;display:inline-flex;position:relative}.link:is([data-reduce-motion=true],[data-reduce-motion=true] *),.link:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.link:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.link{cursor:var(--cursor-interactive)}@media(hover:hover){.link:hover,.link[data-hovered=true]{text-decoration-line:underline;-webkit-text-decoration-color:var(--muted);text-decoration-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.link:hover,.link[data-hovered=true]{-webkit-text-decoration-color:color-mix(in oklab,var(--muted) 50%,transparent);text-decoration-color:color-mix(in oklab,var(--muted) 50%,transparent)}}:is(.link:hover,.link[data-hovered=true]) .link__icon{opacity:1}}.link:active,.link[data-pressed=true]{text-decoration-line:underline;-webkit-text-decoration-color:var(--muted);text-decoration-color:var(--muted)}:is(.link:active,.link[data-pressed=true]) .link__icon{opacity:1}.link:focus-visible:not(:focus),.link[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}:is(.link:focus-visible:not(:focus),.link[data-focus-visible=true]) .link__icon{opacity:1}.link[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.link .link__icon{pointer-events:none;color:currentColor;opacity:.6;width:.75em;height:.75em;transition:opacity .15s var(--ease-out);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.link .link__icon:is([data-reduce-motion=true],[data-reduce-motion=true] *),.link .link__icon:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.link .link__icon:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.link .link__icon:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.link .link__icon:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.link .link__icon:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.link .link__icon svg{transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.link .link__icon[data-default-icon=true]{margin-left:var(--spacing);padding-bottom:calc(var(--spacing) * 1.5)}.link.button{gap:0;text-decoration-line:none}.pagination{justify-content:space-between;align-items:center;gap:calc(var(--spacing) * 4);flex-direction:column;width:100%;display:flex}@media(min-width:40rem){.pagination{flex-direction:row}}.pagination__summary{align-items:center;gap:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted);align-self:flex-start;display:flex}@media(min-width:40rem){.pagination__summary{align-self:center}}.pagination__content{align-items:center;gap:var(--spacing);align-self:flex-start;display:flex}@media(min-width:40rem){.pagination__content{align-self:center}}.pagination__item{display:inline-flex}.pagination__link{isolation:isolate;width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9);transform-origin:50%;border-radius:calc(var(--radius) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;justify-content:center;align-items:center;display:inline-flex;position:relative}@media(min-width:48rem){.pagination__link{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}}.pagination__link{cursor:var(--cursor-interactive);transition:transform .25s var(--ease-smooth),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.pagination__link:is([data-reduce-motion=true],[data-reduce-motion=true] *),.pagination__link:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.pagination__link:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.pagination__link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.pagination__link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.pagination__link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.pagination__link{--pagination-link-bg:transparent;--pagination-link-bg-hover:var(--default-hover);--pagination-link-bg-pressed:var(--default-hover);--pagination-link-fg:var(--default-foreground);background-color:var(--pagination-link-bg);color:var(--pagination-link-fg)}.pagination__link:focus-visible,.pagination__link[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.pagination__link:disabled,.pagination__link[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}@media(hover:hover){.pagination__link:hover,.pagination__link[data-hovered=true]{background-color:var(--pagination-link-bg-hover)}}.pagination__link:active,.pagination__link[data-pressed=true]{background-color:var(--pagination-link-bg-pressed);transform:scale(.97)}.pagination__link[data-active=true]{--pagination-link-bg:var(--default);--pagination-link-bg-hover:var(--default-hover);--pagination-link-bg-pressed:var(--default-hover)}.pagination__ellipsis{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted);-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;display:inline-flex}@media(min-width:48rem){.pagination__ellipsis{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}}.pagination__link--nav{gap:calc(var(--spacing) * 1.5);width:auto;padding-inline:calc(var(--spacing) * 2.5)}.pagination--sm .pagination__link{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}@media(min-width:48rem){.pagination--sm .pagination__link{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}}.pagination--sm .pagination__link:active,.pagination--sm .pagination__link[data-pressed=true]{transform:scale(.98)}.pagination--sm .pagination__link--nav{width:auto;padding-inline:calc(var(--spacing) * 2)}.pagination--sm .pagination__ellipsis{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}@media(min-width:48rem){.pagination--sm .pagination__ellipsis{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}}.pagination--sm .pagination__summary{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.pagination--lg .pagination__link{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media(min-width:48rem){.pagination--lg .pagination__link{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}}.pagination--lg .pagination__link:active,.pagination--lg .pagination__link[data-pressed=true]{transform:scale(.96)}.pagination--lg .pagination__link--nav{width:auto;padding-inline:calc(var(--spacing) * 3)}.pagination--lg .pagination__ellipsis{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media(min-width:48rem){.pagination--lg .pagination__ellipsis{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}}.pagination--lg .pagination__summary{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.tabs{gap:calc(var(--spacing) * 2);display:flex}.tabs[data-orientation=horizontal]{flex-direction:column}.tabs[data-orientation=vertical]{flex-direction:row}.tabs__list-container{position:relative}.tabs__list{background-color:var(--default);padding:var(--spacing);border-radius:calc(var(--radius) * 2.5);display:inline-flex}.tabs__list[data-orientation=horizontal]{flex-direction:row;width:100%}.tabs__list[data-orientation=vertical]{gap:var(--spacing);flex-direction:column}.tabs__list[data-orientation=vertical] .tabs__tab{min-width:calc(var(--spacing) * 20)}.tabs__tab{z-index:1;cursor:var(--cursor-interactive);height:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 3);width:100%;padding-inline:calc(var(--spacing) * 4);text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;transition:color .15s var(--ease-smooth),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out),opacity .15s var(--ease-smooth);outline-style:none;justify-content:center;align-items:center;display:flex;position:relative}.tabs__tab:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tabs__tab:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tabs__tab:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tabs__tab:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tabs__tab:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tabs__tab:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tabs__tab[data-selected=true]{color:var(--segment-foreground)}.tabs__tab[data-selected=true] .tabs__separator,.tabs__tab[data-selected=true]+.tabs__tab .tabs__separator{opacity:0}.tabs__tab:disabled,.tabs__tab[data-disabled=true],.tabs__tab[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}@media(hover:hover){.tabs__tab:not([data-selected=true]):not([data-disabled=true]):hover,.tabs__tab[data-hovered=true]:not([data-selected=true]):not([data-disabled=true]){opacity:.7}}.tabs__tab:focus-visible:not(:focus),.tabs__tab[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.tabs__separator{border-radius:calc(var(--radius) * .5);background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.tabs__separator{background-color:color-mix(in oklab,var(--muted) 25%,transparent)}}.tabs__separator{pointer-events:none;transition:opacity .15s var(--ease-smooth);position:absolute}.tabs__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tabs__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tabs__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tabs__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tabs__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tabs__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tabs__list[data-orientation=horizontal] .tabs__separator{width:1px;height:50%;top:25%;left:0}.tabs__list[data-orientation=vertical] .tabs__separator{width:90%;height:1px;top:0;left:5%}.tabs__panel{width:100%;padding:calc(var(--spacing) * 2);--tw-outline-style:none;outline-style:none}.tabs__panel[data-exiting=true]{width:100%;position:absolute;top:0;left:0}.tabs__panel[data-orientation=horizontal]{margin-top:calc(var(--spacing) * 4)}.tabs__panel[data-orientation=vertical]{margin-left:calc(var(--spacing) * 4)}.tabs__indicator{box-shadow:var(--shadow-surface);z-index:-1;border-radius:var(--radius-3xl);background-color:var(--segment);width:100%;height:100%;transition-property:translate,width,height;transition-duration:.25s;transition-timing-function:var(--ease-out-fluid);position:absolute;top:0;left:0}.tabs__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tabs__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tabs__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tabs__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tabs__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tabs__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tabs--secondary>.tabs__list-container>.tabs__list{background-color:#0000;border-radius:0;padding:0}.tabs--secondary>.tabs__list-container>.tabs__list[data-orientation=horizontal]{scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);max-width:100%;overflow:auto clip}.tabs--secondary>.tabs__list-container>.tabs__list[data-orientation=vertical]{border-left-style:var(--tw-border-style);border-left-width:1px;border-color:var(--border)}.tabs--secondary>.tabs__list-container .tabs__tab{border-radius:0}.tabs--secondary>.tabs__list-container .tabs__tab[data-selected=true]{color:var(--foreground)}.tabs--secondary>.tabs__list-container .tabs__separator{display:none}.tabs--secondary>.tabs__list-container .tabs__indicator{background-color:var(--accent);box-shadow:none;border-radius:0}.tabs--secondary[data-orientation=horizontal]>.tabs__list-container .tabs__indicator{height:2px;top:auto;bottom:0}.tabs--secondary[data-orientation=vertical]>.tabs__list-container .tabs__indicator{width:2px;height:100%;top:0;left:0}.button{isolation:isolate;height:calc(var(--spacing) * 10);transform-origin:50%;justify-content:center;align-items:center;gap:calc(var(--spacing) * 2);border-radius:calc(var(--radius) * 3);width:fit-content;padding-inline:calc(var(--spacing) * 4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex;position:relative}@media(min-width:48rem){.button{height:calc(var(--spacing) * 9)}}.button{transition:transform .25s var(--ease-smooth),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.button{cursor:var(--cursor-interactive);--button-bg:transparent;--button-bg-hover:var(--button-bg);--button-bg-pressed:var(--button-bg-hover);--button-fg:currentColor;background-color:var(--button-bg);color:var(--button-fg)}.button:focus-visible:not(:focus),.button[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.button:disabled,.button[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.button[data-pending=true]{pointer-events:none}.button:active,.button[data-pressed=true]{background-color:var(--button-bg-pressed);transform:scale(.97)}@media(hover:hover){.button:hover,.button[data-hovered=true]{background-color:var(--button-bg-hover)}}.button svg:not([data-slot=spinner] svg,[data-slot=link-icon] svg){pointer-events:none;margin-inline:calc(var(--spacing) * -.5);margin-block:calc(var(--spacing) * .5);width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);flex-shrink:0;align-self:center}@media(min-width:40rem){.button svg:not([data-slot=spinner] svg,[data-slot=link-icon] svg){margin-block:var(--spacing);width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}}.button--sm{height:calc(var(--spacing) * 9);padding-inline:calc(var(--spacing) * 3)}@media(min-width:48rem){.button--sm{height:calc(var(--spacing) * 8)}}.button--sm svg:not([data-slot=spinner] svg,[data-slot=link-icon] svg){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.button--sm:active,.button--sm[data-pressed=true]{transform:scale(.98)}.button--lg{height:calc(var(--spacing) * 11);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media(min-width:48rem){.button--lg{height:calc(var(--spacing) * 10)}}.button--lg:active,.button--lg[data-pressed=true]{transform:scale(.96)}.button--primary{--button-bg:var(--accent);--button-bg-hover:var(--accent-hover);--button-bg-pressed:var(--accent-hover);--button-fg:var(--accent-foreground)}.button--secondary{--button-bg:var(--default);--button-bg-hover:var(--default-hover);--button-bg-pressed:var(--default-hover);--button-fg:var(--accent-soft-foreground)}.button--tertiary{--button-bg:var(--default);--button-bg-hover:var(--default-hover);--button-bg-pressed:var(--default-hover)}.button--ghost,.button--outline{--button-bg:transparent;--button-bg-hover:var(--default);--button-bg-pressed:var(--default);--button-fg:var(--default-foreground)}.button--outline{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--button-bg-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){.button--outline{--button-bg-hover:color-mix(in srgb, var(--default) 60%, transparent)}}.button--danger{--button-bg:var(--danger);--button-bg-hover:var(--danger-hover);--button-bg-pressed:var(--danger-hover);--button-fg:var(--danger-foreground)}.button--danger-soft{--button-bg:var(--danger-soft);--button-bg-hover:var(--danger-soft-hover);--button-bg-pressed:var(--danger-soft-hover);--button-fg:var(--danger-soft-foreground)}.button--icon-only{width:calc(var(--spacing) * 10);padding:0}@media(min-width:48rem){.button--icon-only{width:calc(var(--spacing) * 9)}}.button--icon-only.button--sm{width:calc(var(--spacing) * 9)}@media(min-width:48rem){.button--icon-only.button--sm{width:calc(var(--spacing) * 8)}}.button--icon-only.button--lg{width:calc(var(--spacing) * 11)}@media(min-width:48rem){.button--icon-only.button--lg{width:calc(var(--spacing) * 10)}}.button--full-width{width:100%}.button-group{justify-content:center;align-items:center;gap:0;height:auto;display:inline-flex}.button-group--horizontal{flex-direction:row}.button-group--vertical{flex-direction:column}.button-group .button{border-radius:0}.button-group--horizontal .button:first-child{border-start-start-radius:calc(var(--radius) * 3);border-end-start-radius:calc(var(--radius) * 3)}.button-group--horizontal .button:last-child{border-start-end-radius:calc(var(--radius) * 3);border-end-end-radius:calc(var(--radius) * 3)}.button-group--horizontal .button:first-child:last-child{border-radius:calc(var(--radius) * 3)}.button-group--vertical .button:first-child{border-top-left-radius:calc(var(--radius) * 3);border-top-right-radius:calc(var(--radius) * 3)}.button-group--vertical .button:last-child{border-bottom-right-radius:calc(var(--radius) * 3);border-bottom-left-radius:calc(var(--radius) * 3)}.button-group--vertical .button:first-child:last-child{border-radius:calc(var(--radius) * 3)}.button-group .button:active,.button-group .button[data-pressed=true]{transform:none}.button-group .button:focus-visible:not(:focus),.button-group .button[data-focus-visible=true]{--tw-ring-offset-width:0px;--tw-ring-inset:inset}.button-group__separator{border-radius:calc(var(--radius) * .5);opacity:.15;pointer-events:none;transition:opacity .15s var(--ease-smooth);background-color:currentColor;position:absolute}.button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.button-group--horizontal .button-group__separator{width:1px;height:50%;top:25%;left:-1px}.button-group--vertical .button-group__separator{width:50%;height:1px;top:-1px;left:25%}.button-group--horizontal .button--outline:first-child{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.button-group--horizontal .button--outline:last-child{border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.button-group--horizontal .button--outline:not(:first-child):not(:last-child){border-inline-style:var(--tw-border-style);border-inline-width:0}.button-group--vertical .button--outline:first-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.button-group--vertical .button--outline:last-child{border-top-style:var(--tw-border-style);border-top-width:0}.button-group--vertical .button--outline:not(:first-child):not(:last-child){border-block-style:var(--tw-border-style);border-block-width:0}.button-group--full-width{width:100%}.toggle-button{isolation:isolate;height:calc(var(--spacing) * 10);transform-origin:50%;justify-content:center;align-items:center;gap:calc(var(--spacing) * 2);border-radius:calc(var(--radius) * 3);width:fit-content;padding-inline:calc(var(--spacing) * 4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex;position:relative}@media(min-width:48rem){.toggle-button{height:calc(var(--spacing) * 9)}}.toggle-button{transition:transform .25s var(--ease-smooth),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.toggle-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.toggle-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.toggle-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.toggle-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.toggle-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.toggle-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.toggle-button{cursor:var(--cursor-interactive);--toggle-button-bg:var(--default);--toggle-button-bg-hover:var(--default-hover);--toggle-button-bg-pressed:var(--default-hover);--toggle-button-fg:currentColor;--toggle-button-bg-selected:var(--accent-soft);--toggle-button-bg-selected-hover:var(--accent-soft-hover);--toggle-button-bg-selected-pressed:var(--accent-soft-hover);--toggle-button-fg-selected:var(--accent-soft-foreground);background-color:var(--toggle-button-bg);color:var(--toggle-button-fg)}.toggle-button:focus-visible:not(:focus),.toggle-button[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.toggle-button:disabled,.toggle-button[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}@media(hover:hover){.toggle-button:hover,.toggle-button[data-hovered=true]{background-color:var(--toggle-button-bg-hover)}}.toggle-button:active,.toggle-button[data-pressed=true]{background-color:var(--toggle-button-bg-pressed);transform:scale(.97)}.toggle-button[data-selected=true]{background-color:var(--toggle-button-bg-selected);color:var(--toggle-button-fg-selected)}@media(hover:hover){.toggle-button[data-selected=true]:hover,.toggle-button[data-selected=true][data-hovered=true]{background-color:var(--toggle-button-bg-selected-hover)}}.toggle-button[data-selected=true]:active,.toggle-button[data-selected=true][data-pressed=true]{background-color:var(--toggle-button-bg-selected-pressed)}.toggle-button svg{pointer-events:none;margin-inline:calc(var(--spacing) * -.5);margin-block:calc(var(--spacing) * .5);width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);flex-shrink:0;align-self:center}@media(min-width:40rem){.toggle-button svg{margin-block:var(--spacing);width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}}.toggle-button--sm{height:calc(var(--spacing) * 9);padding-inline:calc(var(--spacing) * 3)}@media(min-width:48rem){.toggle-button--sm{height:calc(var(--spacing) * 8)}}.toggle-button--sm svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.toggle-button--sm:active,.toggle-button--sm[data-pressed=true]{transform:scale(.98)}.toggle-button--lg{height:calc(var(--spacing) * 11);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media(min-width:48rem){.toggle-button--lg{height:calc(var(--spacing) * 10)}}.toggle-button--lg:active,.toggle-button--lg[data-pressed=true]{transform:scale(.96)}.toggle-button--default{--toggle-button-bg:var(--default);--toggle-button-bg-hover:var(--default-hover);--toggle-button-bg-pressed:var(--default-hover)}.toggle-button--ghost{--toggle-button-bg:transparent;--toggle-button-bg-hover:var(--default);--toggle-button-bg-pressed:var(--default);--toggle-button-fg:var(--default-foreground)}.toggle-button--icon-only{width:calc(var(--spacing) * 10);padding:0}@media(min-width:48rem){.toggle-button--icon-only{width:calc(var(--spacing) * 9)}}.toggle-button--icon-only.toggle-button--sm{width:calc(var(--spacing) * 9)}@media(min-width:48rem){.toggle-button--icon-only.toggle-button--sm{width:calc(var(--spacing) * 8)}}.toggle-button--icon-only.toggle-button--lg{width:calc(var(--spacing) * 11)}@media(min-width:48rem){.toggle-button--icon-only.toggle-button--lg{width:calc(var(--spacing) * 10)}}.toggle-button-group{justify-content:center;align-items:center;gap:0;width:fit-content;height:auto;display:inline-flex}.toggle-button-group--horizontal{flex-direction:row}.toggle-button-group--vertical{flex-direction:column}.toggle-button-group--full-width{width:100%}.toggle-button-group .toggle-button{border-radius:0}.toggle-button-group--horizontal .toggle-button:first-child{border-start-start-radius:calc(var(--radius) * 3);border-end-start-radius:calc(var(--radius) * 3)}.toggle-button-group--horizontal .toggle-button:last-child{border-start-end-radius:calc(var(--radius) * 3);border-end-end-radius:calc(var(--radius) * 3)}.toggle-button-group--horizontal .toggle-button:first-child:last-child{border-radius:calc(var(--radius) * 3)}.toggle-button-group--vertical .toggle-button:first-child{border-top-left-radius:calc(var(--radius) * 3);border-top-right-radius:calc(var(--radius) * 3)}.toggle-button-group--vertical .toggle-button:last-child{border-bottom-right-radius:calc(var(--radius) * 3);border-bottom-left-radius:calc(var(--radius) * 3)}.toggle-button-group--vertical .toggle-button:first-child:last-child{border-radius:calc(var(--radius) * 3)}.toggle-button-group .toggle-button:active,.toggle-button-group .toggle-button[data-pressed=true]{transform:none}.toggle-button-group .toggle-button:focus-visible:not(:focus),.toggle-button-group .toggle-button[data-focus-visible=true]{--tw-ring-offset-width:0px;--tw-ring-inset:inset}.toggle-button-group--full-width .toggle-button{flex:1}.toggle-button-group__separator{border-radius:calc(var(--radius) * .5);opacity:.15;pointer-events:none;transition:opacity .15s var(--ease-smooth);background-color:currentColor;position:absolute}.toggle-button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.toggle-button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.toggle-button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.toggle-button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.toggle-button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.toggle-button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.toggle-button-group--horizontal .toggle-button-group__separator{width:1px;height:50%;top:25%;left:-1px}.toggle-button-group--vertical .toggle-button-group__separator{width:50%;height:1px;top:-1px;left:25%}.toggle-button-group--detached{gap:var(--spacing)}.toggle-button-group--detached .toggle-button{border-radius:calc(var(--radius) * 3)}.toggle-button-group--detached .toggle-button-group__separator{display:none}.toolbar{align-items:center;gap:calc(var(--spacing) * 2);grid-auto-flow:column;width:fit-content;display:grid}.toolbar .separator--vertical{align-self:center;height:50%}.toolbar .separator--horizontal{justify-content:center;justify-self:center;width:50%}.toolbar--vertical{grid-auto-flow:row;justify-content:flex-start;align-items:flex-start}.toolbar--vertical .button-group{justify-content:flex-start}.toolbar--attached{border-radius:calc(var(--radius) * 3);background-color:var(--surface);padding:var(--spacing);--tw-shadow:var(--overlay-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dropdown{gap:var(--spacing);flex-direction:column;display:flex}.dropdown__trigger{--tw-outline-style:none;transition:transform .25s var(--ease-out-quart),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);outline-style:none;display:inline-block}.dropdown__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.dropdown__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.dropdown__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.dropdown__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.dropdown__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.dropdown__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.dropdown__trigger{cursor:var(--cursor-interactive)}.dropdown__trigger:focus-visible:not(:focus),.dropdown__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.dropdown__trigger:disabled,.dropdown__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.dropdown__trigger[data-pending=true]{pointer-events:none}.dropdown__trigger:active,.dropdown__trigger[data-pressed=true]{transform:scale(.97)}.dropdown__popover{max-width:48svw;transform-origin:var(--trigger-anchor-point);scroll-padding-block:var(--spacing);scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overscroll-behavior:contain;background-color:var(--overlay);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding:0;overflow-y:auto}@media(min-width:48rem){.dropdown__popover{min-width:calc(var(--spacing) * 55)}}.dropdown__popover{border-radius:min(32px,var(--radius-3xl));box-shadow:var(--shadow-overlay)}.dropdown__popover:focus-visible:not(:focus),.dropdown__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.dropdown__popover[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.9;transition-duration:.15s;transition-timing-function:ease}.dropdown__popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.dropdown__popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.dropdown__popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.dropdown__popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.dropdown__popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.dropdown__popover[data-exiting=true],.dropdown__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.dropdown__popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.dropdown__popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.dropdown__popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.dropdown__popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.dropdown__popover [data-slot=dropdown-menu]{padding:calc(var(--spacing) * 1.5);--tw-outline-style:none;outline-style:none}.dropdown__popover [data-slot=menu-item]{padding-inline:calc(var(--spacing) * 2.5)}.dropdown__menu{gap:calc(var(--spacing) * .5);width:100%;padding:var(--spacing);flex-direction:column;display:flex;position:relative;overflow:clip}.dropdown__menu [data-slot=separator]{width:94%;margin-left:3%}.list-box-item{min-height:calc(var(--spacing) * 9);justify-content:flex-start;align-items:center;gap:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * 2);width:100%;padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1.5);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;transition:transform .25s var(--ease-out-quart),box-shadow .15s var(--ease-out);outline-style:none;display:flex;position:relative}.list-box-item:is([data-reduce-motion=true],[data-reduce-motion=true] *),.list-box-item:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.list-box-item:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.list-box-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.list-box-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.list-box-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.list-box-item{cursor:var(--cursor-interactive)}.list-box-item [data-slot=label]{pointer-events:none;-webkit-user-select:none;user-select:none;width:fit-content}.list-box-item [data-slot=description]{pointer-events:none;text-wrap:wrap;-webkit-user-select:none;user-select:none}.list-box-item:has(.list-box-item__indicator){padding-inline-end:calc(var(--spacing) * 7)}.list-box-item:focus-visible:not(:focus),.list-box-item[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.list-box-item:active,.list-box-item[data-pressed=true]{transform:scale(.98)}@media(hover:hover){.list-box-item:hover,.list-box-item[data-hovered=true]{background-color:var(--default)}}.list-box-item[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.list-box-item__indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);color:var(--default-foreground);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;inset-inline-end:calc(var(--spacing) * 2);flex-shrink:0;justify-content:center;align-items:center;transition-duration:.25s;display:flex;position:absolute;top:50%}.list-box-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.list-box-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.list-box-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.list-box-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.list-box-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.list-box-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *),.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]{transition:stroke-dashoffset .25s linear}:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.list-box-item--danger .list-box-item__indicator,.list-box-item--danger [data-slot=label]{color:var(--danger)}.list-box-section{flex-direction:column;align-items:flex-start;gap:0;display:flex}.list-box{width:100%;padding:var(--spacing);position:relative;overflow:clip}.list-box>*+*{margin-top:var(--spacing)}.list-box [data-slot=separator][data-orientation=horizontal]{width:94%;margin-left:3%}.menu-item{min-height:calc(var(--spacing) * 9);justify-content:flex-start;align-items:center;gap:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * 2);width:100%;padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1.5);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;transition:transform .25s var(--ease-out-quart),box-shadow .15s var(--ease-out);outline-style:none;display:flex;position:relative}.menu-item:is([data-reduce-motion=true],[data-reduce-motion=true] *),.menu-item:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.menu-item:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.menu-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.menu-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.menu-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.menu-item{cursor:var(--cursor-interactive)}.menu-item [data-slot=label]{pointer-events:none;-webkit-user-select:none;user-select:none;width:fit-content}.menu-item [data-slot=description]{pointer-events:none;text-wrap:wrap;-webkit-user-select:none;user-select:none}.menu-item [data-slot=submenu-indicator] svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.menu-item:has(.menu-item__indicator){padding-inline-start:calc(var(--spacing) * 7)}.menu-item[data-has-submenu=true]:has(.menu-item__indicator){padding-inline-start:calc(var(--spacing) * 2);padding-inline-end:calc(var(--spacing) * 7)}.menu-item:focus-visible:not(:focus),.menu-item[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.menu-item:active,.menu-item[data-pressed=true]{transform:scale(.98)}@media(hover:hover){.menu-item:hover,.menu-item[data-hovered=true]{background-color:var(--default)}}:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]{transition:stroke-dashoffset .1s linear}:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--dot]{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:1}.menu-item[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.menu-item__indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);color:var(--muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;inset-inline-start:calc(var(--spacing) * 2);flex-shrink:0;justify-content:center;align-items:center;transition-duration:.25s;display:flex;position:absolute;top:50%}.menu-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.menu-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.menu-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.menu-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.menu-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.menu-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.menu-item[data-has-submenu=true] .menu-item__indicator{inset-inline-start:auto;inset-inline-end:calc(var(--spacing) * 2)}.menu-item__indicator [data-slot=menu-item-indicator--checkmark]{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]){transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *),.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.menu-item__indicator [data-slot=menu-item-indicator--dot]{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]){transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;transition-duration:.25s}.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):is([data-reduce-motion=true],[data-reduce-motion=true] *),.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.menu-item__indicator [data-slot=menu-item-indicator--dot]{--tw-scale-x:70%;--tw-scale-y:70%;--tw-scale-z:70%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:0}.menu-item__indicator--submenu{color:var(--muted)}.menu-item__indicator--submenu svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.menu-item--danger .menu-item__indicator,.menu-item--danger [data-slot=label]{color:var(--danger)}.menu-section{flex-direction:column;align-items:flex-start;gap:0;display:flex}.menu{gap:var(--spacing);width:100%;padding:var(--spacing);flex-direction:column;display:flex;position:relative;overflow:clip}.menu [data-slot=separator]{width:94%;margin-left:3%}.tag-group{gap:var(--spacing);flex-direction:column;display:flex;position:relative}.tag-group__list{gap:calc(var(--spacing) * 1.5);flex-wrap:wrap;display:flex;position:relative}.tag-group [slot=description],.tag-group [data-slot=description],.tag-group [slot=errorMessage],.tag-group [data-slot=error-message]{padding:var(--spacing)}.tag{--optical-offset:.031em;align-items:center;gap:var(--spacing);border-radius:calc(var(--radius) * 1.5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:color .1s var(--ease-smooth),scale .1s var(--ease-smooth),opacity .1s var(--ease-smooth),background-color .1s var(--ease-smooth),box-shadow .1s var(--ease-out);transform-origin:50%;transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);display:inline-flex;position:relative}.tag:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tag:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tag:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tag:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tag:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tag:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tag{cursor:var(--cursor-interactive)}.tag svg{pointer-events:none;width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);color:currentColor;flex-shrink:0;align-self:center}.tag:is([data-disabled=true],[aria-disabled=true]){opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.tag:is(:focus-visible,[data-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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.tag:is([data-selected=true],[aria-selected=true]){background-color:var(--accent-soft);color:var(--accent-soft-foreground)}@media(hover:hover){.tag:is([data-selected=true],[aria-selected=true]):is(:hover,[data-hovered=true]){background-color:var(--accent-soft-hover)}}.tag--sm{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.tag--md{padding-inline:calc(var(--spacing) * 2);padding-block:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.tag--lg{border-radius:calc(var(--radius) * 2);padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.tag--default{background-color:var(--default);color:var(--default-foreground)}@media(hover:hover){.tag--default:is(:hover,[data-hovered=true]):not([data-selected=true]):not([data-disabled=true]){background-color:var(--default-hover)}}.tag--surface{background-color:var(--surface);color:var(--surface-foreground)}@media(hover:hover){.tag--surface:is(:hover,[data-hovered=true]):not([data-selected=true]):not([data-disabled=true]){background-color:var(--surface-hover)}}.tag__remove-button{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);color:inherit}.tag__remove-button svg{width:inherit;height:inherit;color:currentColor;flex-shrink:0;align-self:center}.color-area{width:100%;max-width:calc(var(--spacing) * 56);border-radius:calc(var(--radius) * 2);-webkit-tap-highlight-color:transparent;aspect-ratio:1;background:var(--color-area-background);flex-shrink:0;position:relative;box-shadow:inset 0 0 0 1px #0000001a}.color-area[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-area--show-dots:after{content:"";pointer-events:none;border-radius:inherit;background-image:radial-gradient(circle,#fff3 1px,#0000 1px);background-size:8px 8px;position:absolute;top:0;right:0;bottom:0;left:0}.color-area__thumb{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1.5);will-change:width,height;background-color:var(--color-area-thumb-color);transition:width .15s var(--ease-out),height .15s var(--ease-out);border:3px solid #fff;box-shadow:0 0 0 1px #0000001a,inset 0 0 0 1px #0000001a}.color-area__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-area__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-area__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-area__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-area__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-area__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-area__thumb[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.color-area__thumb[data-dragging=true]{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.color-area__thumb[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-picker{display:inline-flex}.color-picker__trigger{align-items:center;gap:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * .5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-flex}.color-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-picker__trigger [data-slot=label]{cursor:var(--cursor-interactive)}.color-picker__trigger:focus-visible:not(:focus),.color-picker__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.color-picker__trigger:disabled,.color-picker__trigger[data-disabled=true],.color-picker__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-picker__popover{min-width:calc(var(--spacing) * 62);transform-origin:var(--trigger-anchor-point);scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;overscroll-behavior:contain;background-color:var(--overlay);padding-inline:calc(var(--spacing) * 2);padding-top:calc(var(--spacing) * 2);padding-bottom:calc(var(--spacing) * 3);box-shadow:var(--shadow-overlay);border-radius:min(32px,calc(var(--radius) * 2.5));gap:calc(var(--spacing) * 3);flex-direction:column;display:flex;overflow:hidden auto}.color-picker__popover:focus-visible:not(:focus),.color-picker__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.color-picker__popover[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.color-picker__popover[data-entering=true][data-placement^=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.color-picker__popover[data-entering=true][data-placement^=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.color-picker__popover[data-entering=true][data-placement^=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.color-picker__popover[data-entering=true][data-placement^=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.color-picker__popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.color-picker__popover[data-exiting=true],.color-picker__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.color-slider{gap:var(--spacing);grid-template:"label output""track track"/1fr auto;width:100%;display:grid}.color-slider:not(:has([data-slot=label])):not(:has(.color-slider__output)){grid-template:"track"/1fr;gap:0}.color-slider:has([data-slot=label]):not(:has(.color-slider__output)){grid-template-columns:1fr;grid-template-areas:"label""track"}.color-slider:not(:has([data-slot=label])):has(.color-slider__output){grid-template-columns:1fr;grid-template-areas:"output""track"}.color-slider:not(:has([data-slot=label])):has(.color-slider__output) .color-slider__output{justify-self:end}.color-slider [data-slot=label]{width:fit-content;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);grid-area:label}.color-slider .color-slider__output{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--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,);grid-area:output}.color-slider .color-slider__track{border-radius:calc(var(--radius) * 2);grid-area:track;position:relative}.color-slider .color-slider__track:before,.color-slider .color-slider__track:after{content:"";z-index:0;pointer-events:none;position:absolute}.color-slider .color-slider__thumb{cursor:grab;border-radius:calc(var(--radius) * 2);-webkit-tap-highlight-color:transparent;border-style:var(--tw-border-style);border-width:3px;border-color:var(--color-white);--tw-shadow:var(--overlay-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);z-index:1;transition:transform .25s var(--ease-out),box-shadow .15s var(--ease-out);justify-content:center;align-items:center;display:flex;position:absolute}.color-slider .color-slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-slider .color-slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-slider .color-slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-slider .color-slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-slider .color-slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-slider .color-slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-slider .color-slider__thumb[data-dragging=true]{cursor:grabbing}.color-slider .color-slider__thumb[data-focus-visible=true]{z-index:10;--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.color-slider .color-slider__thumb[data-disabled=true]{cursor:default;background-color:var(--default)}.color-slider:disabled,.color-slider[data-disabled=true],.color-slider[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.color-slider:disabled,.color-slider[data-disabled=true],.color-slider[aria-disabled=true]) [data-slot=label]{opacity:1}.color-slider[data-orientation=horizontal]{flex-direction:column}.color-slider[data-orientation=horizontal] .color-slider__track{height:calc(var(--spacing) * 5);border-radius:0;justify-self:center;width:calc(100% - 1.25rem);box-shadow:inset 0 1px #0000001a,inset 0 -1px #0000001a}.color-slider[data-orientation=horizontal] .color-slider__track:before,.color-slider[data-orientation=horizontal] .color-slider__track:after{width:.625rem;height:100%;top:0}.color-slider[data-orientation=horizontal] .color-slider__track:before{border-top-left-radius:calc(var(--radius) * 2);border-bottom-left-radius:calc(var(--radius) * 2);background:linear-gradient(var(--track-start-color,transparent)),repeating-conic-gradient(#efefef,#efefef 25%,#f7f7f7 0%,#f7f7f7 50%) 50% / 16px 16px;left:-.625rem;box-shadow:inset 1px 0 #0000001a,inset 0 1px #0000001a,inset 0 -1px #0000001a}.color-slider[data-orientation=horizontal] .color-slider__track:after{border-top-right-radius:calc(var(--radius) * 2);border-bottom-right-radius:calc(var(--radius) * 2);background-color:var(--track-end-color,transparent);right:-.625rem;box-shadow:inset -1px 0 #0000001a,inset 0 1px #0000001a,inset 0 -1px #0000001a}.color-slider[data-orientation=horizontal] .color-slider__thumb{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);top:50%}.color-slider[data-orientation=vertical]{gap:calc(var(--spacing) * 2);flex-direction:row;grid-template:"output""track"1fr"label"/1fr;place-items:center;height:100%}.color-slider[data-orientation=vertical]:not(:has([data-slot=label])):not(:has(.color-slider__output)){grid-template-rows:1fr;grid-template-areas:"track";gap:0}.color-slider[data-orientation=vertical]:has([data-slot=label]):not(:has(.color-slider__output)){grid-template-rows:1fr auto;grid-template-areas:"track""label"}.color-slider[data-orientation=vertical]:not(:has([data-slot=label])):has(.color-slider__output){grid-template-rows:auto 1fr;grid-template-areas:"output""track"}.color-slider[data-orientation=vertical] .color-slider__output,.color-slider[data-orientation=vertical] [data-slot=label]{text-align:center}.color-slider[data-orientation=vertical] .color-slider__track{width:calc(var(--spacing) * 5);border-radius:0;justify-self:center;height:calc(100% - 1.25rem);box-shadow:inset 1px 0 #0000001a,inset -1px 0 #0000001a}.color-slider[data-orientation=vertical] .color-slider__track:before,.color-slider[data-orientation=vertical] .color-slider__track:after{width:100%;height:.625rem;left:0}.color-slider[data-orientation=vertical] .color-slider__track:before{background:linear-gradient(var(--track-start-color,transparent)),repeating-conic-gradient(#efefef,#efefef 25%,#f7f7f7 0%,#f7f7f7 50%) 50% / 16px 16px;border-bottom-right-radius:999px;border-bottom-left-radius:999px;bottom:-.625rem;box-shadow:inset 1px 0 #0000001a,inset -1px 0 #0000001a,inset 0 -1px #0000001a}.color-slider[data-orientation=vertical] .color-slider__track:after{background-color:var(--track-end-color,transparent);border-top-left-radius:999px;border-top-right-radius:999px;top:-.625rem;box-shadow:inset 1px 0 #0000001a,inset -1px 0 #0000001a,inset 0 1px #0000001a}.color-slider[data-orientation=vertical] .color-slider__thumb{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);left:50%}.color-swatch{box-sizing:border-box;width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);background:linear-gradient(var(--color-swatch-current),var(--color-swatch-current)),repeating-conic-gradient(#efefef,#efefef 25%,#f7f7f7 0%,#f7f7f7 50%) 50% / 16px 16px;flex-shrink:0;position:relative;box-shadow:inset 0 0 0 1px #0000001a}.color-swatch--circle{border-radius:calc(var(--radius) * 2)}.color-swatch--square{border-radius:calc(var(--radius) * .75)}.color-swatch--xs{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.color-swatch--xs.color-swatch--circle{border-radius:calc(var(--radius) * 1)}.color-swatch--sm{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.color-swatch--sm.color-swatch--circle{border-radius:calc(var(--radius) * 1.5)}.color-swatch--lg{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.color-swatch--lg.color-swatch--circle{border-radius:calc(var(--radius) * 3)}.color-swatch--xl{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.color-swatch--xl.color-swatch--circle{border-radius:calc(var(--radius) * 3)}.color-swatch-picker{align-items:center;gap:calc(var(--spacing) * 2);flex-wrap:wrap;display:flex}.color-swatch-picker__item{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 2);border-style:var(--tw-border-style);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:border-color .1s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);border-width:2px;border-color:#0000;outline-style:none;justify-content:center;align-items:center;display:flex;position:relative}.color-swatch-picker__item:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-swatch-picker__item:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-swatch-picker__item:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-swatch-picker__item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-swatch-picker__item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-swatch-picker__item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-swatch-picker__item:focus-visible,.color-swatch-picker__item[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.color-swatch-picker__item[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-swatch-picker__item[data-selected=true]{border-color:var(--color-swatch-current);box-shadow:var(--field-shadow)}.color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{transform:scale(.77)}.color-swatch-picker__swatch{border-radius:inherit;width:100%;height:100%;transition:transform .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);display:block}.color-swatch-picker__swatch:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-swatch-picker__swatch:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-swatch-picker__swatch:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-swatch-picker__swatch:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-swatch-picker__swatch:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-swatch-picker__swatch:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.color-swatch-picker__swatch:hover{transform:scale(1.1)}}.color-swatch-picker__indicator{pointer-events:none;z-index:10;justify-content:center;align-items:center;display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.color-swatch-picker__indicator>*{width:33.3333%;height:33.3333%;color:var(--color-white);transition:transform .15s var(--ease-out);transform:scale(0)translateZ(0)}.color-swatch-picker__indicator>:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-swatch-picker__indicator>:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-swatch-picker__indicator>:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-swatch-picker__indicator>:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-swatch-picker__indicator>:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-swatch-picker__indicator>:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-swatch-picker__indicator[data-light-color=true] .color-swatch-picker__indicator>*{color:var(--color-black)}.color-swatch-picker__item[data-selected=true] .color-swatch-picker__indicator>*{transform:scale(1)translateZ(0)}.color-swatch-picker--stack{flex-direction:column}.color-swatch-picker--xs .color-swatch-picker__item{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1);border-style:var(--tw-border-style);border-width:1px}.color-swatch-picker--sm .color-swatch-picker__item{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6);border-radius:calc(var(--radius) * 1.5);border-style:var(--tw-border-style);border-width:2px}.color-swatch-picker--lg .color-swatch-picker__item{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9);border-radius:calc(var(--radius) * 3);border-style:var(--tw-border-style);border-width:3px}.color-swatch-picker--xl .color-swatch-picker__item{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);border-radius:calc(var(--radius) * 3);border-style:var(--tw-border-style);border-width:3px}.color-swatch-picker--square .color-swatch-picker__item{border-radius:calc(var(--radius) * 1.5)}.color-swatch-picker--square .color-swatch-picker__item .color-swatch-picker__swatch,.color-swatch-picker--square .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * 1)}.color-swatch-picker--square.color-swatch-picker--xs .color-swatch-picker__item,.color-swatch-picker--square.color-swatch-picker--xs .color-swatch-picker__item .color-swatch-picker__swatch,.color-swatch-picker--square.color-swatch-picker--xs .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * .75)}.color-swatch-picker--square.color-swatch-picker--sm .color-swatch-picker__item,.color-swatch-picker--square.color-swatch-picker--sm .color-swatch-picker__item .color-swatch-picker__swatch{border-radius:calc(var(--radius) * 1)}.color-swatch-picker--square.color-swatch-picker--sm .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * .75)}.color-swatch-picker--square.color-swatch-picker--lg .color-swatch-picker__item{border-radius:calc(var(--radius) * 1.5)}.color-swatch-picker--square.color-swatch-picker--lg .color-swatch-picker__item .color-swatch-picker__swatch,.color-swatch-picker--square.color-swatch-picker--lg .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * 1)}.color-swatch-picker--square.color-swatch-picker--xl .color-swatch-picker__item{border-radius:calc(var(--radius) * 1.5)}.color-swatch-picker--square.color-swatch-picker--xl .color-swatch-picker__item .color-swatch-picker__swatch,.color-swatch-picker--square.color-swatch-picker--xl .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * 1)}.color-input-group{height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);outline-style:none;align-items:center;display:inline-flex;overflow:hidden}.color-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.color-input-group:hover:not(:focus-within),.color-input-group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.color-input-group[data-focus-within=true],.color-input-group:focus-within{--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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;outline-style:none}.color-input-group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.color-input-group[data-invalid=true]:focus,.color-input-group[data-invalid=true]:focus-visible,.color-input-group[data-invalid=true][data-focused=true],.color-input-group[data-invalid=true][data-focus-visible=true],.color-input-group[data-invalid=true]:focus-within,.color-input-group[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.color-input-group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.color-input-group[data-disabled=true],.color-input-group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-input-group__input{cursor:text;border-style:var(--tw-border-style);height:100%;padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--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);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none;flex:1;align-items:center;display:flex}@media(min-width:40rem){.color-input-group__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.color-input-group__input::placeholder{color:var(--field-placeholder,var(--muted))}.color-input-group:has([data-slot=color-input-group-prefix]) .color-input-group__input{padding-left:calc(var(--spacing) * 2);border-top-left-radius:0;border-bottom-left-radius:0}.color-input-group:has([data-slot=color-input-group-suffix]) .color-input-group__input{padding-right:calc(var(--spacing) * 2);border-top-right-radius:0;border-bottom-right-radius:0}.color-input-group__input:focus,.color-input-group__input:focus-visible{--tw-outline-style:none;outline-style:none}.color-input-group__prefix{color:var(--field-placeholder,var(--muted));margin-right:0;margin-left:calc(var(--spacing) * 3);flex-shrink:0;align-items:center;display:flex}.color-input-group__suffix{color:var(--field-placeholder,var(--muted));margin-right:calc(var(--spacing) * 3);flex-shrink:0;align-items:center;display:flex}.color-input-group--secondary{--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);background-color:var(--color-input-group-bg);--color-input-group-bg:var(--default);--color-input-group-bg-hover:var(--default-hover);--color-input-group-bg-focus:var(--default)}@media(hover:hover){.color-input-group--secondary:hover:not(:focus-within),.color-input-group--secondary[data-hovered=true]:not([data-focus-within=true]){background-color:var(--color-input-group-bg-hover)}}.color-input-group--secondary:focus-within,.color-input-group--secondary[data-focus-within=true]{background-color:var(--color-input-group-bg-focus)}.color-input-group--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.color-input-group--secondary[data-invalid=true]:focus,.color-input-group--secondary[data-invalid=true]:focus-visible,.color-input-group--secondary[data-invalid=true][data-focused=true],.color-input-group--secondary[data-invalid=true][data-focus-visible=true],.color-input-group--secondary[data-invalid=true]:focus-within,.color-input-group--secondary[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.color-input-group--secondary[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--color-input-group-bg-focus)}.color-input-group--secondary [data-slot=color-input-group-input]{background-color:#0000}.color-input-group--full-width{width:100%}.color-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.color-field[data-invalid=true],.color-field[aria-invalid=true]) [data-slot=description]{display:none}.color-field [data-slot=label]{width:fit-content}.color-field--full-width{width:100%}.slider{gap:var(--spacing);grid-template-columns:1fr auto;grid-template-areas:"label output""track track";width:100%;display:grid}.slider [data-slot=label]{width:fit-content;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);grid-area:label}.slider .slider__output{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--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,);grid-area:output}.slider .slider__track{border-radius:calc(var(--radius) * 1.5);background-color:var(--default);grid-area:track;position:relative}.slider .slider__fill{pointer-events:none;background-color:var(--accent);position:absolute}.slider .slider__thumb{cursor:grab;border-radius:calc(var(--radius) * 1.5);background-color:var(--accent);-webkit-tap-highlight-color:transparent;transition:background-color .25s var(--ease-smooth),transform .25s var(--ease-out),box-shadow .15s var(--ease-out);justify-content:center;align-items:center;display:flex;position:absolute}.slider .slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *),.slider .slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.slider .slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.slider .slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.slider .slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.slider .slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.slider .slider__thumb:after{z-index:10;border-radius:calc(var(--radius) * 1);background-color:var(--accent-foreground);color:var(--color-black);--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);content:"";transform-origin:50%;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:relative}@media(prefers-reduced-motion:reduce){.slider .slider__thumb:after:not(:is()){transition-property:none}}.slider .slider__thumb[data-dragging=true]{cursor:grabbing}.slider .slider__thumb[data-dragging=true]:after{scale:.9}@media(prefers-reduced-motion:reduce){.slider .slider__thumb[data-dragging=true]:after:not(:is()){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}}.slider .slider__thumb[data-focus-visible=true]{z-index:10;--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.slider .slider__thumb[data-disabled=true]{cursor:default}.slider:disabled,.slider[data-disabled=true],.slider[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.slider:disabled,.slider[data-disabled=true],.slider[aria-disabled=true]) [data-slot=label]{opacity:1}.slider[data-orientation=horizontal]{flex-direction:column}.slider[data-orientation=horizontal] .slider__track{height:calc(var(--spacing) * 5);border-inline-style:var(--tw-border-style);border-inline-width:.75rem;border-inline-color:#0000;width:100%}.slider[data-orientation=horizontal] .slider__track[data-fill-start=true]{border-inline-start-color:var(--accent)}.slider[data-orientation=horizontal] .slider__track[data-fill-end=true]{border-inline-end-color:var(--accent)}.slider[data-orientation=horizontal] .slider__fill,.slider[data-orientation=horizontal] .slider__thumb{height:100%}.slider[data-orientation=horizontal] .slider__thumb{width:1.75rem;top:50%}.slider[data-orientation=horizontal] .slider__thumb:after{width:1.5rem;height:1rem}.slider[data-orientation=vertical]{gap:calc(var(--spacing) * 2);flex-direction:row;grid-template:"output""track"1fr"label"/1fr;height:100%}.slider[data-orientation=vertical] .slider__output,.slider[data-orientation=vertical] [data-slot=label]{text-align:center}.slider[data-orientation=vertical] .slider__track{height:100%;width:calc(var(--spacing) * 5);border-block-style:var(--tw-border-style);border-block-width:.75rem;border-block-color:#0000;justify-self:center}.slider[data-orientation=vertical] .slider__track[data-fill-start=true]{border-bottom-color:var(--accent)}.slider[data-orientation=vertical] .slider__track[data-fill-end=true]{border-top-color:var(--accent)}.slider[data-orientation=vertical] .slider__fill,.slider[data-orientation=vertical] .slider__thumb{width:100%}.slider[data-orientation=vertical] .slider__thumb{height:1.75rem;left:50%}.slider[data-orientation=vertical] .slider__thumb:after{width:1rem;height:1.5rem}.switch{align-items:flex-start;gap:var(--spacing);-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);--switch-control-bg:var(--default);--switch-control-bg-hover:var(--switch-control-bg);flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.switch{--switch-control-bg-hover:color-mix(in oklab, var(--switch-control-bg), transparent 20%)}}.switch{--switch-control-bg-pressed:var(--switch-control-bg-hover);--switch-control-bg-checked:var(--accent);--switch-control-bg-checked-hover:var(--accent-hover)}.switch[data-disabled=true],.switch[data-disabled=true] [data-slot=description],.switch[data-disabled=true] [data-slot=field-error]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.switch[data-disabled=true] .switch__thumb{background-color:var(--default-foreground)}@supports (color:color-mix(in lab,red,red)){.switch[data-disabled=true] .switch__thumb{background-color:color-mix(in oklab,var(--default-foreground) 20%,transparent)}}.switch>[data-slot=description]{width:100%;min-width:0;padding-inline-start:3.25rem}.switch>[data-slot=field-error]{width:100%;min-width:0;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--muted);padding-inline-start:3.25rem}.switch.switch--sm>[data-slot=description],.switch.switch--sm>[data-slot=field-error]{padding-inline-start:2.75rem}.switch.switch--lg>[data-slot=description],.switch.switch--lg>[data-slot=field-error]{padding-inline-start:3.75rem}:is(.switch:disabled[aria-checked=true],.switch:disabled[data-selected=true],.switch[data-disabled=true][aria-checked=true],.switch[data-disabled=true][data-selected=true],.switch[aria-disabled=true][aria-checked=true],.switch[aria-disabled=true][data-selected=true]) .switch__thumb{opacity:.4}.switch__control{border-radius:calc(var(--radius) * 1.5);background-color:var(--switch-control-bg);width:2.5rem;height:1.25rem;transition:background-color .25s var(--ease-smooth),box-shadow .15s var(--ease-out);flex-shrink:0;align-items:center;display:flex;position:relative;overflow:hidden}.switch__control:is([data-reduce-motion=true],[data-reduce-motion=true] *),.switch__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.switch__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.switch__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.switch__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.switch__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.switch:focus-visible .switch__control,.switch:has([data-slot=switch-content][data-focus-visible=true]) .switch__control,.switch [data-slot=switch-content][data-focus-visible=true] .switch__control{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.switch:hover .switch__control,.switch:has([data-slot=switch-content][data-hovered=true]) .switch__control,.switch [data-slot=switch-content][data-hovered=true] .switch__control{background-color:var(--switch-control-bg-hover)}.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control{background-color:var(--switch-control-bg-pressed)}:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transform:none}@media(prefers-reduced-motion:reduce){:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transform:none}}.switch[aria-checked=true] .switch__control,.switch[data-selected=true] .switch__control{background-color:var(--switch-control-bg-checked)}.switch[aria-checked=true]:hover .switch__control,.switch[data-selected=true]:hover .switch__control,.switch[aria-checked=true][data-hovered=true] .switch__control,.switch[data-selected=true][data-hovered=true] .switch__control,.switch:has([data-slot=switch-content][data-hovered=true])[data-selected=true] .switch__control,.switch[aria-checked=true]:active .switch__control,.switch[data-selected=true]:active .switch__control,.switch[aria-checked=true][data-pressed=true] .switch__control,.switch[data-selected=true][data-pressed=true] .switch__control,.switch:has([data-slot=switch-content][data-pressed=true])[data-selected=true] .switch__control{background-color:var(--switch-control-bg-checked-hover)}.switch__content{cursor:inherit;align-items:center;gap:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex}.switch--sm .switch__control{border-radius:calc(var(--radius) * 1);width:2rem;height:1rem}.switch--lg .switch__control{width:3rem;height:1.5rem}.switch__thumb{transform-origin:50%;border-radius:calc(var(--radius) * 1);background-color:var(--color-white);color:var(--color-black);--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);width:1.375rem;height:1rem;transition:margin .3s var(--ease-out-fluid),background-color .2s var(--ease-out);margin-inline-start:calc(var(--spacing) * .5);display:flex}.switch__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *),.switch__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.switch__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.switch__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.switch__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.switch__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.switch[aria-checked=true] .switch__thumb,.switch[data-selected=true] .switch__thumb{background-color:var(--accent-foreground);color:var(--accent);margin-inline-start:calc(100% - 1.5rem);box-shadow:0 0 5px #00000005,0 2px 10px #0000000f,0 0 1px #0000004d}.switch--sm .switch__thumb{border-radius:calc(var(--radius) * .75);width:1.03125rem;height:.75rem}.switch[aria-checked=true] :is(.switch--sm .switch__thumb),.switch[data-selected=true] :is(.switch--sm .switch__thumb){margin-inline-start:calc(100% - 1.15625rem)}.switch--lg .switch__thumb{border-radius:calc(var(--radius) * 1.5);width:1.71875rem;height:1.25rem}.switch[aria-checked=true] :is(.switch--lg .switch__thumb),.switch[data-selected=true] :is(.switch--lg .switch__thumb){margin-inline-start:calc(100% - 1.84375rem)}.switch__thumb>*{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.switch__label{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.switch [data-slot=label]{-webkit-user-select:none;user-select:none}.switch__content [data-slot=label]{cursor:var(--cursor-interactive)}.switch [data-slot=description]{cursor:default;-webkit-user-select:none;user-select:none}.switch-group{gap:calc(var(--spacing) * 6);flex-direction:column;display:flex}.switch-group__items{gap:calc(var(--spacing) * 4);display:flex}.switch-group--horizontal .switch-group__items{flex-direction:row}.switch-group--vertical .switch-group__items{flex-direction:column}.badge{justify-content:center;align-items:center;gap:calc(var(--spacing) * .5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);min-height:calc(var(--spacing) * 7);min-width:calc(var(--spacing) * 7);border-radius:calc(var(--radius) * 3);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:1.34;--badge-bg:var(--default);--badge-fg:var(--default-foreground);--badge-border:var(--background);background-color:var(--badge-bg);color:var(--badge-fg);border:1px solid var(--badge-border);flex-shrink:0;line-height:1.34;display:inline-flex}.badge__label{padding-inline:calc(var(--spacing) * .5)}.badge-anchor{flex-shrink:0;display:inline-flex;position:relative}.badge--lg{min-height:calc(var(--spacing) * 8);min-width:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1.43;line-height:1.43}.badge--sm{min-height:calc(var(--spacing) * 4);min-width:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1.5);--tw-leading:1.34;font-size:10px;line-height:1.34}.badge--accent{--badge-fg:var(--accent-soft-foreground)}.badge--default{--badge-fg:var(--default-foreground)}.badge--success{--badge-fg:var(--success-soft-foreground)}.badge--warning{--badge-fg:var(--warning-soft-foreground)}.badge--danger{--badge-fg:var(--danger-soft-foreground)}.badge--top-right{position:absolute;top:0;right:0;transform:translate(25%,-25%)}.badge--top-left{position:absolute;top:0;left:0;transform:translate(-25%,-25%)}.badge--bottom-right{position:absolute;bottom:0;right:0;transform:translate(25%,25%)}.badge--bottom-left{position:absolute;bottom:0;left:0;transform:translate(-25%,25%)}.badge--primary.badge--accent{--badge-bg:var(--accent);--badge-fg:var(--accent-foreground)}.badge--primary.badge--default{--badge-bg:var(--default);--badge-fg:var(--default-foreground)}.badge--primary.badge--success{--badge-bg:var(--success);--badge-fg:var(--success-foreground)}.badge--primary.badge--warning{--badge-bg:var(--warning);--badge-fg:var(--warning-foreground)}.badge--primary.badge--danger{--badge-bg:var(--danger);--badge-fg:var(--danger-foreground)}.badge--soft.badge--accent{--badge-bg:var(--accent-soft);--badge-fg:var(--accent-soft-foreground)}.badge--soft.badge--default{--badge-bg:var(--default-soft);--badge-fg:var(--default-soft-foreground)}.badge--soft.badge--success{--badge-bg:var(--success-soft);--badge-fg:var(--success-soft-foreground)}.badge--soft.badge--warning{--badge-bg:var(--warning-soft);--badge-fg:var(--warning-soft-foreground)}.badge--soft.badge--danger{--badge-bg:var(--danger-soft);--badge-fg:var(--danger-soft-foreground)}.chip{align-items:center;gap:calc(var(--spacing) * .5);border-radius:calc(var(--radius) * 2);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--chip-bg:var(--default);--chip-fg:currentColor;background-color:var(--chip-bg);color:var(--chip-fg);flex-shrink:0;display:inline-flex}.chip__label{padding-inline:calc(var(--spacing) * .5)}.chip--accent{--chip-fg:var(--accent-soft-foreground)}.chip--danger{--chip-fg:var(--danger-soft-foreground)}.chip--default{--chip-fg:var(--default-foreground)}.chip--success{--chip-fg:var(--success-soft-foreground)}.chip--warning{--chip-fg:var(--warning-soft-foreground)}.chip--tertiary{--chip-bg:transparent}.chip--sm{padding-inline:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));padding-block:0}.chip--md{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.chip--lg{padding-inline:calc(var(--spacing) * 3);padding-block:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.chip--primary.chip--accent{--chip-bg:var(--accent);--chip-fg:var(--accent-foreground)}.chip--primary.chip--success{--chip-bg:var(--success);--chip-fg:var(--success-foreground)}.chip--primary.chip--warning{--chip-bg:var(--warning);--chip-fg:var(--warning-foreground)}.chip--primary.chip--danger{--chip-bg:var(--danger);--chip-fg:var(--danger-foreground)}.chip--accent.chip--soft{--chip-bg:var(--accent-soft);--chip-fg:var(--accent-soft-foreground)}.chip--success.chip--soft{--chip-bg:var(--success-soft);--chip-fg:var(--success-soft-foreground)}.chip--warning.chip--soft{--chip-bg:var(--warning-soft);--chip-fg:var(--warning-soft-foreground)}.chip--danger.chip--soft{--chip-bg:var(--danger-soft);--chip-fg:var(--danger-soft-foreground)}.chip--default.chip--soft{--chip-bg:var(--default-soft);--chip-fg:var(--default-soft-foreground)}.table-root{grid-template-columns:minmax(0,1fr);width:100%;display:grid;position:relative;overflow:clip}.table__scroll-container{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);scrollbar-gutter:auto;overflow-x:auto}.table-root--primary{background-color:var(--surface-secondary);padding-inline:var(--spacing);padding-bottom:var(--spacing);border-radius:min(32px,calc(var(--radius) * 2.5))}.table-root--secondary .table__header{border-bottom-style:var(--tw-border-style);background-color:#0000;border-bottom-width:0}.table-root--secondary .table__column{background-color:var(--surface-secondary)}.table-root--secondary :is(th.table__column:first-child,[role=row]>[role=presentation]:first-of-type>.table__column){border-start-start-radius:min(32px,var(--radius-2xl));border-end-start-radius:min(32px,var(--radius-2xl))}.table-root--secondary :is(th.table__column:last-child,[role=row]>[role=presentation]:last-of-type>.table__column){border-start-end-radius:min(32px,var(--radius-2xl));border-end-end-radius:min(32px,var(--radius-2xl))}.table-root--secondary .table__body{--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)}.table-root--secondary .table__body tr:first-child td:first-child,.table-root--secondary .table__body tr:first-child td:last-child,.table-root--secondary .table__body tr:last-child td:first-child,.table-root--secondary .table__body tr:last-child td:last-child{border-radius:0}.table-root--secondary .table__body:not(tbody){border-radius:0;overflow:visible}.table-root--secondary .table__row .table__cell{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--separator-tertiary)}@supports (color:color-mix(in lab,red,red)){.table-root--secondary .table__row .table__cell{border-color:color-mix(in oklab,var(--separator-tertiary) 50%,transparent)}}.table-root--secondary .table__row .table__cell{background-color:#0000}@media(hover:hover){.table-root--secondary .table__row:hover .table__cell,.table-root--secondary .table__row[data-hovered=true] .table__cell{background-color:var(--default)}@supports (color:color-mix(in lab,red,red)){.table-root--secondary .table__row:hover .table__cell,.table-root--secondary .table__row[data-hovered=true] .table__cell{background-color:color-mix(in oklab,var(--default) 50%,transparent)}}}.table__content{border-collapse:separate;--tw-border-spacing-x:0;--tw-border-spacing-y:0;width:100%;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.table-root--primary .table__content{overflow:clip}.table__header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--separator)}@supports (color:color-mix(in lab,red,red)){.table__header{border-color:color-mix(in oklab,var(--separator) 50%,transparent)}}.table__header{background-color:var(--surface-secondary)}.table__column{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);text-align:left;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);position:relative}.table__column:after{content:"";pointer-events:none;height:calc(var(--spacing) * 4);--tw-translate-y: -50% ;width:1px;translate:var(--tw-translate-x) var(--tw-translate-y);border-radius:calc(var(--radius) * .5);background-color:var(--separator);inset-inline-end:calc(var(--spacing) * 0);position:absolute;top:50%}.table__column:last-child:not(:only-child):after{content:none}.table__column[data-allows-sorting=true]{cursor:var(--cursor-interactive)}@media(hover:hover){.table__column[data-allows-sorting=true]:hover,.table__column[data-allows-sorting=true][data-hovered=true]{color:var(--foreground)}}.table__column:focus-visible,.table__column[data-focus-visible=true]{border-radius:calc(var(--radius) * 1);--tw-outline-style:none;box-shadow:inset 0 0 0 2px var(--focus);outline-style:none}[role=row]>[role=presentation]:last-of-type:not(:only-of-type)>.table__column:after{content:none}.table__sortable-column-header{justify-content:space-between;align-items:center;display:flex}.table__sortable-column-indicator{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);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));--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out)}.table__sortable-column-indicator[data-direction=descending]{rotate:180deg}.table__body tr:first-child td:first-child{border-start-start-radius:min(32px,var(--radius-2xl))}.table__body tr:first-child td:last-child{border-start-end-radius:min(32px,var(--radius-2xl))}.table__body tr:last-child td:first-child{border-end-start-radius:min(32px,var(--radius-2xl))}.table__body tr:last-child td:last-child{border-end-end-radius:min(32px,var(--radius-2xl))}.table__body:not(tbody){border-radius:min(32px,var(--radius-2xl));height:100%;position:relative;overflow:clip}.table__row{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--separator);height:100%;position:relative}@supports (color:color-mix(in lab,red,red)){.table__row{border-color:color-mix(in oklab,var(--separator) 50%,transparent)}}.table__row:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.table__row:hover .table__cell,.table__row[data-hovered=true] .table__cell{background-color:var(--surface)}@supports (color:color-mix(in lab,red,red)){.table__row:hover .table__cell,.table__row[data-hovered=true] .table__cell{background-color:color-mix(in oklab,var(--surface) 40%,transparent)}}}.table__row[data-selected=true] .table__cell{background-color:var(--surface)}@supports (color:color-mix(in lab,red,red)){.table__row[data-selected=true] .table__cell{background-color:color-mix(in oklab,var(--surface) 10%,transparent)}}.table__row[aria-disabled=true],.table__row[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.table__row:focus-visible,.table__row[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.table__row[data-dragging=true]{opacity:.5}.table__row[data-drop-target=true] .table__cell{background-color:var(--accent-soft)}.table__cell{background-color:var(--surface);height:100%;padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);vertical-align:middle;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--foreground);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--separator-tertiary)}@supports (color:color-mix(in lab,red,red)){.table__cell{border-color:color-mix(in oklab,var(--separator-tertiary) 50%,transparent)}}.table__cell:focus-visible,.table__cell[data-focus-visible=true]{border-radius:calc(var(--radius) * 1);--tw-outline-style:none;box-shadow:inset 0 0 0 2px var(--focus);outline-style:none}.table__row:is(:focus-visible,[data-focus-visible=true]) :is(.table__cell,.table__column){--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)}.table__row:is(:focus-visible,[data-focus-visible=true])>:is(.table__cell,.table__column):only-child,.table__row:is(:focus-visible,[data-focus-visible=true])>:only-child :is(.table__cell,.table__column){border-radius:calc(var(--radius) * 1);--tw-shadow:inset 0 0 0 2px var(--tw-shadow-color,var(--focus));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.table__row:is(:focus-visible,[data-focus-visible=true])>:is(.table__cell,.table__column):first-child:not(:only-child),.table__row:is(:focus-visible,[data-focus-visible=true])>:first-child:not(:only-child) :is(.table__cell,.table__column){border-top-left-radius:calc(var(--radius) * 1);border-bottom-left-radius:calc(var(--radius) * 1);--tw-shadow:inset 2px 0 0 0 var(--tw-shadow-color,var(--focus)), inset 0 2px 0 0 var(--tw-shadow-color,var(--focus)), inset 0 -2px 0 0 var(--tw-shadow-color,var(--focus));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.table__row:is(:focus-visible,[data-focus-visible=true])>:is(.table__cell,.table__column):last-child:not(:only-child),.table__row:is(:focus-visible,[data-focus-visible=true])>:last-child:not(:only-child) :is(.table__cell,.table__column){border-top-right-radius:calc(var(--radius) * 1);border-bottom-right-radius:calc(var(--radius) * 1);--tw-shadow:inset -2px 0 0 0 var(--tw-shadow-color,var(--focus)), inset 0 2px 0 0 var(--tw-shadow-color,var(--focus)), inset 0 -2px 0 0 var(--tw-shadow-color,var(--focus));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.table__row:is(:focus-visible,[data-focus-visible=true])>:is(.table__cell,.table__column):not(:first-child):not(:last-child):not(:only-child),.table__row:is(:focus-visible,[data-focus-visible=true])>:not(:first-child):not(:last-child):not(:only-child) :is(.table__cell,.table__column){--tw-shadow:inset 0 2px 0 0 var(--tw-shadow-color,var(--focus)), inset 0 -2px 0 0 var(--tw-shadow-color,var(--focus));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.table__cell[data-tree-column]{padding-inline-start:calc(1rem * var(--table-row-level,1))}.table__footer{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);align-items:center;display:flex}.table__resizable-container{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);scrollbar-gutter:auto;position:relative;overflow:auto}.table__column-resizer{height:calc(var(--spacing) * 4);--tw-translate-y: -50% ;border-radius:calc(var(--radius) * .5);background-color:var(--separator);box-sizing:content-box;--tw-translate-x: 50% ;width:1px;translate:var(--tw-translate-x) var(--tw-translate-y);cursor:col-resize;touch-action:none;padding-inline:calc(var(--spacing) * 2);--tw-border-style:none;--tw-outline-style:none;inset-inline-end:calc(var(--spacing) * 0);background-clip:content-box;border-style:none;outline-style:none;position:absolute;top:50%}.table__column-resizer[data-hovered=true],.table__column-resizer:hover,.table__column-resizer[data-resizing=true]{height:100%;width:calc(var(--spacing) * .5);background-color:var(--accent)}.table__column-resizer[data-focus-visible=true],.table__column-resizer:focus-visible{height:100%;width:calc(var(--spacing) * .5);background-color:var(--focus)}.table__column:has(.table__column-resizer):after{content:none}.table__load-more td,.table__load-more [role=rowheader]{padding-block:calc(var(--spacing) * 3);text-align:center}:is(.table__load-more td,.table__load-more [role=rowheader])>*{margin-inline:auto}.table__load-more-content{justify-content:center;align-items:center;gap:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 2);display:flex}.alert{justify-content:flex-start;align-items:flex-start;gap:calc(var(--spacing) * 4);background-color:var(--surface);width:100%;padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);--tw-shadow:var(--surface-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:min(32px,var(--radius-3xl));flex-direction:row;display:flex}.alert__content{flex-direction:column;flex-grow:1;align-items:flex-start;height:100%;display:flex}.alert__indicator{padding:var(--spacing);-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;display:flex}.alert__indicator [data-slot=alert-default-icon]{box-sizing:content-box;width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.alert__title{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.alert__description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted)}.alert--default .alert__indicator,.alert--default .alert__title{color:var(--foreground)}.alert--accent .alert__indicator,.alert--accent .alert__title{color:var(--accent-soft-foreground)}.alert--success .alert__indicator,.alert--success .alert__title{color:var(--success-soft-foreground)}.alert--warning .alert__indicator,.alert--warning .alert__title{color:var(--warning-soft-foreground)}.alert--danger .alert__indicator,.alert--danger .alert__title{color:var(--danger-soft-foreground)}.empty-state{padding:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted)}.skeleton{pointer-events:none;border-radius:calc(var(--radius) * .5);background-color:var(--surface-tertiary);position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.skeleton{background-color:color-mix(in oklab,var(--surface-tertiary) 70%,transparent)}}.skeleton--shimmer:after{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-gradient-position:to right;animation:2s linear infinite skeleton;position:absolute;top:0;right:0;bottom:0;left:0}@supports (background-image:linear-gradient(in lab,red,red)){.skeleton--shimmer:after{--tw-gradient-position:to right in oklab}}.skeleton--shimmer:after{background-image:linear-gradient(var(--tw-gradient-stops));--tw-gradient-from:transparent;--tw-gradient-via:var(--surface-tertiary);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));--tw-gradient-to:transparent;--tw-content:"";content:var(--tw-content)}.skeleton--shimmer:has(.skeleton):after{content:none}.skeleton--shimmer:has(.skeleton):before{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-content:"";content:var(--tw-content);z-index:10;pointer-events:none;mix-blend-mode:overlay;background:linear-gradient(90deg,#0000,#ffffff80,#0000);animation:2s linear infinite skeleton;position:absolute;top:0;right:0;bottom:0;left:0}.skeleton--shimmer:has(.skeleton) .skeleton:after{content:none}.skeleton--pulse{animation:var(--animate-pulse)}.meter{gap:var(--spacing);--meter-fill:var(--accent);grid-template-columns:1fr auto;grid-template-areas:"label output""track track";width:100%;display:grid}.meter [data-slot=label]{width:fit-content;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);grid-area:label}.meter .meter__output{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--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,);grid-area:output}.meter .meter__track{border-radius:calc(var(--radius) * .5);background-color:var(--default);height:calc(var(--spacing) * 2);grid-area:track;position:relative;overflow:hidden}.meter .meter__fill{border-radius:calc(var(--radius) * .5);background-color:var(--meter-fill);height:100%;transition:width .3s var(--ease-out);position:absolute;top:0;left:0}.meter .meter__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *),.meter .meter__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.meter .meter__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.meter .meter__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.meter .meter__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.meter .meter__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.meter:disabled,.meter[data-disabled=true],.meter[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.meter:disabled,.meter[data-disabled=true],.meter[aria-disabled=true]) [data-slot=label]{opacity:1}.meter--sm .meter__track{height:var(--spacing);border-radius:calc(var(--radius) * .25)}.meter--sm .meter__fill{border-radius:calc(var(--radius) * .25)}.meter--lg .meter__track{height:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * .75)}.meter--lg .meter__fill{border-radius:calc(var(--radius) * .75)}.meter--default{--meter-fill:var(--default-foreground)}.meter--accent{--meter-fill:var(--accent)}.meter--success{--meter-fill:var(--success)}.meter--warning{--meter-fill:var(--warning)}.meter--danger{--meter-fill:var(--danger)}.progress-bar{gap:var(--spacing);--progress-bar-fill:var(--accent);grid-template-columns:1fr auto;grid-template-areas:"label output""track track";width:100%;display:grid}.progress-bar [data-slot=label]{width:fit-content;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);grid-area:label}.progress-bar .progress-bar__output{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--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,);grid-area:output}.progress-bar .progress-bar__track{border-radius:calc(var(--radius) * .5);background-color:var(--default);height:calc(var(--spacing) * 2);grid-area:track;position:relative;overflow:hidden}.progress-bar .progress-bar__fill{border-radius:calc(var(--radius) * .5);background-color:var(--progress-bar-fill);height:100%;transition:width .3s var(--ease-out);position:absolute;top:0;left:0}.progress-bar .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *),.progress-bar .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.progress-bar .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.progress-bar .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.progress-bar .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.progress-bar .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.progress-bar:not([aria-valuenow]) .progress-bar__fill{width:40%;animation:1.5s cubic-bezier(.65,0,.35,1) infinite progress-bar-indeterminate}.progress-bar:not([aria-valuenow]) .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *),.progress-bar:not([aria-valuenow]) .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.progress-bar:not([aria-valuenow]) .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){.progress-bar:not([aria-valuenow]) .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.progress-bar:not([aria-valuenow]) .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.progress-bar:not([aria-valuenow]) .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.progress-bar:disabled,.progress-bar[data-disabled=true],.progress-bar[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.progress-bar:disabled,.progress-bar[data-disabled=true],.progress-bar[aria-disabled=true]) [data-slot=label]{opacity:1}@keyframes progress-bar-indeterminate{0%{transform:translate(-100%)}to{transform:translate(350%)}}.progress-bar--sm .progress-bar__track{height:var(--spacing);border-radius:calc(var(--radius) * .25)}.progress-bar--sm .progress-bar__fill{border-radius:calc(var(--radius) * .25)}.progress-bar--lg .progress-bar__track{height:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * .75)}.progress-bar--lg .progress-bar__fill{border-radius:calc(var(--radius) * .75)}.progress-bar--default{--progress-bar-fill:var(--default-foreground)}.progress-bar--accent{--progress-bar-fill:var(--accent)}.progress-bar--success{--progress-bar-fill:var(--success)}.progress-bar--warning{--progress-bar-fill:var(--warning)}.progress-bar--danger{--progress-bar-fill:var(--danger)}.progress-circle{--progress-circle-stroke:var(--accent);--progress-circle-track-stroke:var(--default);justify-content:center;align-items:center;display:inline-flex}.progress-circle .progress-circle__track{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.progress-circle .progress-circle__track-circle{stroke:var(--progress-circle-track-stroke)}.progress-circle .progress-circle__fill-circle{stroke:var(--progress-circle-stroke);transition:stroke-dashoffset .3s var(--ease-out)}.progress-circle .progress-circle__fill-circle:is([data-reduce-motion=true],[data-reduce-motion=true] *),.progress-circle .progress-circle__fill-circle:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.progress-circle .progress-circle__fill-circle:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.progress-circle .progress-circle__fill-circle:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.progress-circle .progress-circle__fill-circle:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.progress-circle .progress-circle__fill-circle:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.progress-circle:not([aria-valuenow]) .progress-circle__track{animation:1s linear infinite progress-circle-spin}.progress-circle:not([aria-valuenow]) .progress-circle__track:is([data-reduce-motion=true],[data-reduce-motion=true] *),.progress-circle:not([aria-valuenow]) .progress-circle__track:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.progress-circle:not([aria-valuenow]) .progress-circle__track:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){.progress-circle:not([aria-valuenow]) .progress-circle__track:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.progress-circle:not([aria-valuenow]) .progress-circle__track:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.progress-circle:not([aria-valuenow]) .progress-circle__track:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.progress-circle:disabled,.progress-circle[data-disabled=true],.progress-circle[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}@keyframes progress-circle-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.progress-circle--sm .progress-circle__track{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.progress-circle--lg .progress-circle__track{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.progress-circle--default{--progress-circle-stroke:var(--default-foreground)}.progress-circle--accent{--progress-circle-stroke:var(--accent)}.progress-circle--success{--progress-circle-stroke:var(--success)}.progress-circle--warning{--progress-circle-stroke:var(--warning)}.progress-circle--danger{--progress-circle-stroke:var(--danger)}.spinner{pointer-events:none;width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6);flex-shrink:0;animation:.75s linear infinite spin;display:inline-flex}.spinner:is([data-reduce-motion=true],[data-reduce-motion=true] *),.spinner:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.spinner:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){.spinner:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.spinner:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.spinner:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.spinner--sm{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.spinner--lg{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.spinner--xl{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.spinner--current{color:inherit}.spinner--accent{color:var(--accent)}.spinner--danger{color:var(--danger)}.spinner--success{color:var(--success)}.spinner--warning{color:var(--warning)}.toast-region{pointer-events:none;z-index:50;--tw-outline-style:none;outline-style:none;width:calc(100vw - 2rem);position:fixed}@media(min-width:40rem){.toast-region{width:auto;min-width:var(--toast-width)}}.toast-region{display:block}.toast-region--bottom{bottom:calc(var(--spacing) * 4);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);left:50%}.toast-region--bottom-start{bottom:calc(var(--spacing) * 4);left:calc(var(--spacing) * 4)}.toast-region--bottom-end{right:calc(var(--spacing) * 4);bottom:calc(var(--spacing) * 4)}.toast-region--top{top:calc(var(--spacing) * 4);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);left:50%}.toast-region--top-start{top:calc(var(--spacing) * 4);left:calc(var(--spacing) * 4)}.toast-region--top-end{top:calc(var(--spacing) * 4);right:calc(var(--spacing) * 4)}.toast-region:focus-visible{outline-style:var(--tw-outline-style);outline-offset:2px;outline-width:2px;outline-color:var(--focus)}.toast{pointer-events:auto;justify-content:flex-start;align-items:flex-start;gap:calc(var(--spacing) * 1.5);background-color:var(--surface);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);--tw-shadow:var(--overlay-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:min(32px,var(--radius-3xl));flex-direction:row;display:flex;position:absolute;left:0;right:0}.toast--bottom,.toast--bottom-start,.toast--bottom-end{bottom:0}.toast--top,.toast--top-start,.toast--top-end{top:0}.toast:not([data-frontmost=true]){pointer-events:none;height:var(--front-height);overflow:hidden}.toast:not([data-frontmost=true]) .toast__close-button{pointer-events:none;opacity:0;outline:none}.toast[data-hidden=true]{pointer-events:none;opacity:0;display:flex}.toast:focus-visible{outline-style:var(--tw-outline-style);outline-offset:2px;outline-width:2px;outline-color:var(--focus)}.toast--bottom,.toast--bottom-start,.toast--bottom-end{view-transition-class:toast-bottom}.toast--top,.toast--top-start,.toast--top-end{view-transition-class:toast-top}.toast__content{flex-direction:column;flex-grow:1;align-self:center;align-items:flex-start;height:100%;display:flex}.toast__indicator{padding:var(--spacing);color:var(--overlay-foreground);-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.toast__indicator [data-slot=toast-default-icon]{box-sizing:content-box;width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.toast__indicator [data-slot=spinner],.toast__indicator [data-slot=spinner-icon]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.toast__title{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--overlay-foreground)}.toast__description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted)}.toast__close-button{pointer-events:none;top:calc(var(--spacing) * -1);right:calc(var(--spacing) * -1);width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);border-color:var(--border);background-color:var(--default);opacity:0;position:absolute}@media(min-width:40rem){.toast__close-button{border-style:var(--tw-border-style);background-color:var(--overlay);border-width:1px}}.toast__close-button{transition:opacity .15s var(--ease-smooth)}.toast__close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.toast__close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.toast__close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.toast__close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.toast__close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.toast__close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.toast__close-button [data-slot=close-button-icon]{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}@media(min-width:40rem){.toast__close-button [data-slot=close-button-icon]{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}}@media(hover:hover){.toast__close-button:hover,.toast__close-button[data-hovered=true]{background-color:var(--default)}}.toast[data-frontmost=true]:hover .toast__close-button{pointer-events:auto;opacity:1}.toast__action{margin-top:calc(var(--spacing) * 2)}@media(min-width:40rem){.toast__action{margin-top:0}}.toast--accent .toast__title{color:var(--accent-soft-foreground)}.toast--success .toast__title,.toast--success .toast__indicator{color:var(--success-soft-foreground)}.toast--warning .toast__title,.toast--warning .toast__indicator{color:var(--warning-soft-foreground)}.toast--danger .toast__title,.toast--danger .toast__indicator{color:var(--danger-soft-foreground)}::view-transition-old(*){will-change:translate,opacity}::view-transition-new(*){will-change:translate,opacity}::view-transition-new(.toast-bottom):only-child{animation:.35s toast-slide-bottom-in}::view-transition-old(.toast-bottom):only-child{animation:.35s forwards toast-slide-bottom-out}::view-transition-new(.toast-top):only-child{animation:.35s toast-slide-top-in}::view-transition-old(.toast-top):only-child{animation:.35s forwards toast-slide-top-out}@keyframes toast-slide-bottom-in{0%{opacity:0;translate:0 100%}}@keyframes toast-slide-bottom-out{to{opacity:0;translate:0 100%}}@keyframes toast-slide-top-in{0%{opacity:0;translate:0 -100%}}@keyframes toast-slide-top-out{to{opacity:0;translate:0 -100%}}.checkbox-group{flex-direction:column;display:flex}.checkbox-group [data-slot=checkbox]{margin-top:calc(var(--spacing) * 4)}.checkbox{align-items:flex-start;gap:var(--spacing);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);outline-style:none;flex-direction:column;display:flex}.checkbox>[data-slot=description],.checkbox>[data-slot=field-error]{cursor:default;width:100%;min-width:0;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));text-wrap:wrap;overflow-wrap:break-word;color:var(--muted);-webkit-user-select:none;user-select:none;padding-inline-start:calc(var(--spacing) * 7)}.checkbox [data-slot=label]{-webkit-user-select:none;user-select:none}.checkbox .checkbox__content [data-slot=label]{cursor:var(--cursor-interactive)}.checkbox[data-disabled=true],.checkbox[data-disabled=true] [data-slot=description],.checkbox[data-disabled=true] [data-slot=field-error]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.checkbox[data-selected=true],.checkbox[data-indeterminate=true]) .checkbox__indicator{border-color:var(--accent-foreground)}.checkbox [data-slot=checkbox-default-indicator--checkmark]{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5);stroke-width:2.5px;color:var(--accent-foreground);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}.checkbox [data-slot=checkbox-default-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *),.checkbox [data-slot=checkbox-default-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.checkbox [data-slot=checkbox-default-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.checkbox [data-slot=checkbox-default-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.checkbox [data-slot=checkbox-default-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.checkbox [data-slot=checkbox-default-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.checkbox[data-selected=true] [data-slot=checkbox-default-indicator--checkmark]{transition:stroke-dashoffset .15s linear 15ms}.checkbox[data-invalid=true][data-selected=true] [data-slot=checkbox-default-indicator--checkmark],.checkbox[data-invalid=true][aria-checked=true] [data-slot=checkbox-default-indicator--checkmark],.checkbox[aria-invalid=true][data-selected=true] [data-slot=checkbox-default-indicator--checkmark],.checkbox[aria-invalid=true][aria-checked=true] [data-slot=checkbox-default-indicator--checkmark]{color:var(--danger-foreground)}.checkbox[data-indeterminate=true] [data-slot=checkbox-default-indicator--indeterminate]{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.checkbox[data-indeterminate=true][data-invalid=true] [data-slot=checkbox-default-indicator--indeterminate],.checkbox[data-indeterminate=true][aria-invalid=true] [data-slot=checkbox-default-indicator--indeterminate]{color:var(--danger-foreground)}.checkbox__control{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * .75);border-style:var(--tw-border-style);border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border,var(--border));background-color:var(--field-background,var(--default));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;transition:background-color .2s var(--ease-out),border-color .2s var(--ease-out),transform .1s var(--ease-out);outline-style:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative;overflow:hidden}.checkbox__control:is([data-reduce-motion=true],[data-reduce-motion=true] *),.checkbox__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.checkbox__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.checkbox__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.checkbox__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.checkbox__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.checkbox__control{cursor:var(--cursor-interactive)}.checkbox__control:before{pointer-events:none;z-index:0;transform-origin:50%;--tw-scale-x:70%;--tw-scale-y:70%;--tw-scale-z:70%;scale:var(--tw-scale-x) var(--tw-scale-y);border-radius:calc(var(--radius) * .75);background-color:var(--accent);opacity:0;--tw-content:"";content:var(--tw-content);transition:scale .1s var(--ease-linear),opacity .2s var(--ease-linear),background-color .2s var(--ease-out);position:absolute;top:0;right:0;bottom:0;left:0}@media(prefers-reduced-motion:reduce){.checkbox__control:before:not(:is()){transition-property:none}}.checkbox:focus-visible .checkbox__control,.checkbox:has([data-slot=checkbox-content][data-focus-visible=true]) .checkbox__control,.checkbox [data-slot=checkbox-content][data-focus-visible=true] .checkbox__control{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.checkbox:hover .checkbox__control,.checkbox:has([data-slot=checkbox-content][data-hovered=true]) .checkbox__control,.checkbox [data-slot=checkbox-content][data-hovered=true] .checkbox__control{border-color:var(--field-border-hover)}:is(.checkbox:hover .checkbox__control,.checkbox:has([data-slot=checkbox-content][data-hovered=true]) .checkbox__control,.checkbox [data-slot=checkbox-content][data-hovered=true] .checkbox__control):before{background-color:var(--accent-hover)}.checkbox[aria-checked=true] .checkbox__control,.checkbox[data-selected=true] .checkbox__control{color:var(--accent-foreground);border-color:#0000}:is(.checkbox[aria-checked=true] .checkbox__control,.checkbox[data-selected=true] .checkbox__control):before{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:1}.checkbox[data-indeterminate=true] .checkbox__control{background-color:var(--accent);color:var(--accent-foreground)}.checkbox:active[data-indeterminate=true] .checkbox__control,.checkbox[data-pressed=true][data-indeterminate=true] .checkbox__control,.checkbox:has([data-slot=checkbox-content][data-pressed=true])[data-indeterminate=true] .checkbox__control{background-color:var(--accent-hover)}.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control):focus,:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control):focus-visible,:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control)[data-focused=true],:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control)[data-focus-visible=true],:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control):focus-within,:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control)[data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.checkbox[data-invalid=true][aria-checked=true] .checkbox__control,.checkbox[data-invalid=true][data-selected=true] .checkbox__control,.checkbox[aria-invalid=true][aria-checked=true] .checkbox__control,.checkbox[aria-invalid=true][data-selected=true] .checkbox__control{background-color:var(--danger);color:var(--danger-foreground);border-color:#0000}:is(.checkbox[data-invalid=true][aria-checked=true] .checkbox__control,.checkbox[data-invalid=true][data-selected=true] .checkbox__control,.checkbox[aria-invalid=true][aria-checked=true] .checkbox__control,.checkbox[aria-invalid=true][data-selected=true] .checkbox__control):before{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y);background-color:var(--danger);opacity:1}.checkbox[data-indeterminate=true][aria-invalid=true] .checkbox__control,.checkbox[data-indeterminate=true][data-invalid=true] .checkbox__control{background-color:var(--danger);color:var(--danger-foreground)}.checkbox__indicator{z-index:10;width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);justify-content:center;align-items:center;display:flex;position:relative}.checkbox__indicator svg{width:100%;height:100%;transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.checkbox--disabled{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.checkbox--secondary .checkbox__control{--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);background-color:var(--checkbox-control-bg);--checkbox-control-bg:var(--default)}.checkbox:hover :is(.checkbox--secondary .checkbox__control),.checkbox:has([data-slot=checkbox-content][data-hovered=true]) :is(.checkbox--secondary .checkbox__control),.checkbox [data-slot=checkbox-content][data-hovered=true] :is(.checkbox--secondary .checkbox__control){border-color:var(--field-border-hover)}.checkbox__content{cursor:inherit;align-items:center;gap:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex}.checkbox--secondary:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control{background-color:var(--checkbox-control-bg)}:is(.checkbox--secondary[aria-checked=true] .checkbox__control,.checkbox--secondary[data-selected=true] .checkbox__control):before,.checkbox--secondary[data-indeterminate=true] .checkbox__control,.checkbox--secondary[data-indeterminate=true] .checkbox__control:before{background-color:var(--accent)}.fieldset{gap:calc(var(--spacing) * 6);flex-direction:column;flex:1 1 0;display:flex}.fieldset__legend{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.fieldset__field_group{width:100%}:where(.fieldset__field_group>: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)))}.fieldset__actions{align-items:center;gap:calc(var(--spacing) * 2);padding-top:var(--spacing);display:flex}.input-otp{align-items:center;gap:calc(var(--spacing) * 2);display:flex;position:relative}.input-otp[data-disabled=true]{cursor:not-allowed;opacity:.5}.input-otp__group{align-items:center;gap:calc(var(--spacing) * 2);display:flex}.input-otp__slot{height:calc(var(--spacing) * 10);width:calc(var(--spacing) * 9.5);border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:var(--field-radius,calc(var(--radius) * 1.5));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);outline-style:none;flex:1;justify-content:center;align-items:center;display:flex;position:relative}.input-otp__slot:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-otp__slot:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-otp__slot:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input-otp__slot:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-otp__slot:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-otp__slot:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.input-otp__slot:hover,.input-otp__slot[data-hovered=true]{background-color:var(--field-hover);border-color:var(--field-border-hover)}}.input-otp__slot[data-active=true]{z-index:10;background-color:var(--field-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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;outline-style:none}.input-otp__slot[data-filled=true]{background-color:var(--field-focus)}.input-otp__slot[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.input-otp__slot[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input-otp__slot[data-invalid=true]:focus,.input-otp__slot[data-invalid=true]:focus-visible,.input-otp__slot[data-invalid=true][data-focused=true],.input-otp__slot[data-invalid=true][data-focus-visible=true],.input-otp__slot[data-invalid=true]:focus-within,.input-otp__slot[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.input-otp__slot[data-invalid=true]{background-color:var(--field-focus)}.input-otp__slot-value{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6);--tw-tracking:-.27px;letter-spacing:-.27px;animation:slot-value-in .25s var(--ease-smooth) both;transform-origin:bottom}.input-otp__slot-value:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-otp__slot-value:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-otp__slot-value:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){.input-otp__slot-value:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-otp__slot-value:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-otp__slot-value:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.input-otp__caret{height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * .5);background-color:var(--field-placeholder,var(--muted));width:2px;animation:1.2s ease-out infinite caret-blink;position:absolute}.input-otp__separator{border-radius:calc(var(--radius) * .5);background-color:var(--separator);flex-shrink:0;width:6px;height:2px}.input-otp--secondary .input-otp__slot{--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);background-color:var(--input-otp-slot-bg);--input-otp-slot-bg:var(--default);--input-otp-slot-bg-hover:var(--default-hover);--input-otp-slot-bg-focus:var(--default)}@media(hover:hover){.input-otp--secondary .input-otp__slot:hover,.input-otp--secondary .input-otp__slot[data-hovered=true]{background-color:var(--input-otp-slot-bg-hover)}}.input-otp--secondary .input-otp__slot[data-active=true],.input-otp--secondary .input-otp__slot[data-filled=true]{background-color:var(--input-otp-slot-bg-focus)}@keyframes slot-value-in{0%{opacity:0;transform:translateY(8px)scale(.8)}to{opacity:1;transform:translateY(0)scale(1)}}.input{border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;outline-style:none}.input::placeholder{color:var(--field-placeholder,var(--muted))}@media(min-width:40rem){.input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.input{border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out)}.input:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.input:hover:not(:focus):not(:focus-visible),.input[data-hovered=true]:not([data-focused=true]):not([data-focus-visible=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.input:focus,.input[data-focused=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.input[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input[data-invalid=true]:focus,.input[data-invalid=true]:focus-visible,.input[data-invalid=true][data-focused=true],.input[data-invalid=true][data-focus-visible=true],.input[data-invalid=true]:focus-within,.input[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.input[data-invalid=true]{background-color:var(--field-focus)}.input:disabled,.input[data-disabled=true],.input[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.input--secondary{--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);background-color:var(--input-bg);--input-bg:var(--default);--input-bg-hover:var(--default-hover);--input-bg-focus:var(--default)}@media(hover:hover){.input--secondary:hover:not(:focus):not(:focus-visible),.input--secondary[data-hovered=true]:not([data-focus-visible=true]):not([data-focused=true]){background-color:var(--input-bg-hover)}}.input--secondary:focus,.input--secondary[data-focused=true]{background-color:var(--input-bg-focus)}.input--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input--secondary[data-invalid=true]:focus,.input--secondary[data-invalid=true]:focus-visible,.input--secondary[data-invalid=true][data-focused=true],.input--secondary[data-invalid=true][data-focus-visible=true],.input--secondary[data-invalid=true]:focus-within,.input--secondary[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.input--secondary[data-invalid=true]{background-color:var(--input-bg-focus)}.input--full-width{width:100%}.input-group{min-height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);outline-style:none;align-items:center;display:inline-flex}.input-group:has([data-slot=input-group-textarea]){align-items:flex-start;height:auto}.input-group{transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out)}.input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.input-group:hover:not(:focus-within),.input-group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.input-group:has([data-slot=input-group-input]:focus),.input-group:has([data-slot=input-group-textarea]: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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.input-group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input-group[data-invalid=true]:focus,.input-group[data-invalid=true]:focus-visible,.input-group[data-invalid=true][data-focused=true],.input-group[data-invalid=true][data-focus-visible=true],.input-group[data-invalid=true]:focus-within,.input-group[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.input-group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.input-group[data-disabled=true],.input-group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:-webkit-any(.input-group:has([data-slot=input-group-input]:-webkit-autofill),.input-group:has([data-slot=input-group-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}:is(.input-group:has([data-slot=input-group-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}.input-group__input{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--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);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none;flex:1}.input-group__input::placeholder{color:var(--field-placeholder,var(--muted))}@media(min-width:40rem){.input-group__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.input-group:has([data-slot=input-group-prefix]) .input-group__input{border-top-left-radius:0;border-bottom-left-radius:0;padding-left:0}.input-group:has([data-slot=input-group-suffix]) .input-group__input{border-top-right-radius:0;border-bottom-right-radius:0;padding-right:0}.input-group__input:focus,.input-group__input:focus-visible{--tw-outline-style:none;outline-style:none}.input-group__input:-webkit-autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input:-webkit-autofill:hover{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input:-webkit-autofill:focus{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input:-webkit-autofill:active{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input:autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input[data-slot=input-group-textarea]{resize:vertical;min-height:38px}.input-group__prefix{border-top-left-radius:var(--field-radius,calc(var(--radius) * 1.5));border-bottom-left-radius:var(--field-radius,calc(var(--radius) * 1.5));height:100%;padding-inline:calc(var(--spacing) * 3);color:var(--field-placeholder,var(--muted));border-width:var(--border-width-field);border-color:var(--field-border);border-style:solid;border-right-color:var(--field-border);background-color:#0000;border-top:none;border-bottom:none;border-left:none;border-top-right-radius:0;border-bottom-right-radius:0;justify-content:center;align-items:center;display:flex}.input-group:has([data-slot=input-group-textarea]) .input-group__prefix{align-items:flex-start;padding-top:.5rem}.input-group__prefix{transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth)}.input-group__prefix:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-group__prefix:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-group__prefix:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input-group__prefix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-group__prefix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-group__prefix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.input-group__suffix{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--field-radius,calc(var(--radius) * 1.5));border-bottom-right-radius:var(--field-radius,calc(var(--radius) * 1.5));height:100%;padding-inline:calc(var(--spacing) * 3);color:var(--field-placeholder,var(--muted));border-width:var(--border-width-field);border-color:var(--field-border);border-style:solid;border-left-color:var(--field-border);background-color:#0000;border-top:none;border-bottom:none;border-right:none;justify-content:center;align-items:center;display:flex}.input-group:has([data-slot=input-group-textarea]) .input-group__suffix{align-items:flex-start;padding-top:.5rem}.input-group__suffix{transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth)}.input-group__suffix:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-group__suffix:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-group__suffix:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input-group__suffix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-group__suffix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-group__suffix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.input-group--secondary{--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);background-color:var(--input-group-bg);--input-group-bg:var(--default);--input-group-bg-hover:var(--default-hover);--input-group-bg-focus:var(--default)}@media(hover:hover){.input-group--secondary:hover:not(:focus-within),.input-group--secondary[data-hovered=true]:not([data-focus-within=true]){background-color:var(--input-group-bg-hover)}}.input-group--secondary:has([data-slot=input-group-input]:focus),.input-group--secondary:has([data-slot=input-group-textarea]:focus){background-color:var(--input-group-bg-focus)}.input-group--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input-group--secondary[data-invalid=true]:focus,.input-group--secondary[data-invalid=true]:focus-visible,.input-group--secondary[data-invalid=true][data-focused=true],.input-group--secondary[data-invalid=true][data-focus-visible=true],.input-group--secondary[data-invalid=true]:focus-within,.input-group--secondary[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.input-group--secondary[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--input-group-bg-focus)}.input-group--secondary [data-slot=input-group-input],.input-group--secondary [data-slot=input-group-textarea]{background-color:#0000}.input-group--full-width{width:100%}.number-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.number-field[data-invalid=true],.number-field[aria-invalid=true]) [data-slot=description]{display:none}.number-field [data-slot=label]{width:fit-content}.number-field__group{height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);outline-style:none;grid-template-columns:40px 1fr 40px;align-items:center;display:grid;overflow:hidden}.number-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.number-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.number-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.number-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.number-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.number-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.number-field__group:hover:not(:focus-within),.number-field__group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.number-field__group[data-focus-within=true],.number-field__group:focus-within{--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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.number-field__group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.number-field__group[data-invalid=true]:focus,.number-field__group[data-invalid=true]:focus-visible,.number-field__group[data-invalid=true][data-focused=true],.number-field__group[data-invalid=true][data-focus-visible=true],.number-field__group[data-invalid=true]:focus-within,.number-field__group[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.number-field__group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.number-field__group[data-disabled=true],.number-field__group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:-webkit-any(.number-field__group:has([data-slot=number-field-input]:-webkit-autofill),.number-field__group:has([data-slot=number-field-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}:is(.number-field__group:has([data-slot=number-field-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}.number-field__input{border-style:var(--tw-border-style);min-width:0;padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--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,);--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);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none}@media(min-width:40rem){.number-field__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.number-field__group:has([slot=decrement]) .number-field__input{border-top-left-radius:0;border-bottom-left-radius:0}.number-field__group:has([slot=increment]) .number-field__input{border-top-right-radius:0;border-bottom-right-radius:0}.number-field__input:focus,.number-field__input:focus-visible{--tw-outline-style:none;outline-style:none}.number-field__input:-webkit-autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__input:-webkit-autofill:hover{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__input:-webkit-autofill:focus{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__input:-webkit-autofill:active{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__input:autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__increment-button,.number-field__decrement-button{height:100%;width:calc(var(--spacing) * 10);color:var(--field-foreground,var(--foreground));--tw-outline-style:none;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth);background-color:#0000;border-style:solid;border-radius:0;outline-style:none;justify-content:center;align-items:center;display:flex}:is(.number-field__increment-button,.number-field__decrement-button):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.number-field__increment-button,.number-field__decrement-button):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.number-field__increment-button,.number-field__decrement-button):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.number-field__increment-button,.number-field__decrement-button):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.number-field__increment-button,.number-field__decrement-button):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.number-field__increment-button,.number-field__decrement-button):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.number-field__increment-button,.number-field__decrement-button{cursor:var(--cursor-interactive)}:is(.number-field__increment-button,.number-field__decrement-button):active,:is(.number-field__increment-button,.number-field__decrement-button)[data-pressed=true]{background-color:var(--field-foreground,var(--foreground))}@supports (color:color-mix(in lab,red,red)){:is(.number-field__increment-button,.number-field__decrement-button):active,:is(.number-field__increment-button,.number-field__decrement-button)[data-pressed=true]{background-color:color-mix(in oklab,var(--field-foreground,var(--foreground)) 10%,transparent)}}:is(.number-field__increment-button,.number-field__decrement-button):active,:is(.number-field__increment-button,.number-field__decrement-button)[data-pressed=true]{transform:scale(.97)}:is(.number-field__increment-button,.number-field__decrement-button):disabled,:is(.number-field__increment-button,.number-field__decrement-button)[data-disabled=true],:is(.number-field__increment-button,.number-field__decrement-button)[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.number-field__increment-button,.number-field__decrement-button) [data-slot=number-field-increment-button-icon],:is(.number-field__increment-button,.number-field__decrement-button) [data-slot=number-field-decrement-button-icon]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.number-field__increment-button{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--field-radius,calc(var(--radius) * 1.5));border-bottom-right-radius:var(--field-radius,calc(var(--radius) * 1.5));border-left-style:var(--tw-border-style);border-left-width:1px;border-color:var(--field-placeholder,var(--muted))}@supports (color:color-mix(in lab,red,red)){.number-field__increment-button{border-color:color-mix(in oklab,var(--field-placeholder,var(--muted)) 15%,transparent)}}.number-field__decrement-button{border-top-left-radius:var(--field-radius,calc(var(--radius) * 1.5));border-bottom-left-radius:var(--field-radius,calc(var(--radius) * 1.5));border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--field-placeholder,var(--muted));border-top-right-radius:0;border-bottom-right-radius:0}@supports (color:color-mix(in lab,red,red)){.number-field__decrement-button{border-color:color-mix(in oklab,var(--field-placeholder,var(--muted)) 15%,transparent)}}.number-field--secondary .number-field__group{--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);background-color:var(--number-field-group-bg);--number-field-group-bg:var(--default);--number-field-group-bg-hover:var(--default-hover);--number-field-group-bg-focus:var(--default)}@media(hover:hover){.number-field--secondary .number-field__group:hover:not(:focus-within),.number-field--secondary .number-field__group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--number-field-group-bg-hover)}}.number-field--secondary .number-field__group:focus-within,.number-field--secondary .number-field__group[data-focus-within=true]{background-color:var(--number-field-group-bg-focus)}.number-field--secondary .number-field__group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.number-field--secondary .number-field__group[data-invalid=true]:focus,.number-field--secondary .number-field__group[data-invalid=true]:focus-visible,.number-field--secondary .number-field__group[data-invalid=true][data-focused=true],.number-field--secondary .number-field__group[data-invalid=true][data-focus-visible=true],.number-field--secondary .number-field__group[data-invalid=true]:focus-within,.number-field--secondary .number-field__group[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.number-field--secondary .number-field__group[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--number-field-group-bg-focus)}.number-field--secondary .number-field__group [data-slot=number-field-input]{background-color:#0000}.number-field--full-width,.number-field__group--full-width{width:100%}.radio-group{flex-direction:column;display:flex}.radio-group[data-orientation=vertical] [data-slot=radio]{margin-top:calc(var(--spacing) * 4)}.radio-group[data-orientation=horizontal]{gap:calc(var(--spacing) * 4);flex-flow:wrap}.radio-group--secondary .radio__control{--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);background-color:var(--radio-control-bg);--radio-control-bg:var(--default);--radio-control-bg-hover:var(--default-hover)}.radio:has([data-slot=radio-content][data-hovered=true]) :is(.radio-group--secondary .radio__control),.radio [data-slot=radio-content][data-hovered=true] :is(.radio-group--secondary .radio__control){border-color:var(--field-border-hover)}.radio:not([data-selected]):not(:has(input:checked)) :is(.radio-group--secondary .radio__control) .radio__indicator:empty:before{background-color:var(--radio-control-bg)}.radio:has([data-slot=radio-content][data-hovered=true]):not([data-selected]):not(:has(input:checked)) :is(.radio-group--secondary .radio__control) .radio__indicator:empty:before{background-color:var(--radio-control-bg-hover)}.radio{align-items:flex-start;gap:var(--spacing);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);outline-style:none;flex-direction:column;display:flex}.radio [data-slot=label]{-webkit-user-select:none;user-select:none}.radio .radio__content [data-slot=label]{cursor:var(--cursor-interactive)}.radio>[data-slot=description],.radio>[data-slot=field-error]{cursor:default;width:100%;min-width:0;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));text-wrap:wrap;overflow-wrap:break-word;color:var(--muted);-webkit-user-select:none;user-select:none;padding-inline-start:calc(var(--spacing) * 7)}.radio:disabled,.radio[data-disabled=true],.radio[aria-disabled=true],:is(.radio:disabled,.radio[data-disabled=true],.radio[aria-disabled=true]) [data-slot=description],:is(.radio:disabled,.radio[data-disabled=true],.radio[aria-disabled=true]) [data-slot=field-error]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.radio__content{cursor:inherit;align-items:center;gap:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex}.radio__control{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1);border-style:var(--tw-border-style);border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border,var(--border));background-color:var(--field-background,var(--default));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;transition:background-color .2s var(--ease-out),border-color .2s var(--ease-out),transform .1s var(--ease-out);outline-style:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.radio__control:is([data-reduce-motion=true],[data-reduce-motion=true] *),.radio__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.radio__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.radio__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.radio__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.radio__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.radio__control{cursor:var(--cursor-interactive)}.radio:has([data-slot=radio-content][data-focus-visible=true]) .radio__control,.radio [data-slot=radio-content][data-focus-visible=true] .radio__control{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.radio:has([data-slot=radio-content][data-hovered=true]) .radio__control,.radio [data-slot=radio-content][data-hovered=true] .radio__control{border-color:var(--field-border-hover)}.radio:has([data-slot=radio-content][data-hovered=true]):not([data-selected]):not(:has(input:checked)) .radio__control .radio__indicator:empty:before{background-color:var(--field-hover)}.radio:has([data-slot=radio-content][data-pressed=true]) .radio__control,.radio [data-slot=radio-content][data-pressed=true] .radio__control{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.radio[data-selected] .radio__control,.radio:has([data-slot=radio-content][aria-checked=true]) .radio__control,.radio:has(input:checked) .radio__control{background-color:var(--accent);border-color:#0000}.radio[data-selected]:has([data-slot=radio-content][data-pressed=true]) .radio__control,.radio:has([data-slot=radio-content][data-pressed=true][aria-checked=true]) .radio__control,.radio:has(input:checked):has([data-slot=radio-content][data-pressed=true]) .radio__control{background-color:var(--accent-hover)}.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control):focus,:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control):focus-visible,:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control)[data-focused=true],:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control)[data-focus-visible=true],:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control):focus-within,:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control)[data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control):focus,:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control):focus-visible,:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control)[data-focused=true],:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control)[data-focus-visible=true],:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control):focus-within,:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control)[data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.radio__indicator{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.radio__indicator:empty:before{content:"";border-radius:calc(var(--radius) * 1);background-color:var(--field-background,var(--default));width:100%;height:100%;transition:scale .2s var(--ease-out),background-color .2s var(--ease-out);scale:1}@media(prefers-reduced-motion:reduce){.radio__indicator:empty:before:not(:is()){transition-property:none}}.radio[data-selected] .radio__indicator:empty:before,.radio:has([data-slot=radio-content][aria-checked=true]) .radio__indicator:empty:before,.radio:has(input:checked) .radio__indicator:empty:before{background-color:var(--accent-foreground);scale:.4286}.radio[data-selected]:has([data-slot=radio-content][data-pressed=true]) .radio__indicator:empty:before,.radio:has([data-slot=radio-content][data-pressed=true][aria-checked=true]) .radio__indicator:empty:before,.radio:has(input:checked):has([data-slot=radio-content][data-pressed=true]) .radio__indicator:empty:before{scale:.5714}.radio--disabled{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.textfield{gap:var(--spacing);flex-direction:column;display:flex}:is(.textfield[data-invalid=true],.textfield[aria-invalid=true]) [data-slot=description]{display:none}.textfield--full-width,.textfield--full-width [data-slot=input],.textfield--full-width [data-slot=textarea]{width:100%}.search-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.search-field[data-invalid=true],.search-field[aria-invalid=true]) [data-slot=description]{display:none}.search-field [data-slot=label]{width:fit-content}.search-field[data-empty=true] [data-slot=search-field-clear-button]{pointer-events:none;opacity:0}.search-field__group{height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);outline-style:none;align-items:center;display:inline-flex;position:relative;overflow:hidden}.search-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.search-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.search-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.search-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.search-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.search-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.search-field__group:hover:not(:focus-within),.search-field__group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.search-field__group[data-focus-within=true],.search-field__group:focus-within{--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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;outline-style:none}.search-field__group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.search-field__group[data-invalid=true]:focus,.search-field__group[data-invalid=true]:focus-visible,.search-field__group[data-invalid=true][data-focused=true],.search-field__group[data-invalid=true][data-focus-visible=true],.search-field__group[data-invalid=true]:focus-within,.search-field__group[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.search-field__group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.search-field__group[data-disabled=true],.search-field__group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:-webkit-any(.search-field__group:has([data-slot=search-field-input]:-webkit-autofill),.search-field__group:has([data-slot=search-field-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}:is(.search-field__group:has([data-slot=search-field-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}.search-field__input{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--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);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none;flex:1}@media(min-width:40rem){.search-field__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.search-field__input::-webkit-search-cancel-button{-webkit-appearance:none;-moz-appearance:none;appearance:none}.search-field__input::-webkit-search-decoration{-webkit-appearance:none;-moz-appearance:none;appearance:none}.search-field__group:has([data-slot=search-field-search-icon]) .search-field__input{padding-left:calc(var(--spacing) * 2);border-top-left-radius:0;border-bottom-left-radius:0}.search-field__group:has([slot=clear]) .search-field__input{padding-right:calc(var(--spacing) * 2);border-top-right-radius:0;border-bottom-right-radius:0}.search-field__input:focus,.search-field__input:focus-visible{--tw-outline-style:none;outline-style:none}.search-field__input:-webkit-autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__input:-webkit-autofill:hover{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__input:-webkit-autofill:focus{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__input:-webkit-autofill:active{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__input:autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__search-icon{pointer-events:none;color:var(--field-placeholder,var(--muted));margin-right:0;margin-left:calc(var(--spacing) * 3);width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);flex-shrink:0}.search-field__clear-button{margin-right:calc(var(--spacing) * 2);width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);flex-shrink:0}.search-field__clear-button [data-slot=close-button-icon]{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.search-field--secondary .search-field__group{--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);background-color:var(--search-field-group-bg);--search-field-group-bg:var(--default);--search-field-group-bg-hover:var(--default-hover);--search-field-group-bg-focus:var(--default)}@media(hover:hover){.search-field--secondary .search-field__group:hover:not(:focus-within),.search-field--secondary .search-field__group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--search-field-group-bg-hover)}}.search-field--secondary .search-field__group:focus-within,.search-field--secondary .search-field__group[data-focus-within=true]{background-color:var(--search-field-group-bg-focus)}.search-field--secondary .search-field__group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.search-field--secondary .search-field__group[data-invalid=true]:focus,.search-field--secondary .search-field__group[data-invalid=true]:focus-visible,.search-field--secondary .search-field__group[data-invalid=true][data-focused=true],.search-field--secondary .search-field__group[data-invalid=true][data-focus-visible=true],.search-field--secondary .search-field__group[data-invalid=true]:focus-within,.search-field--secondary .search-field__group[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.search-field--secondary .search-field__group[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--search-field-group-bg-focus)}.search-field--secondary .search-field__group [data-slot=search-field-input]{background-color:#0000}.search-field--full-width,.search-field__group--full-width{width:100%}.textarea{border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;outline-style:none}.textarea::placeholder{color:var(--field-placeholder,var(--muted))}@media(min-width:40rem){.textarea{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.textarea{border-width:var(--border-width-field);border-color:var(--field-border);min-height:38px;transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out)}.textarea:is([data-reduce-motion=true],[data-reduce-motion=true] *),.textarea:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.textarea:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.textarea:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.textarea:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.textarea:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.textarea:hover:not(:focus):not(:focus-visible),.textarea[data-hovered=true]:not([data-focused=true]):not([data-focus-visible=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.textarea:focus,.textarea[data-focused=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.textarea[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.textarea[data-invalid=true]:focus,.textarea[data-invalid=true]:focus-visible,.textarea[data-invalid=true][data-focused=true],.textarea[data-invalid=true][data-focus-visible=true],.textarea[data-invalid=true]:focus-within,.textarea[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.textarea[data-invalid=true]{background-color:var(--field-focus)}.textarea:disabled,.textarea[data-disabled=true],.textarea[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.textarea--secondary{--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);background-color:var(--textarea-bg);--textarea-bg:var(--default);--textarea-bg-hover:var(--default-hover);--textarea-bg-focus:var(--default)}@media(hover:hover){.textarea--secondary:hover:not(:focus):not(:focus-visible),.textarea--secondary[data-hovered=true]:not([data-focused=true]):not([data-focus-visible=true]){background-color:var(--textarea-bg-hover)}}.textarea--secondary:focus,.textarea--secondary[data-focused=true]{background-color:var(--textarea-bg-focus)}.textarea--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.textarea--secondary[data-invalid=true]:focus,.textarea--secondary[data-invalid=true]:focus-visible,.textarea--secondary[data-invalid=true][data-focused=true],.textarea--secondary[data-invalid=true][data-focus-visible=true],.textarea--secondary[data-invalid=true]:focus-within,.textarea--secondary[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.textarea--secondary[data-invalid=true]{background-color:var(--textarea-bg-focus)}.textarea--full-width{width:100%}.calendar{width:calc(var(--spacing) * 63);max-width:calc(var(--spacing) * 63);container-type:inline-size}.calendar--week-view .calendar__cell,.calendar--day-view .calendar__cell{aspect-ratio:1;place-self:center;width:100%;height:auto}.calendar--day-view .calendar__grid{flex-direction:column;display:flex}.calendar--day-view .calendar__grid-header{grid-template-columns:repeat(7,1fr);width:100%;display:grid}.calendar--day-view .calendar__grid-header>tr{display:contents}.calendar--day-view .calendar__grid-body{margin-top:var(--spacing);grid-template-columns:repeat(7,1fr);width:100%;display:grid}.calendar--day-view .calendar__grid-body>tr{display:contents}.calendar--day-view .calendar__grid-body>tr:first-child>td{margin-top:0}.calendar__header{padding-inline:calc(var(--spacing) * .5);padding-bottom:calc(var(--spacing) * 4);justify-content:space-between;align-items:center;display:flex}.calendar__header:has(.calendar-year-picker__trigger[data-open=true]) .calendar__nav-button{pointer-events:none;opacity:0}.calendar__heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);flex:1}.calendar__nav-button{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6);border-radius:calc(var(--radius) * 2);color:var(--accent-soft-foreground);will-change:scale;transition:transform .25s var(--ease-out),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out),opacity .15s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);justify-content:center;align-items:center;display:flex}.calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar__nav-button{cursor:var(--cursor-interactive)}@media(hover:hover){.calendar__nav-button:hover,.calendar__nav-button[data-hovered=true]{background-color:var(--default);color:var(--accent-soft-foreground)}}.calendar__nav-button:active,.calendar__nav-button[data-pressed=true]{transform:scale(.95)}.calendar__nav-button:focus-visible,.calendar__nav-button[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.calendar__nav-button:disabled,.calendar__nav-button[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.calendar__nav-button-icon{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.calendar__grid{grid-template-columns:repeat(7,1fr);width:100%;display:grid}.calendar__grid[aria-readonly=true] .calendar__cell{pointer-events:none}.calendar__grid-header,.calendar__grid-header>tr,.calendar__grid-body,.calendar__grid-body>tr{display:contents}.calendar__grid-body>tr:first-child>td{margin-top:var(--spacing)}.calendar__grid-row{display:contents}.calendar__header-cell{padding-bottom:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);justify-content:center;align-items:center;display:flex}.calendar__cell{aspect-ratio:1;border-radius:calc(var(--radius) * 3);text-align:center;width:100%;height:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;will-change:scale;transition:transform .25s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);outline-style:none;justify-content:center;align-items:center;display:flex;position:relative}.calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar__cell{cursor:var(--cursor-interactive)}.calendar__cell:focus-visible:not(:focus),.calendar__cell[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.calendar__cell[data-today=true]{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}@media(hover:hover){.calendar__cell[data-today=true]:hover:not([data-selected=true]),.calendar__cell[data-today=true][data-hovered=true]:not([data-selected=true]){background-color:var(--accent-soft-hover)}}.calendar__cell[data-selected=true]{background-color:var(--accent);color:var(--accent-foreground)}.calendar__cell:active,.calendar__cell[data-pressed=true]{background-color:var(--default);transform:scale(.95)}:is(.calendar__cell:active,.calendar__cell[data-pressed=true])[data-selected=true]{background-color:var(--accent-hover)}@media(hover:hover){.calendar__cell:hover:not([data-selected=true]),.calendar__cell[data-hovered=true]:not([data-selected=true]){background-color:var(--default)}}.calendar__cell[data-outside-month=true]{color:var(--muted);opacity:.5}.calendar__cell[data-selected=true][data-outside-month=true]{background-color:var(--default)}.calendar__cell[data-unavailable=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.calendar__cell:disabled:not([data-outside-month=true]),.calendar__cell[data-disabled=true]:not([data-outside-month=true]){opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none;text-decoration:line-through}.calendar__cell-indicator{bottom:var(--spacing);--tw-translate-x: -50% ;width:3px;height:3px;translate:var(--tw-translate-x) var(--tw-translate-y);border-radius:calc(var(--radius) * .25);background-color:var(--muted);position:absolute;left:50%}[data-selected=true]>.calendar__cell-indicator{background-color:var(--accent-foreground)}.range-calendar{width:calc(var(--spacing) * 63);max-width:calc(var(--spacing) * 63);container-type:inline-size}.range-calendar--week-view .range-calendar__cell,.range-calendar--day-view .range-calendar__cell{aspect-ratio:1;place-self:center;width:100%;height:auto}.range-calendar--day-view .range-calendar__grid{flex-direction:column;display:flex}.range-calendar--day-view .range-calendar__grid-header{grid-template-columns:repeat(7,1fr);width:100%;display:grid}.range-calendar--day-view .range-calendar__grid-header>tr{display:contents}.range-calendar--day-view .range-calendar__grid-body{margin-top:var(--spacing);grid-template-columns:repeat(7,1fr);width:100%;display:grid}.range-calendar--day-view .range-calendar__grid-body>tr{display:contents}.range-calendar--day-view .range-calendar__grid-body>tr:first-child>td{margin-top:0}.range-calendar__header{padding-inline:calc(var(--spacing) * .5);padding-bottom:calc(var(--spacing) * 4);justify-content:space-between;align-items:center;display:flex}.range-calendar__header:has(.calendar-year-picker__trigger[data-open=true]) .range-calendar__nav-button{pointer-events:none;opacity:0}.range-calendar__heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);flex:1}.range-calendar__nav-button{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6);border-radius:calc(var(--radius) * 1.5);color:var(--accent-soft-foreground);will-change:scale;transition:transform .25s var(--ease-out),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out),opacity .15s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);justify-content:center;align-items:center;display:flex}.range-calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.range-calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.range-calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.range-calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.range-calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.range-calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.range-calendar__nav-button{cursor:var(--cursor-interactive)}@media(hover:hover){.range-calendar__nav-button:hover,.range-calendar__nav-button[data-hovered=true]{background-color:var(--default);color:var(--accent-soft-foreground)}}.range-calendar__nav-button:active,.range-calendar__nav-button[data-pressed=true]{transform:scale(.95)}.range-calendar__nav-button:focus-visible,.range-calendar__nav-button[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.range-calendar__nav-button:disabled,.range-calendar__nav-button[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.range-calendar__nav-button-icon{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.range-calendar__grid{grid-template-columns:repeat(7,1fr);width:100%;display:grid}.range-calendar__grid[aria-readonly=true] .range-calendar__cell{pointer-events:none}.range-calendar__grid-header,.range-calendar__grid-header>tr,.range-calendar__grid-body,.range-calendar__grid-body>tr{display:contents}.range-calendar__grid-body>tr:first-child>td{margin-top:var(--spacing)}.range-calendar__grid-row{display:contents}.range-calendar__header-cell{padding-bottom:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);justify-content:center;align-items:center;display:flex}.range-calendar__cell{z-index:1;border-radius:calc(var(--radius) * 3);--tw-outline-style:none;cursor:var(--cursor-interactive);will-change:background-color,border-color;transition:box-shadow .1s var(--ease-out),border-color .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);outline-style:none;margin-block:2px;margin-inline:0;padding:0;position:relative}.range-calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *),.range-calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.range-calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.range-calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.range-calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.range-calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.range-calendar__cell .range-calendar__cell-button{aspect-ratio:1;border-radius:calc(var(--radius) * 3);width:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);-webkit-tap-highlight-color:transparent;will-change:scale;transition:scale .2s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);justify-content:center;align-items:center;display:flex}.range-calendar__cell .range-calendar__cell-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.range-calendar__cell .range-calendar__cell-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.range-calendar__cell .range-calendar__cell-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.range-calendar__cell .range-calendar__cell-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.range-calendar__cell .range-calendar__cell-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.range-calendar__cell .range-calendar__cell-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.range-calendar__cell:focus-visible:not(:focus),.range-calendar__cell[data-focus-visible=true]{z-index:2}:is(.range-calendar__cell:focus-visible:not(:focus),.range-calendar__cell[data-focus-visible=true]) .range-calendar__cell-button{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.range-calendar__cell[data-today=true] .range-calendar__cell-button{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}@media(hover:hover){:is(.range-calendar__cell[data-today=true]:hover:not([data-selected=true]),.range-calendar__cell[data-today=true][data-hovered=true]:not([data-selected=true])) .range-calendar__cell-button{background-color:var(--accent-soft-hover)}}.range-calendar__cell[data-selected=true]:not([data-outside-month=true]){background-color:var(--accent-soft);border-radius:0}.range-calendar__cell[data-selected=true]:is(td:first-child>*,[aria-disabled]+td>*){border-start-start-radius:calc(var(--radius) * 1);border-end-start-radius:calc(var(--radius) * 1)}.range-calendar__cell[data-selected=true]:is(td:first-child>*,[aria-disabled]+td>*)[data-selection-start=true]{border-start-start-radius:calc(var(--radius) * 3);border-end-start-radius:calc(var(--radius) * 3)}.range-calendar__cell[data-selected=true]:is(td:last-child>*,td:has(+[aria-disabled])>*){border-start-end-radius:calc(var(--radius) * 1);border-end-end-radius:calc(var(--radius) * 1)}.range-calendar__cell[data-selected=true]:is(td:last-child>*,td:has(+[aria-disabled])>*)[data-selection-end=true]{border-start-end-radius:calc(var(--radius) * 3);border-end-end-radius:calc(var(--radius) * 3)}.range-calendar__cell[data-selection-start=true]:not([data-outside-month=true]),.range-calendar__cell[data-selection-end=true]:not([data-outside-month=true]){z-index:2}:is(.range-calendar__cell[data-selection-start=true]:not([data-outside-month=true]),.range-calendar__cell[data-selection-end=true]:not([data-outside-month=true])) .range-calendar__cell-button{background-color:var(--accent);color:var(--accent-foreground)}.range-calendar__cell[data-selection-start=true]:not([data-outside-month=true]){border-top-left-radius:calc(var(--radius) * 3);border-bottom-left-radius:calc(var(--radius) * 3)}.range-calendar__cell[data-selection-end=true]:not([data-outside-month=true]){border-top-right-radius:calc(var(--radius) * 3);border-bottom-right-radius:calc(var(--radius) * 3)}:is(.range-calendar__cell:active,.range-calendar__cell[data-pressed=true]) .range-calendar__cell-button{scale:.9}:is(:is(.range-calendar__cell:active,.range-calendar__cell[data-pressed=true])[data-selection-start=true],:is(.range-calendar__cell:active,.range-calendar__cell[data-pressed=true])[data-selection-end=true]) .range-calendar__cell-button{background-color:var(--accent-hover)}@media(hover:hover){:is(.range-calendar__cell:hover:not([data-selected=true]),.range-calendar__cell[data-hovered=true]:not([data-selected=true])) .range-calendar__cell-button{background-color:var(--default)}}.range-calendar__cell[data-outside-month=true]{color:var(--muted);opacity:.5}.range-calendar__cell[data-selected=true][data-outside-month=true]:not([data-selection-start=true],[data-selection-end=true]){background-color:var(--default)}@supports (color:color-mix(in lab,red,red)){.range-calendar__cell[data-selected=true][data-outside-month=true]:not([data-selection-start=true],[data-selection-end=true]){background-color:color-mix(in oklab,var(--default) 20%,transparent)}}.range-calendar__cell[data-unavailable=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.range-calendar__cell:disabled:not([data-outside-month=true]),.range-calendar__cell[data-disabled=true]:not([data-outside-month=true]){opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none;text-decoration:line-through}.range-calendar__grid-body td:has(>.range-calendar__cell[data-outside-month=true])+td>.range-calendar__cell[data-selected=true]{border-start-start-radius:calc(var(--radius) * 1);border-end-start-radius:calc(var(--radius) * 1)}.range-calendar__grid-body td:has(>.range-calendar__cell[data-outside-month=true])+td>.range-calendar__cell[data-selected=true][data-outside-month=true],.range-calendar__grid-body td:has(>.range-calendar__cell[data-outside-month=true])+td>.range-calendar__cell[data-selected=true][data-selection-start=true]{border-start-start-radius:calc(var(--radius) * 3);border-end-start-radius:calc(var(--radius) * 3)}.range-calendar__grid-body td:has(>.range-calendar__cell[data-selected=true]):has(+td>.range-calendar__cell[data-outside-month=true])>.range-calendar__cell[data-selected=true]{border-start-end-radius:calc(var(--radius) * 1);border-end-end-radius:calc(var(--radius) * 1)}.range-calendar__grid-body td:has(>.range-calendar__cell[data-selected=true]):has(+td>.range-calendar__cell[data-outside-month=true])>.range-calendar__cell[data-selected=true][data-outside-month=true],.range-calendar__grid-body td:has(>.range-calendar__cell[data-selected=true]):has(+td>.range-calendar__cell[data-outside-month=true])>.range-calendar__cell[data-selected=true][data-selection-end=true]{border-start-end-radius:calc(var(--radius) * 3);border-end-end-radius:calc(var(--radius) * 3)}.range-calendar__cell-indicator{bottom:var(--spacing);--tw-translate-x: -50% ;width:3px;height:3px;translate:var(--tw-translate-x) var(--tw-translate-y);border-radius:calc(var(--radius) * .25);background-color:var(--muted);position:absolute;left:50%}[data-selected=true]>.range-calendar__cell-indicator{background-color:var(--accent-foreground)}.calendar:has(.calendar-year-picker__year-grid),.range-calendar:has(.calendar-year-picker__year-grid){position:relative}.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]{will-change:opacity;transition:opacity .15s var(--ease-out),visibility 0s linear}:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]{pointer-events:none;opacity:0;visibility:hidden;transition:opacity .15s var(--ease-out),visibility 0s linear .15s}:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__trigger{justify-content:flex-start;align-items:center;gap:var(--spacing);border-radius:calc(var(--radius) * 1);--tw-outline-style:none;cursor:var(--cursor-interactive);touch-action:manipulation;outline-style:none;flex:1;display:flex}.calendar-year-picker__trigger: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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.calendar-year-picker__trigger-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition:color .15s var(--ease-out)}.calendar-year-picker__trigger-heading:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar-year-picker__trigger-heading:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar-year-picker__trigger-heading:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar-year-picker__trigger-heading:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar-year-picker__trigger-heading:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar-year-picker__trigger-heading:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__trigger-indicator{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--accent-soft-foreground);transition:transform .15s var(--ease-out)}.calendar-year-picker__trigger-indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar-year-picker__trigger-indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar-year-picker__trigger-indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar-year-picker__trigger-indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar-year-picker__trigger-indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar-year-picker__trigger-indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__trigger[data-open=true] .calendar-year-picker__trigger-indicator{transform:rotate(90deg)}.calendar-year-picker__trigger[data-open=true] .calendar-year-picker__trigger-heading{color:var(--accent-soft-foreground)}.calendar-year-picker__year-grid{pointer-events:none;scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);align-content:flex-start;gap:var(--spacing);padding:var(--spacing);opacity:0;will-change:opacity;grid-template-columns:repeat(3,1fr);display:grid;position:absolute;left:0;right:0;overflow-y:auto}.calendar-year-picker__year-grid[data-open=true]{pointer-events:auto;opacity:1;transition:opacity .2s var(--ease-out) 50ms}.calendar-year-picker__year-grid[data-open=true]:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar-year-picker__year-grid[data-open=true]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar-year-picker__year-grid[data-open=true]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar-year-picker__year-grid[data-open=true]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar-year-picker__year-grid[data-open=true]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar-year-picker__year-grid[data-open=true]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__year-cell{height:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 3);padding-inline:calc(var(--spacing) * 2.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;transition:color .1s var(--ease-smooth),scale .1s var(--ease-smooth),opacity .1s var(--ease-smooth),background-color .1s var(--ease-smooth),box-shadow .1s var(--ease-out);transform-origin:50%;transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);outline-style:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.calendar-year-picker__year-cell:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar-year-picker__year-cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar-year-picker__year-cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar-year-picker__year-cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar-year-picker__year-cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar-year-picker__year-cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__year-cell{cursor:var(--cursor-interactive)}@media(hover:hover)and (pointer:fine){.calendar-year-picker__year-cell:is(:hover,[data-hovered=true]):not([data-selected=true]){background-color:var(--default);color:var(--default-foreground)}}.calendar-year-picker__year-cell[data-selected=true],.calendar-year-picker__year-cell[aria-selected=true]{background-color:var(--accent);color:var(--accent-foreground)}@media(hover:hover)and (pointer:fine){:is(.calendar-year-picker__year-cell[data-selected=true],.calendar-year-picker__year-cell[aria-selected=true]):is(:hover,[data-hovered=true]){background-color:var(--accent-hover)}}.calendar-year-picker__year-cell: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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.date-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.date-field[data-invalid=true],.date-field[aria-invalid=true]) [data-slot=description]{display:none}.date-field [data-slot=label]{width:fit-content}.date-field--full-width{width:100%}.time-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.time-field[data-invalid=true],.time-field[aria-invalid=true]) [data-slot=description]{display:none}.time-field [data-slot=label]{width:fit-content}.time-field--full-width{width:100%}.date-input-group{height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);outline-style:none;align-items:center;display:inline-flex;overflow:hidden}.date-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.date-input-group:hover:not(:focus-within),.date-input-group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.date-input-group[data-focus-within=true]:not(:has([data-slot=date-picker-trigger]:focus,[data-slot=date-picker-trigger][data-focused=true],[data-slot=date-range-picker-trigger]:focus,[data-slot=date-range-picker-trigger][data-focused=true])),.date-input-group:focus-within:not(:has([data-slot=date-picker-trigger]:focus,[data-slot=date-picker-trigger][data-focused=true],[data-slot=date-range-picker-trigger]:focus,[data-slot=date-range-picker-trigger][data-focused=true])){--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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;outline-style:none}.date-input-group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.date-input-group[data-invalid=true]:focus,.date-input-group[data-invalid=true]:focus-visible,.date-input-group[data-invalid=true][data-focused=true],.date-input-group[data-invalid=true][data-focus-visible=true],.date-input-group[data-invalid=true]:focus-within,.date-input-group[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.date-input-group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.date-input-group[data-disabled=true],.date-input-group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.date-input-group__input{cursor:text;border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--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);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none;flex:1;align-items:center;gap:1px;display:flex}@media(min-width:40rem){.date-input-group__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.date-input-group:has([data-slot=date-input-group-prefix]) .date-input-group__input{padding-left:calc(var(--spacing) * 2);border-top-left-radius:0;border-bottom-left-radius:0}.date-input-group:has([data-slot=date-input-group-suffix]) .date-input-group__input{padding-right:calc(var(--spacing) * 2);border-top-right-radius:0;border-bottom-right-radius:0}.date-input-group:has(.date-range-picker__range-separator) .date-input-group__input[slot=start]{flex:none;padding-right:0}.date-input-group:has(.date-range-picker__range-separator) .date-input-group__input[slot=end]{padding-left:0}.date-input-group__input:focus,.date-input-group__input:focus-visible{--tw-outline-style:none;outline-style:none}.date-input-group__input-container{scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;flex:1;align-items:center;width:fit-content;display:flex;overflow:auto clip}.date-input-group__segment{border-radius:calc(var(--radius) * .75);padding-inline:calc(var(--spacing) * .5);text-align:end;text-wrap:nowrap;--tw-outline-style:none;outline-style:none;display:inline-block}.date-input-group__segment[data-type=literal]{color:var(--muted);padding:0}.date-input-group__segment[data-placeholder=true]{color:var(--field-placeholder,var(--muted))}.date-input-group__segment:focus,.date-input-group__segment[data-focused=true]{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}.date-input-group__segment[data-disabled=true]{opacity:.5}.date-input-group__segment[data-invalid=true]{color:var(--danger)}.date-input-group__segment[data-invalid=true]:focus,.date-input-group__segment[data-invalid=true][data-focused=true]{background-color:var(--danger-soft);color:var(--danger-soft-foreground)}.date-input-group__prefix{pointer-events:none;color:var(--field-placeholder,var(--muted));margin-right:0;margin-left:calc(var(--spacing) * 3);flex-shrink:0;align-items:center;display:flex}.date-input-group__suffix{pointer-events:none;color:var(--field-placeholder,var(--muted));margin-right:calc(var(--spacing) * 3);flex-shrink:0;align-items:center;display:flex}.date-input-group--secondary{--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);background-color:var(--date-input-group-bg);--date-input-group-bg:var(--default);--date-input-group-bg-hover:var(--default-hover);--date-input-group-bg-focus:var(--default)}@media(hover:hover){.date-input-group--secondary:hover:not(:focus-within),.date-input-group--secondary[data-hovered=true]:not([data-focus-within=true]){background-color:var(--date-input-group-bg-hover)}}.date-input-group--secondary:focus-within,.date-input-group--secondary[data-focus-within=true]{background-color:var(--date-input-group-bg-focus)}.date-input-group--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.date-input-group--secondary[data-invalid=true]:focus,.date-input-group--secondary[data-invalid=true]:focus-visible,.date-input-group--secondary[data-invalid=true][data-focused=true],.date-input-group--secondary[data-invalid=true][data-focus-visible=true],.date-input-group--secondary[data-invalid=true]:focus-within,.date-input-group--secondary[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.date-input-group--secondary[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--date-input-group-bg-focus)}.date-input-group--secondary [data-slot=date-input-group-input]{background-color:#0000}.date-input-group--full-width{width:100%}.date-picker{gap:var(--spacing);flex-direction:column;display:inline-flex}.date-picker .date-input-group__suffix,.date-picker .date-input-group__prefix{pointer-events:auto}.date-picker__trigger{border-radius:var(--field-radius,calc(var(--radius) * 1.5));width:100%;padding:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:box-shadow .15s var(--ease-out);align-items:center;display:inline-flex}.date-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.date-picker__trigger:focus-visible:not(:focus),.date-picker__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.date-picker__trigger:disabled,.date-picker__trigger[data-disabled=true],.date-picker__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.date-picker__trigger-indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);color:var(--field-placeholder,var(--muted));justify-content:center;align-items:center;display:inline-flex}.date-picker__popover{min-width:var(--trigger-width);transform-origin:var(--trigger-anchor-point);scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;overscroll-behavior:contain;background-color:var(--overlay);padding:calc(var(--spacing) * 3);overflow-y:auto}.date-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.date-picker__popover{box-shadow:var(--shadow-overlay);border-radius:min(32px,calc(var(--radius) * 2.5))}.date-picker__popover:focus-visible:not(:focus),.date-picker__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.date-picker__popover[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.date-picker__popover[data-entering=true][data-placement^=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.date-picker__popover[data-entering=true][data-placement^=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.date-picker__popover[data-entering=true][data-placement^=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.date-picker__popover[data-entering=true][data-placement^=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.date-picker__popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.date-picker__popover[data-exiting=true],.date-picker__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.date-range-picker{gap:var(--spacing);flex-direction:column;display:inline-flex}.date-range-picker .date-input-group__suffix,.date-range-picker .date-input-group__prefix{pointer-events:auto}.date-range-picker__trigger{border-radius:var(--field-radius,calc(var(--radius) * 1.5));width:100%;padding:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:box-shadow .15s var(--ease-out);align-items:center;display:inline-flex}.date-range-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-range-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-range-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-range-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-range-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-range-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.date-range-picker__trigger:focus-visible:not(:focus),.date-range-picker__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.date-range-picker__trigger:disabled,.date-range-picker__trigger[data-disabled=true],.date-range-picker__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.date-range-picker__trigger-indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);color:var(--field-placeholder,var(--muted));justify-content:center;align-items:center;display:inline-flex}.date-range-picker__range-separator{padding-inline:var(--spacing);color:var(--field-placeholder,var(--muted));-webkit-user-select:none;user-select:none}.date-range-picker__popover{min-width:var(--trigger-width);transform-origin:var(--trigger-anchor-point);scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;overscroll-behavior:contain;background-color:var(--overlay);padding:calc(var(--spacing) * 3);overflow-y:auto}.date-range-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-range-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-range-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-range-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-range-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-range-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.date-range-picker__popover{box-shadow:var(--shadow-overlay);border-radius:min(32px,calc(var(--radius) * 2.5))}.date-range-picker__popover:focus-visible:not(:focus),.date-range-picker__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.date-range-picker__popover[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.date-range-picker__popover[data-entering=true][data-placement^=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.date-range-picker__popover[data-entering=true][data-placement^=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.date-range-picker__popover[data-entering=true][data-placement^=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.date-range-picker__popover[data-entering=true][data-placement^=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.date-range-picker__popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.date-range-picker__popover[data-exiting=true],.date-range-picker__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.card{gap:calc(var(--spacing) * 3);padding:calc(var(--spacing) * 4);--tw-shadow:var(--surface-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:min(32px,var(--radius-3xl));flex-direction:column;display:flex;position:relative;overflow:visible}.card__header{flex-direction:column;display:flex}.card__title{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.card__description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5);color:var(--muted)}.card__content{gap:var(--spacing);flex-direction:column;flex:1;display:flex}.card__footer{flex-direction:row;align-items:center;display:flex}.card--transparent{--tw-border-style: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);background-color:#0000;border-style:none}.card--default{background-color:var(--surface)}.card--secondary{background-color:var(--surface-secondary)}.card--tertiary{background-color:var(--surface-tertiary)}.header{width:100%;padding-inline:calc(var(--spacing) * 2);padding-top:calc(var(--spacing) * 1.5);padding-bottom:var(--spacing);text-align:left;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted)}.separator{border-radius:calc(var(--radius) * .5);border-top-style:var(--tw-border-style);border-top-width:0;border-bottom-style:var(--tw-border-style);background-color:var(--separator);border-bottom-width:0;flex-shrink:0;width:100%;height:1px}.separator--horizontal{width:100%;height:1px}.separator--vertical{height:auto;min-height:calc(var(--spacing) * 2);align-self:stretch;width:1px}.separator--default{background-color:var(--separator)}.separator--secondary{background-color:var(--separator-secondary)}.separator--tertiary{background-color:var(--separator-tertiary)}.separator__container{align-items:center;gap:calc(var(--spacing) * 3);display:flex}.separator__container--horizontal{flex-direction:row;width:100%}.separator__container--vertical{flex-direction:column;justify-content:center;height:100%}.separator__line{flex-grow:1;flex-shrink:0}.separator__content{text-align:center;white-space:nowrap;color:var(--muted);justify-content:center;align-items:center;display:inline-flex}.separator__content--horizontal,.separator__content--vertical{text-align:center}.surface{color:var(--foreground);position:relative}.surface--transparent{background-color:#0000}.surface--default{background-color:var(--surface);color:var(--surface-foreground)}.surface--secondary{background-color:var(--surface-secondary);color:var(--surface-secondary-foreground)}.surface--tertiary{background-color:var(--surface-tertiary);color:var(--surface-tertiary-foreground)}.avatar{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);border-radius:calc(var(--radius) * 3);background-color:var(--default);flex-shrink:0;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.avatar__fallback{background-color:var(--default);width:100%;height:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);justify-content:center;align-items:center;display:flex}.avatar__image{aspect-ratio:1;width:100%;height:100%;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;transition-duration:.25s;position:absolute;top:0;right:0;bottom:0;left:0}.avatar__image:is([data-reduce-motion=true],[data-reduce-motion=true] *),.avatar__image:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.avatar__image:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.avatar__image:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.avatar__image:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.avatar__image:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.avatar--sm{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 2)}.avatar--lg{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12);border-radius:calc(var(--radius) * 3)}.avatar--lg .avatar__fallback{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.avatar__fallback--accent{color:var(--accent-soft-foreground)}.avatar__fallback--default{color:var(--default-soft-foreground)}.avatar__fallback--success{color:var(--success-soft-foreground)}.avatar__fallback--warning{color:var(--warning-soft-foreground)}.avatar__fallback--danger{color:var(--danger-soft-foreground)}.avatar--soft{background-color:#0000}.avatar--soft .avatar__fallback--accent{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}.avatar--soft .avatar__fallback--success{background-color:var(--success-soft);color:var(--success-soft-foreground)}.avatar--soft .avatar__fallback--warning{background-color:var(--warning-soft);color:var(--warning-soft-foreground)}.avatar--soft .avatar__fallback--default{background-color:var(--default-soft);color:var(--default-soft-foreground)}.avatar--soft .avatar__fallback--danger{background-color:var(--danger-soft);color:var(--danger-soft-foreground)}.alert-dialog__trigger{cursor:var(--cursor-interactive);transition:transform .25s var(--ease-out-quart),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.alert-dialog__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.alert-dialog__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.alert-dialog__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.alert-dialog__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.alert-dialog__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.alert-dialog__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.alert-dialog__trigger:focus-visible:not(:focus),.alert-dialog__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.alert-dialog__trigger:disabled,.alert-dialog__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.alert-dialog__trigger:active,.alert-dialog__trigger[data-pressed=true]{transform:scale(.97)}.alert-dialog__backdrop{z-index:50;height:var(--visual-viewport-height);flex-direction:row;justify-content:center;align-items:center;width:100%;display:flex;position:fixed;top:0;right:0;bottom:0;left:0}.alert-dialog__backdrop[data-entering=true]{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);--tw-duration:.15s;--tw-ease:var(--ease-out);transition-duration:.15s;transition-timing-function:var(--ease-out);--tw-enter-opacity:0}.alert-dialog__backdrop[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out);--tw-exit-opacity:0}.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]{will-change:opacity}:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.alert-dialog__backdrop--transparent{background-color:#0000}.alert-dialog__backdrop--opaque{background-color:var(--backdrop)}.alert-dialog__backdrop--blur{background-color:var(--backdrop);--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.alert-dialog__container{height:var(--visual-viewport-height);width:100%;min-width:0;padding:calc(var(--spacing) * 4);flex-direction:column;flex:1;align-items:center;display:flex}@media(min-width:40rem){.alert-dialog__container{width:fit-content;padding:calc(var(--spacing) * 10)}}.alert-dialog__container{pointer-events:none}.alert-dialog__container[data-entering=true]{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);--tw-duration:.25s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-enter-opacity:0;--tw-enter-scale: 105% ;transition-duration:.25s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.alert-dialog__container[data-entering=true][data-placement=auto]{--tw-enter-translate-y:calc(1*var(--spacing))}@media(min-width:40rem){.alert-dialog__container[data-entering=true][data-placement=auto]{--tw-enter-translate-y: 0% }}.alert-dialog__container[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.alert-dialog__container[data-entering=true][data-placement=center]{--tw-enter-translate-y: -0% }.alert-dialog__container[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing))}.alert-dialog__container[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-exit-opacity:0;--tw-exit-scale:.95;transition-duration:.1s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]{will-change:opacity,transform}:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.alert-dialog__dialog{background-color:var(--overlay);--tw-shadow:var(--overlay-shadow);width:100%;min-height:0;max-height:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-radius:min(32px,var(--radius-3xl));padding:calc(var(--spacing) * 6);pointer-events:auto;outline-style:none;flex-direction:column;display:flex;position:relative;overflow:clip}.alert-dialog__dialog[data-placement=auto]{margin-top:auto}@media(min-width:40rem){.alert-dialog__dialog[data-placement=auto]{margin-block:auto}}.alert-dialog__dialog[data-placement=center]{margin-block:auto}.alert-dialog__dialog[data-placement=bottom]{margin-top:auto}.alert-dialog__dialog[data-placement=top]{margin-top:0}.alert-dialog__dialog--xs{max-width:var(--container-xs)}.alert-dialog__dialog--sm{max-width:var(--container-sm)}.alert-dialog__dialog--md{max-width:var(--container-md)}.alert-dialog__dialog--lg{max-width:var(--container-lg)}.alert-dialog__dialog--cover{width:100%;height:100%;min-height:100%}.alert-dialog__header{gap:calc(var(--spacing) * 3);flex-direction:column;margin-bottom:0;display:flex}.alert-dialog__header>.modal__icon{margin-bottom:0}.alert-dialog__heading{vertical-align:middle;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.alert-dialog__icon{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);border-radius:calc(var(--radius) * 3);-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.alert-dialog__icon [data-slot=alert-dialog-default-icon]{box-sizing:content-box;width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.alert-dialog__icon--default{background-color:var(--default);color:var(--foreground)}.alert-dialog__icon--accent{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}.alert-dialog__icon--success{background-color:var(--success-soft);color:var(--success-soft-foreground)}.alert-dialog__icon--warning{background-color:var(--warning-soft);color:var(--warning-soft-foreground)}.alert-dialog__icon--danger{background-color:var(--danger-soft);color:var(--danger-soft-foreground)}.alert-dialog__body{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);min-height:0;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1.43;color:var(--muted);overscroll-behavior:contain;-webkit-overflow-scrolling:touch;margin:-3px;flex:1;margin-block:0;padding:3px;line-height:1.43;overflow-y:auto}.alert-dialog__footer{justify-content:flex-end;align-items:center;gap:calc(var(--spacing) * 2);flex-direction:row;margin-top:0;display:flex}.alert-dialog__close-trigger{top:calc(var(--spacing) * 4);right:calc(var(--spacing) * 4);position:absolute}.alert-dialog__header+.alert-dialog__body{margin-top:calc(var(--spacing) * 2)}.alert-dialog__header+.alert-dialog__footer,.alert-dialog__body+.alert-dialog__footer{margin-top:calc(var(--spacing) * 5)}.drawer__trigger{cursor:var(--cursor-interactive);transition:transform .25s var(--ease-out-quart),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.drawer__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.drawer__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.drawer__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.drawer__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.drawer__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.drawer__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.drawer__trigger:focus-visible:not(:focus),.drawer__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.drawer__trigger:disabled,.drawer__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.drawer__trigger:active,.drawer__trigger[data-pressed=true]{transform:scale(.97)}.drawer__backdrop{z-index:50;height:var(--visual-viewport-height);opacity:1;width:100%;transition:opacity .25s cubic-bezier(.32,.72,0,1);position:fixed;top:0;right:0;bottom:0;left:0}.drawer__backdrop[data-entering=true]{opacity:0}.drawer__backdrop[data-exiting=true]{opacity:0;transition-duration:.2s;transition-timing-function:cubic-bezier(.32,.72,0,1)}.drawer__backdrop[data-exiting=true],.drawer__backdrop[data-entering=true]{will-change:opacity}@media(prefers-reduced-motion:reduce){.drawer__backdrop{transition:none}}.drawer__backdrop--transparent{background-color:#0000}.drawer__backdrop--opaque{background-color:var(--backdrop)}.drawer__backdrop--blur{background-color:var(--backdrop);--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.drawer__content{pointer-events:none;z-index:50;height:var(--visual-viewport-height);width:100%;min-width:0;display:flex;position:fixed;top:0;right:0;bottom:0;left:0}.drawer__content--bottom{align-items:flex-end}.drawer__content--top{align-items:flex-start}.drawer__content--left{justify-content:flex-start}.drawer__content--right{justify-content:flex-end}.drawer__dialog{background-color:var(--overlay);--tw-shadow:var(--overlay-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;padding:calc(var(--spacing) * 6);pointer-events:auto;--drawer-enter-duration:.25s;--drawer-exit-duration:.2s;--drawer-enter-ease:cubic-bezier(.32, .72, 0, 1);--drawer-exit-ease:cubic-bezier(.32, .72, 0, 1);will-change:translate;transition:translate var(--drawer-enter-duration) var(--drawer-enter-ease);outline-style:none;flex-direction:column;display:flex;position:relative}@media(prefers-reduced-motion:reduce){.drawer__dialog{transition:none}}.drawer__dialog[data-placement=bottom]{border-top-left-radius:min(32px,var(--radius-2xl));border-top-right-radius:min(32px,var(--radius-2xl));width:100%;max-height:85vh}.drawer__dialog[data-placement=top]{border-bottom-left-radius:min(32px,var(--radius-2xl));border-bottom-right-radius:min(32px,var(--radius-2xl));width:100%;max-height:85vh}.drawer__dialog[data-placement=left]{height:100%;width:calc(var(--spacing) * 80);border-radius:0;max-width:85vw}@media(min-width:40rem){.drawer__dialog[data-placement=left]{width:calc(var(--spacing) * 96)}}.drawer__dialog[data-placement=right]{height:100%;width:calc(var(--spacing) * 80);border-radius:0;max-width:85vw}@media(min-width:40rem){.drawer__dialog[data-placement=right]{width:calc(var(--spacing) * 96)}}[data-exiting=true] .drawer__dialog{transition-duration:var(--drawer-exit-duration);transition-timing-function:var(--drawer-exit-ease)}.drawer__content--left .drawer__dialog,.drawer__content--right .drawer__dialog,.drawer__content--top .drawer__dialog,.drawer__content--bottom .drawer__dialog{translate:0}.drawer__content--left[data-entering=true] .drawer__dialog,.drawer__content--left[data-exiting=true] .drawer__dialog{translate:-100%}.drawer__content--right[data-entering=true] .drawer__dialog,.drawer__content--right[data-exiting=true] .drawer__dialog{translate:100%}.drawer__content--top[data-entering=true] .drawer__dialog,.drawer__content--top[data-exiting=true] .drawer__dialog{translate:0 -100%}.drawer__content--bottom[data-entering=true] .drawer__dialog,.drawer__content--bottom[data-exiting=true] .drawer__dialog{translate:0 100%}.drawer__dialog--top{padding-bottom:calc(var(--spacing) * 2)}.drawer__dialog--top .drawer__handle{padding-bottom:0}.drawer__header{gap:calc(var(--spacing) * 3);flex-direction:column;margin-bottom:0;display:flex}.drawer__heading{vertical-align:middle;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.drawer__body{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);min-height:0;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1.43;color:var(--muted);overscroll-behavior:contain;-webkit-overflow-scrolling:touch;margin:-3px;flex:1;margin-block:0;padding:3px;line-height:1.43;overflow-y:auto}.drawer__footer{justify-content:flex-end;align-items:center;gap:calc(var(--spacing) * 2);flex-direction:row;margin-top:0;display:flex}.drawer__handle{padding-bottom:calc(var(--spacing) * 2);justify-content:center;align-items:center;display:flex}.drawer__handle>[data-slot=drawer-handle-bar]{height:var(--spacing);width:calc(var(--spacing) * 9);border-radius:calc(var(--radius) * .25);background-color:var(--separator)}.drawer__close-trigger{top:calc(var(--spacing) * 4);right:calc(var(--spacing) * 4);position:absolute}.drawer__header+.drawer__body{margin-top:calc(var(--spacing) * 2)}.drawer__header+.drawer__footer,.drawer__body+.drawer__footer{margin-top:calc(var(--spacing) * 5)}.drawer__handle+.drawer__header,.drawer__handle+.drawer__body{margin-top:0}.modal__trigger{cursor:var(--cursor-interactive);transition:transform .25s var(--ease-out-quart),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.modal__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.modal__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.modal__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.modal__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.modal__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.modal__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.modal__trigger:focus-visible:not(:focus),.modal__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.modal__trigger:disabled,.modal__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.modal__trigger:active,.modal__trigger[data-pressed=true]{transform:scale(.97)}.modal__backdrop{z-index:50;height:var(--visual-viewport-height);flex-direction:row;justify-content:center;align-items:center;width:100%;display:flex;position:fixed;top:0;right:0;bottom:0;left:0}.modal__backdrop[data-entering=true]{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);--tw-duration:.15s;--tw-ease:var(--ease-out);transition-duration:.15s;transition-timing-function:var(--ease-out);--tw-enter-opacity:0}.modal__backdrop[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out);--tw-exit-opacity:0}.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]{will-change:opacity}:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.modal__backdrop--transparent{background-color:#0000}.modal__backdrop--opaque{background-color:var(--backdrop)}.modal__backdrop--blur{background-color:var(--backdrop);--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.modal__container{height:var(--visual-viewport-height);width:100%;min-width:0;padding:calc(var(--spacing) * 4);flex-direction:column;flex:1;align-items:center;display:flex}@media(min-width:40rem){.modal__container{width:fit-content;padding:calc(var(--spacing) * 10)}}.modal__container{pointer-events:none}.modal__container[data-entering=true]{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);--tw-duration:.25s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-enter-opacity:0;--tw-enter-scale: 105% ;transition-duration:.25s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.modal__container[data-entering=true][data-placement=auto]{--tw-enter-translate-y:calc(1*var(--spacing))}@media(min-width:40rem){.modal__container[data-entering=true][data-placement=auto]{--tw-enter-translate-y: 0% }}.modal__container[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.modal__container[data-entering=true][data-placement=center]{--tw-enter-translate-y: -0% }.modal__container[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing))}.modal__container[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-exit-opacity:0;--tw-exit-scale:.95;transition-duration:.1s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.modal__container[data-exiting=true],.modal__container[data-entering=true]{will-change:opacity,transform}:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.modal__container--scroll-outside{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);pointer-events:auto;-webkit-overflow-scrolling:touch;overflow-y:auto}.modal__container--full{padding:0}@media(min-width:40rem){.modal__container--full{padding:0}}.modal__container--full[data-entering=true]{--tw-enter-translate-y: 0% ;--tw-enter-scale:1}@media(min-width:40rem){.modal__container--full[data-entering=true]{--tw-enter-translate-y: 0% }}.modal__container--full[data-exiting=true]{--tw-exit-scale:1}.modal__dialog{background-color:var(--overlay);--tw-shadow:var(--overlay-shadow);width:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-radius:min(32px,var(--radius-3xl));padding:calc(var(--spacing) * 6);pointer-events:auto;outline-style:none;flex-direction:column;display:flex;position:relative}.modal__dialog[data-placement=auto]{margin-top:auto}@media(min-width:40rem){.modal__dialog[data-placement=auto]{margin-block:auto}}.modal__dialog[data-placement=center]{margin-block:auto}.modal__dialog[data-placement=bottom]{margin-top:auto}.modal__dialog[data-placement=top]{margin-top:0}.modal__dialog--scroll-inside{min-height:0;max-height:100%;overflow:clip}.modal__dialog--scroll-outside{flex-shrink:0;height:auto;min-height:0}.modal__dialog--xs{max-width:var(--container-xs)}.modal__dialog--sm{max-width:var(--container-sm)}.modal__dialog--md{max-width:var(--container-md)}.modal__dialog--lg{max-width:var(--container-lg)}.modal__dialog--cover{width:100%;height:100%;min-height:100%}.modal__dialog--full{--tw-shadow:0 0 #0000;width:100%;height:100%;min-height:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:0}.modal__header{gap:calc(var(--spacing) * 3);flex-direction:column;margin-bottom:0;display:flex}.modal__header>.modal__icon{margin-bottom:0}.modal__heading{vertical-align:middle;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.modal__icon{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);border-radius:calc(var(--radius) * 3);-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.modal__body{min-height:0;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1.43;color:var(--muted);margin:-3px;flex:1;margin-block:0;padding:3px;line-height:1.43;overflow:visible}.modal__body--scroll-inside{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overscroll-behavior:contain;-webkit-overflow-scrolling:touch;overflow-y:auto}.modal__body--scroll-outside{overflow-y:visible}.modal__footer{justify-content:flex-end;align-items:center;gap:calc(var(--spacing) * 2);flex-direction:row;margin-top:0;display:flex}.modal__close-trigger{top:calc(var(--spacing) * 4);right:calc(var(--spacing) * 4);position:absolute}.modal__header+.modal__body{margin-top:calc(var(--spacing) * 2)}.modal__header+.modal__footer,.modal__body+.modal__footer{margin-top:calc(var(--spacing) * 5)}.popover{transform-origin:var(--trigger-anchor-point);background-color:var(--overlay);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-radius:min(32px,var(--radius-3xl));box-shadow:var(--shadow-overlay);padding:0}.popover[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.9;transition-duration:.15s;transition-timing-function:ease}.popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.popover[data-exiting=true],.popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.popover__dialog{padding:calc(var(--spacing) * 4);--tw-outline-style:none;outline-style:none}.popover__heading{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.popover__trigger{transition:color .15s var(--ease-smooth),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.popover__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.popover__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.popover__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.popover__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.popover__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.popover__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.popover__trigger{cursor:var(--cursor-interactive)}.popover__trigger:focus-visible:not(:focus),.popover__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.popover__trigger:disabled,.popover__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.tooltip{max-width:var(--container-xs);transform-origin:var(--trigger-anchor-point);background-color:var(--overlay);padding:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));word-break:break-all;border-radius:min(32px,var(--radius-xl));box-shadow:var(--shadow-overlay)}.tooltip[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.9;transition-duration:.15s;transition-timing-function:ease}.tooltip[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.tooltip[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.tooltip[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.tooltip[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.tooltip[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.tooltip[data-exiting=true],.tooltip[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.tooltip [data-slot=overlay-arrow]{stroke:var(--border)}@supports (color:color-mix(in lab,red,red)){.tooltip [data-slot=overlay-arrow]{stroke:color-mix(in oklab,var(--border) 40%,transparent)}}.tooltip [data-slot=overlay-arrow]{fill:var(--overlay)}.tooltip[data-placement=bottom] [data-slot=overlay-arrow]{rotate:180deg}.tooltip[data-placement=left] [data-slot=overlay-arrow]{rotate:-90deg}.tooltip[data-placement=right] [data-slot=overlay-arrow]{rotate:90deg}.tooltip__trigger{transition:color .15s var(--ease-smooth),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.tooltip__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tooltip__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tooltip__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tooltip__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tooltip__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tooltip__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tooltip__trigger:focus-visible:not(:focus),.tooltip__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.combo-box{gap:var(--spacing);flex-direction:column;display:flex}:is(.combo-box[data-invalid=true],.combo-box[aria-invalid=true]) [data-slot=description]{display:none}.combo-box [data-slot=label]{width:fit-content}.combo-box [data-slot=input]{flex:1;min-width:0}.combo-box [data-slot=input]:has(+.combo-box__trigger){padding-inline-end:calc(var(--spacing) * 7)}.combo-box [data-slot=input]:focus,.combo-box [data-slot=input][data-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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.combo-box [data-slot=input]:disabled,.combo-box [data-slot=input][data-disabled],.combo-box [data-slot=input][aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.combo-box__input-group{isolation:isolate;align-items:center;display:inline-flex;position:relative}.combo-box__trigger{--tw-translate-y: -50% ;height:100%;translate:var(--tw-translate-x) var(--tw-translate-y);cursor:pointer;color:var(--field-placeholder,var(--muted));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;-webkit-tap-highlight-color:transparent;--tw-border-style:none;--tw-outline-style:none;inset-inline-end:calc(var(--spacing) * 0);background-color:#0000;border-style:none;outline-style:none;flex-shrink:0;justify-content:center;align-items:center;padding-inline-end:calc(var(--spacing) * 2);transition-duration:.15s;display:flex;position:absolute;top:50%}@media(hover:hover){.combo-box__trigger:hover,.combo-box__trigger[data-hovered=true]{color:var(--field-foreground,var(--foreground))}}.combo-box__trigger:focus-visible:not(:focus),.combo-box__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--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);--tw-ring-offset-color:var(--background);--tw-outline-style:none;border-radius:.25rem;outline-style:none}.combo-box__trigger[data-pressed=true]{opacity:.7}.combo-box__trigger:disabled,.combo-box__trigger[data-disabled],.combo-box__trigger[aria-disabled=true]{cursor:not-allowed;opacity:.5}.combo-box__trigger [data-slot=combo-box-trigger-default-icon]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);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));--tw-duration:.15s;transition-duration:.15s}.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:is([data-reduce-motion=true],[data-reduce-motion=true] *),.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.combo-box__trigger[data-open=true] [data-slot=combo-box-trigger-default-icon]{rotate:180deg}.combo-box__popover{min-width:var(--trigger-width);transform-origin:var(--trigger-anchor-point);scroll-padding-block:var(--spacing);scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overscroll-behavior:contain;background-color:var(--overlay);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-radius:min(32px,var(--radius-3xl));box-shadow:var(--shadow-overlay);padding:0;overflow-y:auto}.combo-box__popover:focus-visible:not(:focus),.combo-box__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.combo-box__popover[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.combo-box__popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.combo-box__popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.combo-box__popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.combo-box__popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.combo-box__popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.combo-box__popover[data-exiting=true],.combo-box__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.combo-box__popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.combo-box__popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.combo-box__popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.combo-box__popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.combo-box__popover [data-slot=list-box]{padding:calc(var(--spacing) * 1.5);--tw-outline-style:none;outline-style:none}.combo-box__popover [data-slot=list-box-item]{padding-inline:calc(var(--spacing) * 2.5)}.combo-box__popover [data-slot=list-box-item] [data-slot=list-box-item-indicator--checkmark]{transition-property:none}.combo-box--full-width,.combo-box__input-group--full-width{width:100%}.select{gap:var(--spacing);flex-direction:column;display:flex}:is(.select[data-invalid=true],.select[aria-invalid=true]) [data-slot=description]{display:none}.select [data-slot=label]{width:fit-content}.select__trigger{isolation:isolate;min-height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);border-width:1px;outline-style:none;display:inline-flex;position:relative}.select__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.select__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.select__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.select__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.select__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.select__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.select__trigger{cursor:var(--cursor-interactive);border-width:var(--border-width-field);border-color:var(--field-border)}.select__trigger:has(.select__indicator){padding-inline-end:calc(var(--spacing) * 7)}@media(hover:hover){.select__trigger:hover,.select__trigger[data-hovered=true]{background-color:var(--field-hover);border-color:var(--field-border-hover)}}.select__trigger:focus-visible:not(:focus),.select__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger):focus,:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger):focus-visible,:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger)[data-focused=true],:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger)[data-focus-visible=true],:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger):focus-within,:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger)[data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger{background-color:var(--field-focus)}.select__trigger:disabled,.select__trigger[data-disabled=true],.select__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.select--secondary .select__trigger{--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);background-color:var(--select-trigger-bg);--select-trigger-bg:var(--default);--select-trigger-bg-hover:var(--default-hover);--select-trigger-bg-focus:var(--default)}@media(hover:hover){.select--secondary .select__trigger:hover,.select--secondary .select__trigger[data-hovered=true]{background-color:var(--select-trigger-bg-hover)}}.select--secondary .select__trigger:focus-visible:not(:focus),.select--secondary .select__trigger[data-focus-visible=true],.select[data-invalid=true] :is(.select--secondary .select__trigger),.select[aria-invalid=true] :is(.select--secondary .select__trigger){background-color:var(--select-trigger-bg-focus)}.select__value{text-align:start;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));overflow-wrap:break-word;color:currentColor;flex:1}@media(min-width:40rem){.select__value{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.select__value[data-placeholder=true]{color:var(--field-placeholder,var(--muted))}.select__value [data-slot=list-box-item-indicator]{display:none}.select__indicator{color:var(--field-placeholder,var(--muted));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;flex-shrink:0;justify-content:center;align-items:center;margin-block:auto;transition-duration:.15s;display:flex;position:absolute;inset-block:0;inset-inline-end:calc(var(--spacing) * 2)}.select__indicator[data-open=true]{rotate:180deg}.select__indicator[data-slot=select-default-indicator]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.select__popover{min-width:var(--trigger-width);transform-origin:var(--trigger-anchor-point);scroll-padding-block:var(--spacing);scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overscroll-behavior:contain;background-color:var(--overlay);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-radius:min(32px,var(--radius-3xl));box-shadow:var(--shadow-overlay);padding:0;overflow-y:auto}.select__popover:focus-visible:not(:focus),.select__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.select__popover[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.select__popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.select__popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.select__popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.select__popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.select__popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.select__popover[data-exiting=true],.select__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.select__popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.select__popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.select__popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.select__popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.select__popover [data-slot=list-box]{padding:calc(var(--spacing) * 1.5);--tw-outline-style:none;outline-style:none}.select__popover [data-slot=list-box-item]{padding-inline:calc(var(--spacing) * 2.5)}.select__popover [data-slot=list-box]:not([aria-multiselectable=true]) [data-slot=list-box-item-indicator],.select__popover [data-slot=list-box]:not([aria-multiselectable=true]) [data-slot=list-box-item-indicator] [data-slot=list-box-item-indicator--checkmark]{transition-property:none}.select--full-width,.select__trigger--full-width{width:100%}.autocomplete{gap:var(--spacing);flex-direction:column;display:flex}.autocomplete__trigger{isolation:isolate;min-height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);border-width:1px;outline-style:none;display:inline-flex;position:relative}.autocomplete__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.autocomplete__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.autocomplete__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.autocomplete__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.autocomplete__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.autocomplete__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.autocomplete__trigger{cursor:var(--cursor-interactive);border-width:var(--border-width-field);border-color:var(--field-border)}.autocomplete__trigger:has(.autocomplete__indicator){padding-inline-end:calc(var(--spacing) * 7)}@media(hover:hover){.autocomplete__trigger:hover:not(:has(.autocomplete__clear-button:hover)),.autocomplete__trigger[data-hovered=true]:not(:has(.autocomplete__clear-button:hover)){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.autocomplete__trigger:focus-visible:not(:focus),.autocomplete__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger):focus,:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger):focus-visible,:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger)[data-focused=true],:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger)[data-focus-visible=true],:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger):focus-within,:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger)[data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger{background-color:var(--field-focus)}.autocomplete__trigger:disabled,.autocomplete__trigger[data-disabled=true],.autocomplete__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.autocomplete--secondary .autocomplete__trigger{--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);background-color:var(--autocomplete-trigger-bg);--autocomplete-trigger-bg:var(--default);--autocomplete-trigger-bg-hover:var(--default-hover);--autocomplete-trigger-bg-focus:var(--default)}@media(hover:hover){.autocomplete--secondary .autocomplete__trigger:hover:not(:has(.autocomplete__clear-button:hover)),.autocomplete--secondary .autocomplete__trigger[data-hovered=true]:not(:has(.autocomplete__clear-button:hover)){background-color:var(--autocomplete-trigger-bg-hover)}}.autocomplete--secondary .autocomplete__trigger:focus-visible:not(:focus),.autocomplete--secondary .autocomplete__trigger[data-focus-visible=true],.autocomplete[data-invalid=true] :is(.autocomplete--secondary .autocomplete__trigger),.autocomplete[aria-invalid=true] :is(.autocomplete--secondary .autocomplete__trigger){background-color:var(--autocomplete-trigger-bg-focus)}.autocomplete__value{text-align:start;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));overflow-wrap:break-word;color:currentColor;flex:1}@media(min-width:40rem){.autocomplete__value{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.autocomplete__value[data-placeholder=true]{color:var(--field-placeholder,var(--muted))}.autocomplete__value [data-slot=list-box-item-indicator]{display:none}.autocomplete__indicator{color:var(--field-placeholder,var(--muted));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;cursor:var(--cursor-interactive);flex-shrink:0;justify-content:center;align-items:center;margin-block:auto;transition-duration:.15s;display:flex;position:absolute;inset-block:0;inset-inline-end:calc(var(--spacing) * 2)}.autocomplete__indicator[data-open=true]{rotate:180deg}.autocomplete__indicator[data-slot=autocomplete-default-indicator]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.autocomplete__popover{width:var(--trigger-width);max-width:var(--trigger-width);transform-origin:var(--trigger-anchor-point);scroll-padding-block:var(--spacing);overscroll-behavior:contain;background-color:var(--overlay);padding:0;padding-top:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-radius:min(32px,var(--radius-3xl));box-shadow:var(--shadow-overlay);overflow:hidden}.autocomplete__popover:focus-visible:not(:focus),.autocomplete__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.autocomplete__popover[data-entering=true]{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);--tw-duration:.25s;--tw-ease:cubic-bezier(.32, .72, 0, 1);--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.25s;transition-timing-function:cubic-bezier(.32,.72,0,1)}.autocomplete__popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.autocomplete__popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.autocomplete__popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.autocomplete__popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.autocomplete__popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.autocomplete__popover[data-exiting=true],.autocomplete__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.autocomplete__popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.autocomplete__popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.autocomplete__popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.autocomplete__popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.autocomplete__popover [data-slot=list-box]{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);max-height:320px;padding:calc(var(--spacing) * 1.5);--tw-outline-style:none;outline-style:none;overflow-y:auto}.autocomplete__popover [data-slot=list-box-item]{padding-inline:calc(var(--spacing) * 2.5)}.autocomplete__popover [data-slot=list-box]:not([aria-multiselectable=true]) [data-slot=list-box-item-indicator],.autocomplete__popover [data-slot=list-box]:not([aria-multiselectable=true]) [data-slot=list-box-item-indicator] [data-slot=list-box-item-indicator--checkmark]{transition-property:none}.autocomplete__popover [data-slot=search-field]{padding-inline:calc(var(--spacing) * 3);padding-block:var(--spacing);--tw-outline-style:none;outline-style:none}.autocomplete__popover [data-slot=empty-state]{text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--overlay-foreground)}@supports (color:color-mix(in lab,red,red)){.autocomplete__popover [data-slot=empty-state]{color:color-mix(in oklab,var(--overlay-foreground) 60%,transparent)}}.autocomplete__popover-dialog,.autocomplete__popover-dialog:focus,.autocomplete__popover-dialog:focus-visible,.autocomplete__popover-dialog[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.autocomplete--full-width,.autocomplete__trigger--full-width{width:100%}.autocomplete__clear-button{isolation:isolate;height:calc(var(--spacing) * 6);width:calc(var(--spacing) * 6);transform-origin:50%;border-radius:calc(var(--radius) * 1.5);padding:var(--spacing);color:var(--muted);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);cursor:var(--cursor-interactive);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);background-color:#0000;flex-shrink:0;justify-content:center;align-self:center;align-items:center;margin-inline-end:0;display:inline-flex;position:relative}.autocomplete__clear-button:not([data-empty=true]){transition:opacity .15s var(--ease-smooth)}.autocomplete__clear-button:not([data-empty=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),.autocomplete__clear-button:not([data-empty=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.autocomplete__clear-button:not([data-empty=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.autocomplete__clear-button:not([data-empty=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.autocomplete__clear-button:not([data-empty=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.autocomplete__clear-button:not([data-empty=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.autocomplete__clear-button[data-empty=true]{pointer-events:none;opacity:0}.autocomplete__clear-button [data-slot=autocomplete-clear-button-icon]{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}@media(hover:hover){.autocomplete__clear-button:hover,.autocomplete__clear-button[data-hovered=true]{background-color:var(--default-hover)}}.autocomplete__clear-button:active,.autocomplete__clear-button[data-pressed=true]{transform:scale(.93)}.kbd{height:calc(var(--spacing) * 6);align-items:center;display:inline-flex}:where(.kbd>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * .5) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-x-reverse)))}.kbd{border-radius:calc(var(--radius) * 1);background-color:var(--default);padding-inline:calc(var(--spacing) * 2);text-align:center;font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--muted)}:where(.kbd:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}.kbd{word-spacing:-.25rem}.kbd__abbr{justify-content:center;align-items:center;width:100%;height:100%;text-decoration:none;display:flex}.kbd__content{justify-content:center;align-items:center;display:flex}.kbd--light{background-color:#0000}.typography,.typography-prose{color:var(--foreground)}.typography-prose h1{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h2{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h3{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h4{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h5{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h6{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose p{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.typography-prose code{border-radius:calc(var(--radius) * .75);background-color:var(--default);padding-inline:calc(var(--spacing) * 1.5);padding-block:calc(var(--spacing) * .5);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--foreground)}.typography-prose a{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--link);text-underline-offset:4px;text-decoration-line:underline}.typography-prose blockquote{margin-top:calc(var(--spacing) * 4);border-left-style:var(--tw-border-style);border-left-width:4px;border-color:var(--border);padding-left:calc(var(--spacing) * 4);color:var(--muted);font-style:italic}.typography-prose ul{margin-block:calc(var(--spacing) * 4);list-style-type:disc}:where(.typography-prose ul>: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)))}.typography-prose ul{padding-left:calc(var(--spacing) * 6)}.typography-prose ol{margin-block:calc(var(--spacing) * 4);list-style-type:decimal}:where(.typography-prose ol>: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)))}.typography-prose ol{padding-left:calc(var(--spacing) * 6)}.typography-prose li{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.typography-prose hr{margin-block:calc(var(--spacing) * 8);border-color:var(--separator)}.typography-prose pre{margin-block:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1.5);background-color:var(--default);padding:calc(var(--spacing) * 4);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);overflow-x:auto}.typography-prose strong{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--foreground)}.typography-prose em{font-style:italic}.typography-prose img{margin-block:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1.5)}.typography--h1{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h2{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h3{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h4{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h5{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h6{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--body{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.typography--body-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.typography--body-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.typography--code{border-radius:calc(var(--radius) * .75);background-color:var(--default);padding-inline:calc(var(--spacing) * 1.5);padding-block:calc(var(--spacing) * .5);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--foreground)}.typography--align-start{text-align:left}.typography--align-start:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}.typography--align-center{text-align:center}.typography--align-end{text-align:right}.typography--align-end:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:left}.typography--align-justify{text-align:justify}.typography--color-default{color:var(--foreground)}.typography--color-muted{color:var(--muted)}.typography--truncate{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.typography--weight-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.typography--weight-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.typography--weight-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.typography--weight-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.scroll-shadow{--scroll-shadow-size:40px;--scroll-shadow-scrollbar-size:10px;position:relative}.scroll-shadow--vertical{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overflow-y:auto}.scroll-shadow--horizontal{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overflow-x:auto}.scroll-shadow--fade.scroll-shadow--vertical:where([data-top-scroll=true],[data-bottom-scroll=true],[data-top-bottom-scroll=true]){mask-image:linear-gradient(var(--scroll-linear-gradient)),linear-gradient(#000,#000);mask-position:0 0,100% 0;mask-repeat:no-repeat;mask-size:calc(100% - var(--scroll-shadow-scrollbar-size)) 100%,var(--scroll-shadow-scrollbar-size) 100%;-webkit-mask-image:linear-gradient(var(--scroll-linear-gradient)),linear-gradient(#000,#000);-webkit-mask-position:0 0,100% 0;-webkit-mask-repeat:no-repeat;-webkit-mask-size:calc(100% - var(--scroll-shadow-scrollbar-size)) 100%,var(--scroll-shadow-scrollbar-size) 100%}.scroll-shadow--fade.scroll-shadow--vertical[data-top-scroll=true]{--scroll-linear-gradient:0deg, #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--vertical[data-bottom-scroll=true]{--scroll-linear-gradient:180deg, #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--vertical[data-top-bottom-scroll=true]{--scroll-linear-gradient:#000, #000, transparent 0, #000 var(--scroll-shadow-size), #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--horizontal:where([data-left-scroll=true],[data-right-scroll=true],[data-left-right-scroll=true]){mask-image:linear-gradient(var(--scroll-linear-gradient)),linear-gradient(#000,#000);mask-position:0 0,0 100%;mask-repeat:no-repeat;mask-size:100% calc(100% - var(--scroll-shadow-scrollbar-size)),100% var(--scroll-shadow-scrollbar-size);-webkit-mask-image:linear-gradient(var(--scroll-linear-gradient)),linear-gradient(#000,#000);-webkit-mask-position:0 0,0 100%;-webkit-mask-repeat:no-repeat;-webkit-mask-size:100% calc(100% - var(--scroll-shadow-scrollbar-size)),100% var(--scroll-shadow-scrollbar-size)}.scroll-shadow--fade.scroll-shadow--horizontal[data-left-scroll=true]{--scroll-linear-gradient:270deg, #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--horizontal[data-right-scroll=true]{--scroll-linear-gradient:90deg, #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--horizontal[data-left-right-scroll=true]{--scroll-linear-gradient:to right, #000, #000, transparent 0, #000 var(--scroll-shadow-size), #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--hide-scrollbar{scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;--scroll-shadow-scrollbar-size:0px}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-4{top:calc(var(--spacing) * 4)}.top-full{top:100%}.-right-3{right:calc(var(--spacing) * -3)}.right-0{right:0}.right-4{right:calc(var(--spacing) * 4)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.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:var(--spacing)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-auto{margin-inline:auto}.-mt-1{margin-top:calc(var(--spacing) * -1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-auto{margin-top:auto}.-mr-1{margin-right:calc(var(--spacing) * -1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1{height:var(--spacing)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-12{height:calc(var(--spacing) * 12)}.h-48{height:calc(var(--spacing) * 48)}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:0}.min-h-full{min-height:100%}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-28{width:calc(var(--spacing) * 28)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-\[17rem\]{width:17rem}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-44{max-width:calc(var(--spacing) * 44)}.max-w-\[1800px\]{max-width:1800px}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-\[140px\]{min-width:140px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:0;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0\.5{--tw-translate-x:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing) * 5);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-\[var\(--otari-line\)\]>:not(:last-child)){border-color:var(--otari-line)}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:calc(var(--radius) * 1)}.rounded-md{border-radius:calc(var(--radius) * .75)}.rounded-xl{border-radius:calc(var(--radius) * 1.5)}.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-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-\[\#c2843a\]{border-color:#c2843a}.border-\[var\(--otari-brand\)\]{border-color:var(--otari-brand)}.border-\[var\(--otari-line\)\]{border-color:var(--otari-line)}.border-amber-200{border-color:var(--color-amber-200)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-green-200{border-color:var(--color-green-200)}.border-red-200{border-color:var(--color-red-200)}.border-l-amber-500{border-left-color:var(--color-amber-500)}.border-l-emerald-500{border-left-color:var(--color-emerald-500)}.border-l-red-500{border-left-color:var(--color-red-500)}.bg-\[var\(--otari-bg\)\]{background-color:var(--otari-bg)}.bg-\[var\(--otari-brand\)\]{background-color:var(--otari-brand)}.bg-\[var\(--otari-brand-tint\)\]{background-color:var(--otari-brand-tint)}.bg-\[var\(--otari-line\)\]{background-color:var(--otari-line)}.bg-\[var\(--otari-surface\)\]{background-color:var(--otari-surface)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-500{background-color:var(--color-green-500)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-500{background-color:var(--color-red-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-7{padding:calc(var(--spacing) * 7)}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-10{padding-block:calc(var(--spacing) * 10)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-1{padding-bottom:var(--spacing)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.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))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#b45309\]{color:#b45309}.text-\[var\(--otari-brand-dark\)\]{color:var(--otari-brand-dark)}.text-\[var\(--otari-ink\)\]{color:var(--otari-ink)}.text-\[var\(--otari-muted\)\]{color:var(--otari-muted)}.text-amber-400{color:var(--color-amber-400)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-emerald-700{color:var(--color-emerald-700)}.text-green-700{color:var(--color-green-700)}.text-red-700{color:var(--color-red-700)}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.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-2{text-underline-offset:2px}.accent-\[var\(--otari-brand\)\]{accent-color:var(--otari-brand)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-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-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-\[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-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.select-none{-webkit-user-select:none;user-select:none}.running{animation-play-state:running}.group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media(hover:hover){.group-hover\:w-0\.5:is(:where(.group):hover *){width:calc(var(--spacing) * .5)}.group-hover\:bg-\[var\(--otari-brand\)\]:is(:where(.group):hover *){background-color:var(--otari-brand)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.hover\:border-\[var\(--otari-brand\)\]:hover{border-color:var(--otari-brand)}.hover\:bg-\[var\(--otari-bg\)\]:hover{background-color:var(--otari-bg)}.hover\:bg-\[var\(--otari-brand\)\]:hover{background-color:var(--otari-brand)}.hover\:text-\[var\(--otari-brand\)\]:hover{color:var(--otari-brand)}.hover\:text-\[var\(--otari-brand-dark\)\]:hover{color:var(--otari-brand-dark)}.hover\:text-\[var\(--otari-ink\)\]:hover{color:var(--otari-ink)}.hover\:text-amber-950:hover{color:var(--color-amber-950)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-\[var\(--otari-brand\)\]:focus{border-color:var(--otari-brand)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:bg-\[var\(--otari-brand\)\]:focus-visible{background-color:var(--otari-brand)}.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-\[var\(--otari-brand\)\]:focus-visible{--tw-ring-color:var(--otari-brand)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-\[var\(--otari-brand\)\]:focus-visible{outline-color:var(--otari-brand)}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-start-1{grid-column-start:1}.sm\:col-start-2{grid-column-start:2}.sm\:col-start-3{grid-column-start:3}.sm\:w-28{width:calc(var(--spacing) * 28)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[minmax\(0\,1fr\)_16rem_10rem\]{grid-template-columns:minmax(0,1fr) 16rem 10rem}.sm\:flex-row{flex-direction:row}.sm\:flex-wrap{flex-wrap:wrap}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-self-end{justify-self:flex-end}.sm\:justify-self-start{justify-self:flex-start}.sm\:p-5{padding:calc(var(--spacing) * 5)}.sm\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}}@media(min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-auto{width:auto}.md\:px-6{padding-inline:calc(var(--spacing) * 6)}.md\:py-6{padding-block:calc(var(--spacing) * 6)}}@media(min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-4{top:calc(var(--spacing) * 4)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,1fr\)_360px\]{grid-template-columns:minmax(0,1fr) 360px}.lg\:items-start{align-items:flex-start}}@media(min-width:80rem){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}}@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{--otari-brand:#4e8295;--otari-brand-dark:#3c6678;--otari-brand-tint:#eaf1f3;--otari-ink:#14242c;--otari-muted:#5b6b73;--otari-line:#dbe5e8;--otari-surface:#fff;--otari-bg:#f6f9fa}html,body,#root{height:100%}body{background-color:var(--otari-bg);color:var(--otari-ink);margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-divide-y-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-content{syntax:"*";inherits:false;initial-value:""}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-border-spacing-x{syntax:"";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:"";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@keyframes caret-blink{0%,70%,to{opacity:1}20%,50%{opacity:0}}@keyframes skeleton{to{transform:translate(200%)}} +/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-divide-y-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-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;--tw-content:"";--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-space-y-reverse:0;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-space-x-reverse: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-50:oklch(97.1% .013 17.38);--color-red-200:oklch(88.5% .062 18.334);--color-red-500:oklch(63.7% .237 25.331);--color-red-700:oklch(50.5% .213 27.518);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-green-50:oklch(98.2% .018 155.826);--color-green-200:oklch(92.5% .084 155.995);--color-green-500:oklch(72.3% .219 149.579);--color-green-700:oklch(52.7% .154 150.069);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-xl:calc(var(--radius) * 1.5);--radius-2xl:calc(var(--radius) * 2);--radius-3xl:calc(var(--radius) * 3);--ease-out:cubic-bezier(0, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-md:12px;--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);--shadow-surface:var(--surface-shadow);--shadow-overlay:var(--overlay-shadow);--border-width-field:var(--field-border-width,var(--border-width));--ease-smooth:ease;--ease-out-quad:cubic-bezier(.25, .46, .45, .94);--ease-out-quart:cubic-bezier(.165, .84, .44, 1);--ease-out-fluid:cubic-bezier(.32, .72, 0, 1);--ease-linear:linear}@layer theme.base{:root,.light,.default,[data-theme=light],[data-theme=default]{color-scheme:light;--white:oklch(100% 0 0);--black:oklch(0% 0 0);--snow:oklch(99.11% 0 0);--eclipse:oklch(21.03% .0059 285.89);--spacing:.25rem;--border-width:1px;--field-border-width:0px;--disabled-opacity:.5;--ring-offset-width:2px;--cursor-interactive:pointer;--cursor-disabled:not-allowed;--radius:.5rem;--field-radius:calc(var(--radius) * 1.5);--background:oklch(97.02% 0 0);--foreground:var(--eclipse);--surface:var(--white);--surface-foreground:var(--foreground);--surface-secondary:oklch(95.24% .0013 286.37);--surface-secondary-foreground:var(--foreground);--surface-tertiary:oklch(93.73% .0013 286.37);--surface-tertiary-foreground:var(--foreground);--overlay:var(--white);--overlay-foreground:var(--foreground);--muted:oklch(55.17% .0138 285.94);--scrollbar:var(--scrollbar-thumb);--scrollbar-thumb:var(--foreground)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--scrollbar-thumb:color-mix(in oklch, var(--foreground) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--scrollbar-track:transparent;--scrollbar-gutter:auto;--scrollbar-width:thin;--scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track);--default:oklch(94% .001 286.375);--default-foreground:var(--eclipse);--accent:oklch(62.04% .195 253.83);--accent-foreground:var(--snow);--field-background:var(--white);--field-foreground:oklch(21.03% .0059 285.89);--field-placeholder:var(--muted);--field-border:transparent;--success:oklch(73.29% .1935 150.81);--success-foreground:var(--eclipse);--warning:oklch(78.19% .1585 72.33);--warning-foreground:var(--eclipse);--danger:oklch(65.32% .2328 25.74);--danger-foreground:var(--snow);--segment:var(--white);--segment-foreground:var(--eclipse);--border:oklch(90% .004 286.32);--separator:oklch(92% .004 286.32);--focus:var(--accent);--link:var(--foreground);--backdrop:#00000080;--surface-hover:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--surface-hover:color-mix(in oklab, var(--surface) 92%, var(--surface-foreground) 8%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--background-secondary:var(--background)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--background-secondary:color-mix(in oklab, var(--background) 96%, var(--foreground) 4%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--background-tertiary:var(--background)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--background-tertiary:color-mix(in oklab, var(--background) 92%, var(--foreground) 8%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--background-inverse:var(--foreground);--default-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--default-hover:color-mix(in oklab, var(--default) 96%, var(--default-foreground) 4%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-hover:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-hover:color-mix(in oklab, var(--accent) 90%, var(--accent-foreground) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--success-hover:var(--success)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--success-hover:color-mix(in oklab, var(--success) 90%, var(--success-foreground) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-hover:var(--warning)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-hover:color-mix(in oklab, var(--warning) 90%, var(--warning-foreground) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-hover:var(--danger)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-hover:color-mix(in oklab, var(--danger) 90%, var(--danger-foreground) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--field-hover:var(--field-background,var(--default))}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--field-hover:color-mix(in oklab, var(--field-background,var(--default)) 90%, var(--field-foreground,var(--foreground)) 2%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--field-focus:var(--field-background,var(--default));--field-border-hover:var(--field-border,var(--border))}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--field-border-hover:color-mix(in oklab, var(--field-border,var(--border)) 88%, var(--field-foreground,var(--foreground)) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--field-border-focus:var(--field-border,var(--border))}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--field-border-focus:color-mix(in oklab, var(--field-border,var(--border)) 74%, var(--field-foreground,var(--foreground)) 22%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--default-soft:var(--default)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--default-soft:color-mix(in oklab, var(--default) 50%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--default-soft-foreground:var(--default-foreground);--default-soft-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--default-soft-hover:color-mix(in oklab, var(--default) 60%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-soft:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-soft:color-mix(in oklab, var(--accent) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-soft-foreground:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-soft-foreground:color-mix(in oklab, var(--accent) 70%, var(--foreground) 30%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-soft-hover:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--accent-soft-hover:color-mix(in oklab, var(--accent) 20%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-soft:var(--danger)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-soft:color-mix(in oklab, var(--danger) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-soft-foreground:var(--danger)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-soft-foreground:color-mix(in oklab, var(--danger) 70%, var(--foreground) 40%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-soft-hover:var(--danger)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--danger-soft-hover:color-mix(in oklab, var(--danger) 20%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-soft:var(--warning)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-soft:color-mix(in oklab, var(--warning) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-soft-foreground:var(--warning)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-soft-foreground:color-mix(in oklab, var(--warning) 80%, var(--foreground) 70%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-soft-hover:var(--warning)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--warning-soft-hover:color-mix(in oklab, var(--warning) 20%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--success-soft:var(--success)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--success-soft:color-mix(in oklab, var(--success) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--success-soft-foreground:var(--success)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--success-soft-foreground:color-mix(in oklab, var(--success) 80%, var(--foreground) 60%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--success-soft-hover:var(--success)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--success-soft-hover:color-mix(in oklab, var(--success) 20%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--separator-secondary:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--separator-secondary:color-mix(in oklab, var(--surface) 85%, var(--surface-foreground) 15%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--separator-tertiary:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--separator-tertiary:color-mix(in oklab, var(--surface) 81%, var(--surface-foreground) 19%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--border-secondary:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--border-secondary:color-mix(in oklab, var(--surface) 78%, var(--surface-foreground) 22%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--border-tertiary:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default]{--border-tertiary:color-mix(in oklab, var(--surface) 66%, var(--surface-foreground) 34%)}}:root,.light,.default,[data-theme=light],[data-theme=default]{--surface-shadow:0 2px 4px 0 #0000000a, 0 1px 2px 0 #0000000f, 0 0 1px 0 #0000000f;--overlay-shadow:0 2px 8px 0 #0000000f, 0 -6px 12px 0 #00000008, 0 14px 28px 0 #00000014;--field-shadow:0 2px 4px 0 #0000000a, 0 1px 2px 0 #0000000f, 0 0 1px 0 #0000000f;--skeleton-animation:shimmer;--tooltip-delay:1.5s;--tooltip-close-delay:.5s}.dark,[data-theme=dark]{color-scheme:dark;--background:oklch(12% .005 285.823);--foreground:var(--snow);--surface:oklch(21.03% .0059 285.89);--surface-foreground:var(--foreground);--surface-secondary:oklch(25.7% .0037 286.14);--surface-tertiary:oklch(27.21% .0024 247.91);--overlay:oklch(21.03% .0059 285.89);--overlay-foreground:var(--foreground);--muted:oklch(70.5% .015 286.067);--scrollbar:var(--scrollbar-thumb);--scrollbar-thumb:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--scrollbar-thumb:color-mix(in oklch, var(--foreground) 15%, transparent)}}.dark,[data-theme=dark]{--scrollbar-track:transparent;--scrollbar-gutter:auto;--scrollbar-width:thin;--scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track);--default:oklch(27.4% .006 286.033);--default-foreground:var(--snow);--field-background:oklch(21.03% .0059 285.89);--field-foreground:var(--foreground);--warning:oklch(82.03% .1388 76.34);--warning-foreground:var(--eclipse);--danger:oklch(59.4% .1967 24.63);--danger-foreground:var(--snow);--segment:oklch(39.64% .01 285.93);--segment-foreground:var(--foreground);--border:oklch(28% .006 286.033);--separator:oklch(25% .006 286.033);--focus:var(--accent);--link:var(--foreground);--backdrop:#0009;--surface-shadow:0 0 0 0 transparent inset;--overlay-shadow:0 0 1px 0 #ffffff4d inset;--field-shadow:0 0 0 0 transparent inset;--surface-hover:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--surface-hover:color-mix(in oklab, var(--surface) 92%, var(--surface-foreground) 8%)}}.dark,[data-theme=dark]{--background-secondary:var(--background)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--background-secondary:color-mix(in oklab, var(--background) 96%, var(--foreground) 4%)}}.dark,[data-theme=dark]{--background-tertiary:var(--background)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--background-tertiary:color-mix(in oklab, var(--background) 92%, var(--foreground) 8%)}}.dark,[data-theme=dark]{--background-inverse:var(--foreground);--default-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--default-hover:color-mix(in oklab, var(--default) 96%, var(--default-foreground) 4%)}}.dark,[data-theme=dark]{--accent-hover:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--accent-hover:color-mix(in oklab, var(--accent) 90%, var(--accent-foreground) 10%)}}.dark,[data-theme=dark]{--success-hover:var(--success)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--success-hover:color-mix(in oklab, var(--success) 90%, var(--success-foreground) 10%)}}.dark,[data-theme=dark]{--warning-hover:var(--warning)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--warning-hover:color-mix(in oklab, var(--warning) 90%, var(--warning-foreground) 10%)}}.dark,[data-theme=dark]{--danger-hover:var(--danger)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--danger-hover:color-mix(in oklab, var(--danger) 90%, var(--danger-foreground) 10%)}}.dark,[data-theme=dark]{--field-hover:var(--field-background,var(--default))}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--field-hover:color-mix(in oklab, var(--field-background,var(--default)) 90%, var(--field-foreground,var(--foreground)) 2%)}}.dark,[data-theme=dark]{--field-focus:var(--field-background,var(--default));--field-border-hover:var(--field-border,var(--border))}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--field-border-hover:color-mix(in oklab, var(--field-border,var(--border)) 88%, var(--field-foreground,var(--foreground)) 10%)}}.dark,[data-theme=dark]{--field-border-focus:var(--field-border,var(--border))}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--field-border-focus:color-mix(in oklab, var(--field-border,var(--border)) 74%, var(--field-foreground,var(--foreground)) 22%)}}.dark,[data-theme=dark]{--default-soft:var(--default)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--default-soft:color-mix(in oklab, var(--default) 50%, transparent)}}.dark,[data-theme=dark]{--default-soft-foreground:var(--default-foreground);--default-soft-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--default-soft-hover:color-mix(in oklab, var(--default) 60%, transparent)}}.dark,[data-theme=dark]{--accent-soft:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--accent-soft:color-mix(in oklab, var(--accent) 12%, transparent)}}.dark,[data-theme=dark]{--accent-soft-foreground:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--accent-soft-foreground:color-mix(in oklab, var(--accent) 80%, var(--foreground) 30%)}}.dark,[data-theme=dark]{--accent-soft-hover:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--accent-soft-hover:color-mix(in oklab, var(--accent) 16%, transparent)}}.dark,[data-theme=dark]{--danger-soft:var(--danger)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--danger-soft:color-mix(in oklab, var(--danger) 15%, transparent)}}.dark,[data-theme=dark]{--danger-soft-foreground:var(--danger)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--danger-soft-foreground:color-mix(in oklab, var(--danger) 80%, var(--foreground) 30%)}}.dark,[data-theme=dark]{--danger-soft-hover:var(--danger)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--danger-soft-hover:color-mix(in oklab, var(--danger) 20%, transparent)}}.dark,[data-theme=dark]{--warning-soft:var(--warning)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--warning-soft:color-mix(in oklab, var(--warning) 12%, transparent)}}.dark,[data-theme=dark]{--warning-soft-foreground:var(--warning)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--warning-soft-foreground:color-mix(in oklab, var(--warning) 80%, var(--foreground) 30%)}}.dark,[data-theme=dark]{--warning-soft-hover:var(--warning)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--warning-soft-hover:color-mix(in oklab, var(--warning) 16%, transparent)}}.dark,[data-theme=dark]{--success-soft:var(--success)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--success-soft:color-mix(in oklab, var(--success) 12%, transparent)}}.dark,[data-theme=dark]{--success-soft-foreground:var(--success)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--success-soft-foreground:color-mix(in oklab, var(--success) 80%, var(--foreground) 30%)}}.dark,[data-theme=dark]{--success-soft-hover:var(--success)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--success-soft-hover:color-mix(in oklab, var(--success) 16%, transparent)}}.dark,[data-theme=dark]{--separator-secondary:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--separator-secondary:color-mix(in oklab, var(--surface) 85%, var(--surface-foreground) 15%)}}.dark,[data-theme=dark]{--separator-tertiary:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--separator-tertiary:color-mix(in oklab, var(--surface) 81%, var(--surface-foreground) 19%)}}.dark,[data-theme=dark]{--border-secondary:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--border-secondary:color-mix(in oklab, var(--surface) 78%, var(--surface-foreground) 22%)}}.dark,[data-theme=dark]{--border-tertiary:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark]{--border-tertiary:color-mix(in oklab, var(--surface) 66%, var(--surface-foreground) 34%)}}[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--accent-soft-foreground:var(--accent)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--accent-soft-foreground:color-mix(in oklab, var(--accent) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--danger-soft-foreground:var(--danger)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--danger-soft-foreground:color-mix(in oklab, var(--danger) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--warning-soft-foreground:var(--warning)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--warning-soft-foreground:color-mix(in oklab, var(--warning) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--success-soft-foreground:var(--success)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--success-soft-foreground:color-mix(in oklab, var(--success) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--accent-soft-foreground:var(--accent)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--accent-soft-foreground:color-mix(in oklab, var(--accent) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--danger-soft-foreground:var(--danger)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--danger-soft-foreground:color-mix(in oklab, var(--danger) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--warning-soft-foreground:var(--warning)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--warning-soft-foreground:color-mix(in oklab, var(--warning) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--success-soft-foreground:var(--success)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--success-soft-foreground:color-mix(in oklab, var(--success) 92%, var(--foreground) 8%)}}}@layer components;}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;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]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*,:after,:before,::backdrop{border-color:var(--border,currentColor)}::file-selector-button{border-color:var(--border,currentColor)}:root{view-transition-name:none}::view-transition{pointer-events:none}[data-scrollbar=thin]{--scrollbar-width:thin;--scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track);--scrollbar-gutter:auto}[data-scrollbar=default]{--scrollbar-width:auto;--scrollbar-color:auto;--scrollbar-gutter:auto}[data-scrollbar=none]{--scrollbar-width:none;--scrollbar-color:auto;--scrollbar-gutter:auto}}@layer components{.close-button{isolation:isolate;height:calc(var(--spacing) * 6);width:calc(var(--spacing) * 6);transform-origin:50%;border-radius:calc(var(--radius) * 1.5);padding:var(--spacing);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:transform .25s var(--ease-out-quart),color .15s var(--ease-out),background-color .1s var(--ease-out),box-shadow .15s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.close-button:focus-visible:not(:focus),.close-button[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.close-button:disabled,.close-button[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.close-button[data-pending=true]{pointer-events:none}.close-button svg{pointer-events:none;width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);margin-inline:calc(var(--spacing) * -.5);margin-block:calc(var(--spacing) * .5);flex-shrink:0;align-self:center}.close-button--default{background-color:var(--default);color:var(--muted)}@media(hover:hover){.close-button--default:hover,.close-button--default[data-hovered=true]{background-color:var(--default-hover)}}.close-button--default:active,.close-button--default[data-pressed=true]{transform:scale(.93)}.description{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));text-wrap:wrap;overflow-wrap:break-word;color:var(--muted)}.error-message{height:auto;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));overflow-wrap:break-word;color:var(--danger);transition:opacity .15s var(--ease-out),height .35s var(--ease-smooth)}.error-message:is([data-reduce-motion=true],[data-reduce-motion=true] *),.error-message:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.error-message:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.error-message:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.error-message:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.error-message:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.field-error{height:0;padding-inline:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));overflow-wrap:break-word;color:var(--danger);opacity:0}.field-error[data-visible]{opacity:1;height:auto}.field-error{transition:opacity .15s var(--ease-out),height .35s var(--ease-smooth)}.field-error:is([data-reduce-motion=true],[data-reduce-motion=true] *),.field-error:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.field-error:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.field-error:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.field-error:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.field-error:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.checkbox>.field-error,.checkbox>[data-slot=field-error],.switch>.field-error,.switch>[data-slot=field-error],.radio>.field-error,.radio>[data-slot=field-error]{height:auto;min-height:0;color:var(--muted);opacity:1;margin:0;padding:0;transition:none}.label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}:is(.label--required,[data-required=true]:not([role=group]):not([role=radiogroup]):not([role=checkboxgroup])>.label,[data-required=true]:not([data-slot=radio]):not([data-slot=checkbox])>.label):after{margin-left:calc(var(--spacing) * .5);color:var(--danger);--tw-content:"*";content:var(--tw-content)}.label--disabled,[data-disabled=true] .label{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.label--invalid,[data-invalid=true] .label,[aria-invalid=true] .label{color:var(--danger)}.accordion{contain:layout style;width:100%}.accordion__body{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.accordion__body-inner{padding-inline:calc(var(--spacing) * 4);padding-top:0;padding-bottom:calc(var(--spacing) * 4);color:var(--muted)}.accordion__indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);color:var(--muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;flex-shrink:0;margin-left:auto;transition-duration:.25s}.accordion__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.accordion__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.accordion__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.accordion__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.accordion__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.accordion__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.accordion__indicator[data-expanded=true]{rotate:-180deg}.accordion__item{--tw-border-style:none;border-style:none;position:relative}.accordion__item:after{content:"";border-radius:calc(var(--radius) * .25);background-color:var(--separator);width:100%;height:1px;position:absolute;bottom:0;left:0}.accordion__item:last-child:after{content:none}.accordion__item[data-hide-separator=true]:after{display:none}.accordion__trigger{cursor:var(--cursor-interactive);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 4);text-align:left;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);-webkit-tap-highlight-color:transparent;transition:opacity .15s var(--ease-out),box-shadow .15s var(--ease-out);flex:1;justify-content:space-between;align-items:center;display:flex}.accordion__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.accordion__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.accordion__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.accordion__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.accordion__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.accordion__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.accordion__trigger:hover:not([aria-expanded=true]),.accordion__trigger[data-hovered=true]:not([aria-expanded=true]){background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.accordion__trigger:hover:not([aria-expanded=true]),.accordion__trigger[data-hovered=true]:not([aria-expanded=true]){background-color:color-mix(in oklab,var(--foreground) 3%,transparent 90%)}}}.accordion__trigger:focus-visible:not(:focus),.accordion__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.accordion__trigger:disabled,.accordion__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.accordion__panel{opacity:0;height:var(--disclosure-panel-height);transition:height .2s var(--ease-out-quad),opacity .2s var(--ease-out);overflow:clip}.accordion__panel:is([data-reduce-motion=true],[data-reduce-motion=true] *),.accordion__panel:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.accordion__panel:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.accordion__panel:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.accordion__panel:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.accordion__panel:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.accordion__panel[data-expanded=true]{will-change:height,opacity;opacity:1}.accordion--surface{background-color:var(--surface);border-radius:min(32px,var(--radius-3xl))}@media(hover:hover){.accordion--surface .accordion__trigger:hover:not([aria-expanded=true]),.accordion--surface .accordion__trigger[data-hovered=true]:not([aria-expanded=true]){background-color:var(--default)}}.accordion--surface .accordion__item:after{background-color:var(--surface-foreground)}@supports (color:color-mix(in lab,red,red)){.accordion--surface .accordion__item:after{background-color:color-mix(in oklab,var(--surface-foreground) 6%,transparent)}}.accordion--surface .accordion__item:after{width:94%;left:3%}.accordion--surface .accordion__item:first-child [data-slot=accordion-trigger]{border-top-left-radius:min(32px,var(--radius-3xl));border-top-right-radius:min(32px,var(--radius-3xl))}.accordion--surface .accordion__item:last-child:not(:has([data-slot=accordion-trigger][aria-expanded=true])) [data-slot=accordion-trigger]{border-bottom-left-radius:min(32px,var(--radius-3xl));border-bottom-right-radius:min(32px,var(--radius-3xl))}.breadcrumbs{align-items:center;display:flex}.breadcrumbs .breadcrumbs__link{padding-inline:calc(var(--spacing) * .5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);opacity:1;text-decoration-line:none;position:relative}.breadcrumbs .breadcrumbs__link:hover,.breadcrumbs .breadcrumbs__link[data-hovered=true]{text-decoration-line:underline}.breadcrumbs .breadcrumbs__link[data-current=true]{color:var(--link);opacity:1}.breadcrumbs .breadcrumbs__item{justify-content:center;align-items:center;gap:calc(var(--spacing) * .5);padding-inline:calc(var(--spacing) * .5);flex-shrink:0;display:flex}.breadcrumbs .breadcrumbs__separator{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);color:var(--muted)}.breadcrumbs .breadcrumbs__separator:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}.disclosure-group{contain:layout style;width:100%}.disclosure{position:relative}.accordion__heading{display:flex}.disclosure__trigger{cursor:var(--cursor-interactive);-webkit-tap-highlight-color:transparent;display:inline-block}.disclosure__trigger:focus-visible:not(:focus),.disclosure__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.disclosure__trigger:disabled,.disclosure__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.disclosure__indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);color:inherit;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;flex-shrink:0;margin-left:auto;transition-duration:.25s}.disclosure__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.disclosure__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.disclosure__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.disclosure__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.disclosure__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.disclosure__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.disclosure__indicator[data-expanded=true]{rotate:-180deg}.disclosure__content{opacity:0;height:var(--disclosure-panel-height);transition:height .2s var(--ease-out-quad),opacity .2s var(--ease-out);overflow:clip}.disclosure__content:is([data-reduce-motion=true],[data-reduce-motion=true] *),.disclosure__content:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.disclosure__content:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.disclosure__content:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.disclosure__content:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.disclosure__content:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.disclosure__content[data-expanded=true]{will-change:height,opacity;opacity:1}.disclosure__body{padding:calc(var(--spacing) * 2)}.link{border-radius:calc(var(--radius) * 1.5);--tw-font-weight:var(--font-weight-medium);width:fit-content;height:fit-content;font-weight:var(--font-weight-medium);color:var(--link);text-decoration-line:none;-webkit-text-decoration-color:var(--separator-tertiary);text-decoration-color:var(--separator-tertiary);text-underline-offset:4px;-webkit-tap-highlight-color:transparent;transition:color .1s var(--ease-smooth),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out),opacity .1s var(--ease-out);align-items:center;text-decoration-thickness:1.5px;display:inline-flex;position:relative}.link:is([data-reduce-motion=true],[data-reduce-motion=true] *),.link:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.link:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.link{cursor:var(--cursor-interactive)}@media(hover:hover){.link:hover,.link[data-hovered=true]{text-decoration-line:underline;-webkit-text-decoration-color:var(--muted);text-decoration-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.link:hover,.link[data-hovered=true]{-webkit-text-decoration-color:color-mix(in oklab,var(--muted) 50%,transparent);text-decoration-color:color-mix(in oklab,var(--muted) 50%,transparent)}}:is(.link:hover,.link[data-hovered=true]) .link__icon{opacity:1}}.link:active,.link[data-pressed=true]{text-decoration-line:underline;-webkit-text-decoration-color:var(--muted);text-decoration-color:var(--muted)}:is(.link:active,.link[data-pressed=true]) .link__icon{opacity:1}.link:focus-visible:not(:focus),.link[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}:is(.link:focus-visible:not(:focus),.link[data-focus-visible=true]) .link__icon{opacity:1}.link[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.link .link__icon{pointer-events:none;color:currentColor;opacity:.6;width:.75em;height:.75em;transition:opacity .15s var(--ease-out);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.link .link__icon:is([data-reduce-motion=true],[data-reduce-motion=true] *),.link .link__icon:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.link .link__icon:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.link .link__icon:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.link .link__icon:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.link .link__icon:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.link .link__icon svg{transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.link .link__icon[data-default-icon=true]{margin-left:var(--spacing);padding-bottom:calc(var(--spacing) * 1.5)}.link.button{gap:0;text-decoration-line:none}.pagination{justify-content:space-between;align-items:center;gap:calc(var(--spacing) * 4);flex-direction:column;width:100%;display:flex}@media(min-width:40rem){.pagination{flex-direction:row}}.pagination__summary{align-items:center;gap:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted);align-self:flex-start;display:flex}@media(min-width:40rem){.pagination__summary{align-self:center}}.pagination__content{align-items:center;gap:var(--spacing);align-self:flex-start;display:flex}@media(min-width:40rem){.pagination__content{align-self:center}}.pagination__item{display:inline-flex}.pagination__link{isolation:isolate;width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9);transform-origin:50%;border-radius:calc(var(--radius) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;justify-content:center;align-items:center;display:inline-flex;position:relative}@media(min-width:48rem){.pagination__link{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}}.pagination__link{cursor:var(--cursor-interactive);transition:transform .25s var(--ease-smooth),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.pagination__link:is([data-reduce-motion=true],[data-reduce-motion=true] *),.pagination__link:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.pagination__link:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.pagination__link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.pagination__link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.pagination__link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.pagination__link{--pagination-link-bg:transparent;--pagination-link-bg-hover:var(--default-hover);--pagination-link-bg-pressed:var(--default-hover);--pagination-link-fg:var(--default-foreground);background-color:var(--pagination-link-bg);color:var(--pagination-link-fg)}.pagination__link:focus-visible,.pagination__link[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.pagination__link:disabled,.pagination__link[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}@media(hover:hover){.pagination__link:hover,.pagination__link[data-hovered=true]{background-color:var(--pagination-link-bg-hover)}}.pagination__link:active,.pagination__link[data-pressed=true]{background-color:var(--pagination-link-bg-pressed);transform:scale(.97)}.pagination__link[data-active=true]{--pagination-link-bg:var(--default);--pagination-link-bg-hover:var(--default-hover);--pagination-link-bg-pressed:var(--default-hover)}.pagination__ellipsis{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted);-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;display:inline-flex}@media(min-width:48rem){.pagination__ellipsis{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}}.pagination__link--nav{gap:calc(var(--spacing) * 1.5);width:auto;padding-inline:calc(var(--spacing) * 2.5)}.pagination--sm .pagination__link{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}@media(min-width:48rem){.pagination--sm .pagination__link{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}}.pagination--sm .pagination__link:active,.pagination--sm .pagination__link[data-pressed=true]{transform:scale(.98)}.pagination--sm .pagination__link--nav{width:auto;padding-inline:calc(var(--spacing) * 2)}.pagination--sm .pagination__ellipsis{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}@media(min-width:48rem){.pagination--sm .pagination__ellipsis{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}}.pagination--sm .pagination__summary{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.pagination--lg .pagination__link{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media(min-width:48rem){.pagination--lg .pagination__link{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}}.pagination--lg .pagination__link:active,.pagination--lg .pagination__link[data-pressed=true]{transform:scale(.96)}.pagination--lg .pagination__link--nav{width:auto;padding-inline:calc(var(--spacing) * 3)}.pagination--lg .pagination__ellipsis{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media(min-width:48rem){.pagination--lg .pagination__ellipsis{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}}.pagination--lg .pagination__summary{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.tabs{gap:calc(var(--spacing) * 2);display:flex}.tabs[data-orientation=horizontal]{flex-direction:column}.tabs[data-orientation=vertical]{flex-direction:row}.tabs__list-container{position:relative}.tabs__list{background-color:var(--default);padding:var(--spacing);border-radius:calc(var(--radius) * 2.5);display:inline-flex}.tabs__list[data-orientation=horizontal]{flex-direction:row;width:100%}.tabs__list[data-orientation=vertical]{gap:var(--spacing);flex-direction:column}.tabs__list[data-orientation=vertical] .tabs__tab{min-width:calc(var(--spacing) * 20)}.tabs__tab{z-index:1;cursor:var(--cursor-interactive);height:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 3);width:100%;padding-inline:calc(var(--spacing) * 4);text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;transition:color .15s var(--ease-smooth),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out),opacity .15s var(--ease-smooth);outline-style:none;justify-content:center;align-items:center;display:flex;position:relative}.tabs__tab:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tabs__tab:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tabs__tab:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tabs__tab:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tabs__tab:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tabs__tab:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tabs__tab[data-selected=true]{color:var(--segment-foreground)}.tabs__tab[data-selected=true] .tabs__separator,.tabs__tab[data-selected=true]+.tabs__tab .tabs__separator{opacity:0}.tabs__tab:disabled,.tabs__tab[data-disabled=true],.tabs__tab[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}@media(hover:hover){.tabs__tab:not([data-selected=true]):not([data-disabled=true]):hover,.tabs__tab[data-hovered=true]:not([data-selected=true]):not([data-disabled=true]){opacity:.7}}.tabs__tab:focus-visible:not(:focus),.tabs__tab[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.tabs__separator{border-radius:calc(var(--radius) * .5);background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.tabs__separator{background-color:color-mix(in oklab,var(--muted) 25%,transparent)}}.tabs__separator{pointer-events:none;transition:opacity .15s var(--ease-smooth);position:absolute}.tabs__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tabs__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tabs__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tabs__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tabs__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tabs__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tabs__list[data-orientation=horizontal] .tabs__separator{width:1px;height:50%;top:25%;left:0}.tabs__list[data-orientation=vertical] .tabs__separator{width:90%;height:1px;top:0;left:5%}.tabs__panel{width:100%;padding:calc(var(--spacing) * 2);--tw-outline-style:none;outline-style:none}.tabs__panel[data-exiting=true]{width:100%;position:absolute;top:0;left:0}.tabs__panel[data-orientation=horizontal]{margin-top:calc(var(--spacing) * 4)}.tabs__panel[data-orientation=vertical]{margin-left:calc(var(--spacing) * 4)}.tabs__indicator{box-shadow:var(--shadow-surface);z-index:-1;border-radius:var(--radius-3xl);background-color:var(--segment);width:100%;height:100%;transition-property:translate,width,height;transition-duration:.25s;transition-timing-function:var(--ease-out-fluid);position:absolute;top:0;left:0}.tabs__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tabs__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tabs__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tabs__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tabs__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tabs__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tabs--secondary>.tabs__list-container>.tabs__list{background-color:#0000;border-radius:0;padding:0}.tabs--secondary>.tabs__list-container>.tabs__list[data-orientation=horizontal]{scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);max-width:100%;overflow:auto clip}.tabs--secondary>.tabs__list-container>.tabs__list[data-orientation=vertical]{border-left-style:var(--tw-border-style);border-left-width:1px;border-color:var(--border)}.tabs--secondary>.tabs__list-container .tabs__tab{border-radius:0}.tabs--secondary>.tabs__list-container .tabs__tab[data-selected=true]{color:var(--foreground)}.tabs--secondary>.tabs__list-container .tabs__separator{display:none}.tabs--secondary>.tabs__list-container .tabs__indicator{background-color:var(--accent);box-shadow:none;border-radius:0}.tabs--secondary[data-orientation=horizontal]>.tabs__list-container .tabs__indicator{height:2px;top:auto;bottom:0}.tabs--secondary[data-orientation=vertical]>.tabs__list-container .tabs__indicator{width:2px;height:100%;top:0;left:0}.button{isolation:isolate;height:calc(var(--spacing) * 10);transform-origin:50%;justify-content:center;align-items:center;gap:calc(var(--spacing) * 2);border-radius:calc(var(--radius) * 3);width:fit-content;padding-inline:calc(var(--spacing) * 4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex;position:relative}@media(min-width:48rem){.button{height:calc(var(--spacing) * 9)}}.button{transition:transform .25s var(--ease-smooth),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.button{cursor:var(--cursor-interactive);--button-bg:transparent;--button-bg-hover:var(--button-bg);--button-bg-pressed:var(--button-bg-hover);--button-fg:currentColor;background-color:var(--button-bg);color:var(--button-fg)}.button:focus-visible:not(:focus),.button[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.button:disabled,.button[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.button[data-pending=true]{pointer-events:none}.button:active,.button[data-pressed=true]{background-color:var(--button-bg-pressed);transform:scale(.97)}@media(hover:hover){.button:hover,.button[data-hovered=true]{background-color:var(--button-bg-hover)}}.button svg:not([data-slot=spinner] svg,[data-slot=link-icon] svg){pointer-events:none;margin-inline:calc(var(--spacing) * -.5);margin-block:calc(var(--spacing) * .5);width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);flex-shrink:0;align-self:center}@media(min-width:40rem){.button svg:not([data-slot=spinner] svg,[data-slot=link-icon] svg){margin-block:var(--spacing);width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}}.button--sm{height:calc(var(--spacing) * 9);padding-inline:calc(var(--spacing) * 3)}@media(min-width:48rem){.button--sm{height:calc(var(--spacing) * 8)}}.button--sm svg:not([data-slot=spinner] svg,[data-slot=link-icon] svg){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.button--sm:active,.button--sm[data-pressed=true]{transform:scale(.98)}.button--lg{height:calc(var(--spacing) * 11);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media(min-width:48rem){.button--lg{height:calc(var(--spacing) * 10)}}.button--lg:active,.button--lg[data-pressed=true]{transform:scale(.96)}.button--primary{--button-bg:var(--accent);--button-bg-hover:var(--accent-hover);--button-bg-pressed:var(--accent-hover);--button-fg:var(--accent-foreground)}.button--secondary{--button-bg:var(--default);--button-bg-hover:var(--default-hover);--button-bg-pressed:var(--default-hover);--button-fg:var(--accent-soft-foreground)}.button--tertiary{--button-bg:var(--default);--button-bg-hover:var(--default-hover);--button-bg-pressed:var(--default-hover)}.button--ghost,.button--outline{--button-bg:transparent;--button-bg-hover:var(--default);--button-bg-pressed:var(--default);--button-fg:var(--default-foreground)}.button--outline{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--button-bg-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){.button--outline{--button-bg-hover:color-mix(in srgb, var(--default) 60%, transparent)}}.button--danger{--button-bg:var(--danger);--button-bg-hover:var(--danger-hover);--button-bg-pressed:var(--danger-hover);--button-fg:var(--danger-foreground)}.button--danger-soft{--button-bg:var(--danger-soft);--button-bg-hover:var(--danger-soft-hover);--button-bg-pressed:var(--danger-soft-hover);--button-fg:var(--danger-soft-foreground)}.button--icon-only{width:calc(var(--spacing) * 10);padding:0}@media(min-width:48rem){.button--icon-only{width:calc(var(--spacing) * 9)}}.button--icon-only.button--sm{width:calc(var(--spacing) * 9)}@media(min-width:48rem){.button--icon-only.button--sm{width:calc(var(--spacing) * 8)}}.button--icon-only.button--lg{width:calc(var(--spacing) * 11)}@media(min-width:48rem){.button--icon-only.button--lg{width:calc(var(--spacing) * 10)}}.button--full-width{width:100%}.button-group{justify-content:center;align-items:center;gap:0;height:auto;display:inline-flex}.button-group--horizontal{flex-direction:row}.button-group--vertical{flex-direction:column}.button-group .button{border-radius:0}.button-group--horizontal .button:first-child{border-start-start-radius:calc(var(--radius) * 3);border-end-start-radius:calc(var(--radius) * 3)}.button-group--horizontal .button:last-child{border-start-end-radius:calc(var(--radius) * 3);border-end-end-radius:calc(var(--radius) * 3)}.button-group--horizontal .button:first-child:last-child{border-radius:calc(var(--radius) * 3)}.button-group--vertical .button:first-child{border-top-left-radius:calc(var(--radius) * 3);border-top-right-radius:calc(var(--radius) * 3)}.button-group--vertical .button:last-child{border-bottom-right-radius:calc(var(--radius) * 3);border-bottom-left-radius:calc(var(--radius) * 3)}.button-group--vertical .button:first-child:last-child{border-radius:calc(var(--radius) * 3)}.button-group .button:active,.button-group .button[data-pressed=true]{transform:none}.button-group .button:focus-visible:not(:focus),.button-group .button[data-focus-visible=true]{--tw-ring-offset-width:0px;--tw-ring-inset:inset}.button-group__separator{border-radius:calc(var(--radius) * .5);opacity:.15;pointer-events:none;transition:opacity .15s var(--ease-smooth);background-color:currentColor;position:absolute}.button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.button-group--horizontal .button-group__separator{width:1px;height:50%;top:25%;left:-1px}.button-group--vertical .button-group__separator{width:50%;height:1px;top:-1px;left:25%}.button-group--horizontal .button--outline:first-child{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.button-group--horizontal .button--outline:last-child{border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.button-group--horizontal .button--outline:not(:first-child):not(:last-child){border-inline-style:var(--tw-border-style);border-inline-width:0}.button-group--vertical .button--outline:first-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.button-group--vertical .button--outline:last-child{border-top-style:var(--tw-border-style);border-top-width:0}.button-group--vertical .button--outline:not(:first-child):not(:last-child){border-block-style:var(--tw-border-style);border-block-width:0}.button-group--full-width{width:100%}.toggle-button{isolation:isolate;height:calc(var(--spacing) * 10);transform-origin:50%;justify-content:center;align-items:center;gap:calc(var(--spacing) * 2);border-radius:calc(var(--radius) * 3);width:fit-content;padding-inline:calc(var(--spacing) * 4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex;position:relative}@media(min-width:48rem){.toggle-button{height:calc(var(--spacing) * 9)}}.toggle-button{transition:transform .25s var(--ease-smooth),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.toggle-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.toggle-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.toggle-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.toggle-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.toggle-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.toggle-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.toggle-button{cursor:var(--cursor-interactive);--toggle-button-bg:var(--default);--toggle-button-bg-hover:var(--default-hover);--toggle-button-bg-pressed:var(--default-hover);--toggle-button-fg:currentColor;--toggle-button-bg-selected:var(--accent-soft);--toggle-button-bg-selected-hover:var(--accent-soft-hover);--toggle-button-bg-selected-pressed:var(--accent-soft-hover);--toggle-button-fg-selected:var(--accent-soft-foreground);background-color:var(--toggle-button-bg);color:var(--toggle-button-fg)}.toggle-button:focus-visible:not(:focus),.toggle-button[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.toggle-button:disabled,.toggle-button[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}@media(hover:hover){.toggle-button:hover,.toggle-button[data-hovered=true]{background-color:var(--toggle-button-bg-hover)}}.toggle-button:active,.toggle-button[data-pressed=true]{background-color:var(--toggle-button-bg-pressed);transform:scale(.97)}.toggle-button[data-selected=true]{background-color:var(--toggle-button-bg-selected);color:var(--toggle-button-fg-selected)}@media(hover:hover){.toggle-button[data-selected=true]:hover,.toggle-button[data-selected=true][data-hovered=true]{background-color:var(--toggle-button-bg-selected-hover)}}.toggle-button[data-selected=true]:active,.toggle-button[data-selected=true][data-pressed=true]{background-color:var(--toggle-button-bg-selected-pressed)}.toggle-button svg{pointer-events:none;margin-inline:calc(var(--spacing) * -.5);margin-block:calc(var(--spacing) * .5);width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);flex-shrink:0;align-self:center}@media(min-width:40rem){.toggle-button svg{margin-block:var(--spacing);width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}}.toggle-button--sm{height:calc(var(--spacing) * 9);padding-inline:calc(var(--spacing) * 3)}@media(min-width:48rem){.toggle-button--sm{height:calc(var(--spacing) * 8)}}.toggle-button--sm svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.toggle-button--sm:active,.toggle-button--sm[data-pressed=true]{transform:scale(.98)}.toggle-button--lg{height:calc(var(--spacing) * 11);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media(min-width:48rem){.toggle-button--lg{height:calc(var(--spacing) * 10)}}.toggle-button--lg:active,.toggle-button--lg[data-pressed=true]{transform:scale(.96)}.toggle-button--default{--toggle-button-bg:var(--default);--toggle-button-bg-hover:var(--default-hover);--toggle-button-bg-pressed:var(--default-hover)}.toggle-button--ghost{--toggle-button-bg:transparent;--toggle-button-bg-hover:var(--default);--toggle-button-bg-pressed:var(--default);--toggle-button-fg:var(--default-foreground)}.toggle-button--icon-only{width:calc(var(--spacing) * 10);padding:0}@media(min-width:48rem){.toggle-button--icon-only{width:calc(var(--spacing) * 9)}}.toggle-button--icon-only.toggle-button--sm{width:calc(var(--spacing) * 9)}@media(min-width:48rem){.toggle-button--icon-only.toggle-button--sm{width:calc(var(--spacing) * 8)}}.toggle-button--icon-only.toggle-button--lg{width:calc(var(--spacing) * 11)}@media(min-width:48rem){.toggle-button--icon-only.toggle-button--lg{width:calc(var(--spacing) * 10)}}.toggle-button-group{justify-content:center;align-items:center;gap:0;width:fit-content;height:auto;display:inline-flex}.toggle-button-group--horizontal{flex-direction:row}.toggle-button-group--vertical{flex-direction:column}.toggle-button-group--full-width{width:100%}.toggle-button-group .toggle-button{border-radius:0}.toggle-button-group--horizontal .toggle-button:first-child{border-start-start-radius:calc(var(--radius) * 3);border-end-start-radius:calc(var(--radius) * 3)}.toggle-button-group--horizontal .toggle-button:last-child{border-start-end-radius:calc(var(--radius) * 3);border-end-end-radius:calc(var(--radius) * 3)}.toggle-button-group--horizontal .toggle-button:first-child:last-child{border-radius:calc(var(--radius) * 3)}.toggle-button-group--vertical .toggle-button:first-child{border-top-left-radius:calc(var(--radius) * 3);border-top-right-radius:calc(var(--radius) * 3)}.toggle-button-group--vertical .toggle-button:last-child{border-bottom-right-radius:calc(var(--radius) * 3);border-bottom-left-radius:calc(var(--radius) * 3)}.toggle-button-group--vertical .toggle-button:first-child:last-child{border-radius:calc(var(--radius) * 3)}.toggle-button-group .toggle-button:active,.toggle-button-group .toggle-button[data-pressed=true]{transform:none}.toggle-button-group .toggle-button:focus-visible:not(:focus),.toggle-button-group .toggle-button[data-focus-visible=true]{--tw-ring-offset-width:0px;--tw-ring-inset:inset}.toggle-button-group--full-width .toggle-button{flex:1}.toggle-button-group__separator{border-radius:calc(var(--radius) * .5);opacity:.15;pointer-events:none;transition:opacity .15s var(--ease-smooth);background-color:currentColor;position:absolute}.toggle-button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.toggle-button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.toggle-button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.toggle-button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.toggle-button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.toggle-button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.toggle-button-group--horizontal .toggle-button-group__separator{width:1px;height:50%;top:25%;left:-1px}.toggle-button-group--vertical .toggle-button-group__separator{width:50%;height:1px;top:-1px;left:25%}.toggle-button-group--detached{gap:var(--spacing)}.toggle-button-group--detached .toggle-button{border-radius:calc(var(--radius) * 3)}.toggle-button-group--detached .toggle-button-group__separator{display:none}.toolbar{align-items:center;gap:calc(var(--spacing) * 2);grid-auto-flow:column;width:fit-content;display:grid}.toolbar .separator--vertical{align-self:center;height:50%}.toolbar .separator--horizontal{justify-content:center;justify-self:center;width:50%}.toolbar--vertical{grid-auto-flow:row;justify-content:flex-start;align-items:flex-start}.toolbar--vertical .button-group{justify-content:flex-start}.toolbar--attached{border-radius:calc(var(--radius) * 3);background-color:var(--surface);padding:var(--spacing);--tw-shadow:var(--overlay-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dropdown{gap:var(--spacing);flex-direction:column;display:flex}.dropdown__trigger{--tw-outline-style:none;transition:transform .25s var(--ease-out-quart),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);outline-style:none;display:inline-block}.dropdown__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.dropdown__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.dropdown__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.dropdown__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.dropdown__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.dropdown__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.dropdown__trigger{cursor:var(--cursor-interactive)}.dropdown__trigger:focus-visible:not(:focus),.dropdown__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.dropdown__trigger:disabled,.dropdown__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.dropdown__trigger[data-pending=true]{pointer-events:none}.dropdown__trigger:active,.dropdown__trigger[data-pressed=true]{transform:scale(.97)}.dropdown__popover{max-width:48svw;transform-origin:var(--trigger-anchor-point);scroll-padding-block:var(--spacing);scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overscroll-behavior:contain;background-color:var(--overlay);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding:0;overflow-y:auto}@media(min-width:48rem){.dropdown__popover{min-width:calc(var(--spacing) * 55)}}.dropdown__popover{border-radius:min(32px,var(--radius-3xl));box-shadow:var(--shadow-overlay)}.dropdown__popover:focus-visible:not(:focus),.dropdown__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.dropdown__popover[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.9;transition-duration:.15s;transition-timing-function:ease}.dropdown__popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.dropdown__popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.dropdown__popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.dropdown__popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.dropdown__popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.dropdown__popover[data-exiting=true],.dropdown__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.dropdown__popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.dropdown__popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.dropdown__popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.dropdown__popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.dropdown__popover [data-slot=dropdown-menu]{padding:calc(var(--spacing) * 1.5);--tw-outline-style:none;outline-style:none}.dropdown__popover [data-slot=menu-item]{padding-inline:calc(var(--spacing) * 2.5)}.dropdown__menu{gap:calc(var(--spacing) * .5);width:100%;padding:var(--spacing);flex-direction:column;display:flex;position:relative;overflow:clip}.dropdown__menu [data-slot=separator]{width:94%;margin-left:3%}.list-box-item{min-height:calc(var(--spacing) * 9);justify-content:flex-start;align-items:center;gap:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * 2);width:100%;padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1.5);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;transition:transform .25s var(--ease-out-quart),box-shadow .15s var(--ease-out);outline-style:none;display:flex;position:relative}.list-box-item:is([data-reduce-motion=true],[data-reduce-motion=true] *),.list-box-item:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.list-box-item:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.list-box-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.list-box-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.list-box-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.list-box-item{cursor:var(--cursor-interactive)}.list-box-item [data-slot=label]{pointer-events:none;-webkit-user-select:none;user-select:none;width:fit-content}.list-box-item [data-slot=description]{pointer-events:none;text-wrap:wrap;-webkit-user-select:none;user-select:none}.list-box-item:has(.list-box-item__indicator){padding-inline-end:calc(var(--spacing) * 7)}.list-box-item:focus-visible:not(:focus),.list-box-item[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.list-box-item:active,.list-box-item[data-pressed=true]{transform:scale(.98)}@media(hover:hover){.list-box-item:hover,.list-box-item[data-hovered=true]{background-color:var(--default)}}.list-box-item[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.list-box-item__indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);color:var(--default-foreground);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;inset-inline-end:calc(var(--spacing) * 2);flex-shrink:0;justify-content:center;align-items:center;transition-duration:.25s;display:flex;position:absolute;top:50%}.list-box-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.list-box-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.list-box-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.list-box-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.list-box-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.list-box-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *),.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]{transition:stroke-dashoffset .25s linear}:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.list-box-item--danger .list-box-item__indicator,.list-box-item--danger [data-slot=label]{color:var(--danger)}.list-box-section{flex-direction:column;align-items:flex-start;gap:0;display:flex}.list-box{width:100%;padding:var(--spacing);position:relative;overflow:clip}.list-box>*+*{margin-top:var(--spacing)}.list-box [data-slot=separator][data-orientation=horizontal]{width:94%;margin-left:3%}.menu-item{min-height:calc(var(--spacing) * 9);justify-content:flex-start;align-items:center;gap:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * 2);width:100%;padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1.5);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;transition:transform .25s var(--ease-out-quart),box-shadow .15s var(--ease-out);outline-style:none;display:flex;position:relative}.menu-item:is([data-reduce-motion=true],[data-reduce-motion=true] *),.menu-item:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.menu-item:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.menu-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.menu-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.menu-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.menu-item{cursor:var(--cursor-interactive)}.menu-item [data-slot=label]{pointer-events:none;-webkit-user-select:none;user-select:none;width:fit-content}.menu-item [data-slot=description]{pointer-events:none;text-wrap:wrap;-webkit-user-select:none;user-select:none}.menu-item [data-slot=submenu-indicator] svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.menu-item:has(.menu-item__indicator){padding-inline-start:calc(var(--spacing) * 7)}.menu-item[data-has-submenu=true]:has(.menu-item__indicator){padding-inline-start:calc(var(--spacing) * 2);padding-inline-end:calc(var(--spacing) * 7)}.menu-item:focus-visible:not(:focus),.menu-item[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.menu-item:active,.menu-item[data-pressed=true]{transform:scale(.98)}@media(hover:hover){.menu-item:hover,.menu-item[data-hovered=true]{background-color:var(--default)}}:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]{transition:stroke-dashoffset .1s linear}:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--dot]{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:1}.menu-item[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.menu-item__indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);color:var(--muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;inset-inline-start:calc(var(--spacing) * 2);flex-shrink:0;justify-content:center;align-items:center;transition-duration:.25s;display:flex;position:absolute;top:50%}.menu-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.menu-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.menu-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.menu-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.menu-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.menu-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.menu-item[data-has-submenu=true] .menu-item__indicator{inset-inline-start:auto;inset-inline-end:calc(var(--spacing) * 2)}.menu-item__indicator [data-slot=menu-item-indicator--checkmark]{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]){transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *),.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.menu-item__indicator [data-slot=menu-item-indicator--dot]{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]){transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;transition-duration:.25s}.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):is([data-reduce-motion=true],[data-reduce-motion=true] *),.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.menu-item__indicator [data-slot=menu-item-indicator--dot]{--tw-scale-x:70%;--tw-scale-y:70%;--tw-scale-z:70%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:0}.menu-item__indicator--submenu{color:var(--muted)}.menu-item__indicator--submenu svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.menu-item--danger .menu-item__indicator,.menu-item--danger [data-slot=label]{color:var(--danger)}.menu-section{flex-direction:column;align-items:flex-start;gap:0;display:flex}.menu{gap:var(--spacing);width:100%;padding:var(--spacing);flex-direction:column;display:flex;position:relative;overflow:clip}.menu [data-slot=separator]{width:94%;margin-left:3%}.tag-group{gap:var(--spacing);flex-direction:column;display:flex;position:relative}.tag-group__list{gap:calc(var(--spacing) * 1.5);flex-wrap:wrap;display:flex;position:relative}.tag-group [slot=description],.tag-group [data-slot=description],.tag-group [slot=errorMessage],.tag-group [data-slot=error-message]{padding:var(--spacing)}.tag{--optical-offset:.031em;align-items:center;gap:var(--spacing);border-radius:calc(var(--radius) * 1.5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:color .1s var(--ease-smooth),scale .1s var(--ease-smooth),opacity .1s var(--ease-smooth),background-color .1s var(--ease-smooth),box-shadow .1s var(--ease-out);transform-origin:50%;transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);display:inline-flex;position:relative}.tag:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tag:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tag:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tag:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tag:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tag:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tag{cursor:var(--cursor-interactive)}.tag svg{pointer-events:none;width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);color:currentColor;flex-shrink:0;align-self:center}.tag:is([data-disabled=true],[aria-disabled=true]){opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.tag:is(:focus-visible,[data-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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.tag:is([data-selected=true],[aria-selected=true]){background-color:var(--accent-soft);color:var(--accent-soft-foreground)}@media(hover:hover){.tag:is([data-selected=true],[aria-selected=true]):is(:hover,[data-hovered=true]){background-color:var(--accent-soft-hover)}}.tag--sm{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.tag--md{padding-inline:calc(var(--spacing) * 2);padding-block:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.tag--lg{border-radius:calc(var(--radius) * 2);padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.tag--default{background-color:var(--default);color:var(--default-foreground)}@media(hover:hover){.tag--default:is(:hover,[data-hovered=true]):not([data-selected=true]):not([data-disabled=true]){background-color:var(--default-hover)}}.tag--surface{background-color:var(--surface);color:var(--surface-foreground)}@media(hover:hover){.tag--surface:is(:hover,[data-hovered=true]):not([data-selected=true]):not([data-disabled=true]){background-color:var(--surface-hover)}}.tag__remove-button{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);color:inherit}.tag__remove-button svg{width:inherit;height:inherit;color:currentColor;flex-shrink:0;align-self:center}.color-area{width:100%;max-width:calc(var(--spacing) * 56);border-radius:calc(var(--radius) * 2);-webkit-tap-highlight-color:transparent;aspect-ratio:1;background:var(--color-area-background);flex-shrink:0;position:relative;box-shadow:inset 0 0 0 1px #0000001a}.color-area[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-area--show-dots:after{content:"";pointer-events:none;border-radius:inherit;background-image:radial-gradient(circle,#fff3 1px,#0000 1px);background-size:8px 8px;position:absolute;top:0;right:0;bottom:0;left:0}.color-area__thumb{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1.5);will-change:width,height;background-color:var(--color-area-thumb-color);transition:width .15s var(--ease-out),height .15s var(--ease-out);border:3px solid #fff;box-shadow:0 0 0 1px #0000001a,inset 0 0 0 1px #0000001a}.color-area__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-area__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-area__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-area__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-area__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-area__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-area__thumb[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.color-area__thumb[data-dragging=true]{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.color-area__thumb[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-picker{display:inline-flex}.color-picker__trigger{align-items:center;gap:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * .5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-flex}.color-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-picker__trigger [data-slot=label]{cursor:var(--cursor-interactive)}.color-picker__trigger:focus-visible:not(:focus),.color-picker__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.color-picker__trigger:disabled,.color-picker__trigger[data-disabled=true],.color-picker__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-picker__popover{min-width:calc(var(--spacing) * 62);transform-origin:var(--trigger-anchor-point);scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;overscroll-behavior:contain;background-color:var(--overlay);padding-inline:calc(var(--spacing) * 2);padding-top:calc(var(--spacing) * 2);padding-bottom:calc(var(--spacing) * 3);box-shadow:var(--shadow-overlay);border-radius:min(32px,calc(var(--radius) * 2.5));gap:calc(var(--spacing) * 3);flex-direction:column;display:flex;overflow:hidden auto}.color-picker__popover:focus-visible:not(:focus),.color-picker__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.color-picker__popover[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.color-picker__popover[data-entering=true][data-placement^=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.color-picker__popover[data-entering=true][data-placement^=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.color-picker__popover[data-entering=true][data-placement^=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.color-picker__popover[data-entering=true][data-placement^=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.color-picker__popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.color-picker__popover[data-exiting=true],.color-picker__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.color-slider{gap:var(--spacing);grid-template:"label output""track track"/1fr auto;width:100%;display:grid}.color-slider:not(:has([data-slot=label])):not(:has(.color-slider__output)){grid-template:"track"/1fr;gap:0}.color-slider:has([data-slot=label]):not(:has(.color-slider__output)){grid-template-columns:1fr;grid-template-areas:"label""track"}.color-slider:not(:has([data-slot=label])):has(.color-slider__output){grid-template-columns:1fr;grid-template-areas:"output""track"}.color-slider:not(:has([data-slot=label])):has(.color-slider__output) .color-slider__output{justify-self:end}.color-slider [data-slot=label]{width:fit-content;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);grid-area:label}.color-slider .color-slider__output{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--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,);grid-area:output}.color-slider .color-slider__track{border-radius:calc(var(--radius) * 2);grid-area:track;position:relative}.color-slider .color-slider__track:before,.color-slider .color-slider__track:after{content:"";z-index:0;pointer-events:none;position:absolute}.color-slider .color-slider__thumb{cursor:grab;border-radius:calc(var(--radius) * 2);-webkit-tap-highlight-color:transparent;border-style:var(--tw-border-style);border-width:3px;border-color:var(--color-white);--tw-shadow:var(--overlay-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);z-index:1;transition:transform .25s var(--ease-out),box-shadow .15s var(--ease-out);justify-content:center;align-items:center;display:flex;position:absolute}.color-slider .color-slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-slider .color-slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-slider .color-slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-slider .color-slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-slider .color-slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-slider .color-slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-slider .color-slider__thumb[data-dragging=true]{cursor:grabbing}.color-slider .color-slider__thumb[data-focus-visible=true]{z-index:10;--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.color-slider .color-slider__thumb[data-disabled=true]{cursor:default;background-color:var(--default)}.color-slider:disabled,.color-slider[data-disabled=true],.color-slider[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.color-slider:disabled,.color-slider[data-disabled=true],.color-slider[aria-disabled=true]) [data-slot=label]{opacity:1}.color-slider[data-orientation=horizontal]{flex-direction:column}.color-slider[data-orientation=horizontal] .color-slider__track{height:calc(var(--spacing) * 5);border-radius:0;justify-self:center;width:calc(100% - 1.25rem);box-shadow:inset 0 1px #0000001a,inset 0 -1px #0000001a}.color-slider[data-orientation=horizontal] .color-slider__track:before,.color-slider[data-orientation=horizontal] .color-slider__track:after{width:.625rem;height:100%;top:0}.color-slider[data-orientation=horizontal] .color-slider__track:before{border-top-left-radius:calc(var(--radius) * 2);border-bottom-left-radius:calc(var(--radius) * 2);background:linear-gradient(var(--track-start-color,transparent)),repeating-conic-gradient(#efefef,#efefef 25%,#f7f7f7 0%,#f7f7f7 50%) 50% / 16px 16px;left:-.625rem;box-shadow:inset 1px 0 #0000001a,inset 0 1px #0000001a,inset 0 -1px #0000001a}.color-slider[data-orientation=horizontal] .color-slider__track:after{border-top-right-radius:calc(var(--radius) * 2);border-bottom-right-radius:calc(var(--radius) * 2);background-color:var(--track-end-color,transparent);right:-.625rem;box-shadow:inset -1px 0 #0000001a,inset 0 1px #0000001a,inset 0 -1px #0000001a}.color-slider[data-orientation=horizontal] .color-slider__thumb{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);top:50%}.color-slider[data-orientation=vertical]{gap:calc(var(--spacing) * 2);flex-direction:row;grid-template:"output""track"1fr"label"/1fr;place-items:center;height:100%}.color-slider[data-orientation=vertical]:not(:has([data-slot=label])):not(:has(.color-slider__output)){grid-template-rows:1fr;grid-template-areas:"track";gap:0}.color-slider[data-orientation=vertical]:has([data-slot=label]):not(:has(.color-slider__output)){grid-template-rows:1fr auto;grid-template-areas:"track""label"}.color-slider[data-orientation=vertical]:not(:has([data-slot=label])):has(.color-slider__output){grid-template-rows:auto 1fr;grid-template-areas:"output""track"}.color-slider[data-orientation=vertical] .color-slider__output,.color-slider[data-orientation=vertical] [data-slot=label]{text-align:center}.color-slider[data-orientation=vertical] .color-slider__track{width:calc(var(--spacing) * 5);border-radius:0;justify-self:center;height:calc(100% - 1.25rem);box-shadow:inset 1px 0 #0000001a,inset -1px 0 #0000001a}.color-slider[data-orientation=vertical] .color-slider__track:before,.color-slider[data-orientation=vertical] .color-slider__track:after{width:100%;height:.625rem;left:0}.color-slider[data-orientation=vertical] .color-slider__track:before{background:linear-gradient(var(--track-start-color,transparent)),repeating-conic-gradient(#efefef,#efefef 25%,#f7f7f7 0%,#f7f7f7 50%) 50% / 16px 16px;border-bottom-right-radius:999px;border-bottom-left-radius:999px;bottom:-.625rem;box-shadow:inset 1px 0 #0000001a,inset -1px 0 #0000001a,inset 0 -1px #0000001a}.color-slider[data-orientation=vertical] .color-slider__track:after{background-color:var(--track-end-color,transparent);border-top-left-radius:999px;border-top-right-radius:999px;top:-.625rem;box-shadow:inset 1px 0 #0000001a,inset -1px 0 #0000001a,inset 0 1px #0000001a}.color-slider[data-orientation=vertical] .color-slider__thumb{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);left:50%}.color-swatch{box-sizing:border-box;width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);background:linear-gradient(var(--color-swatch-current),var(--color-swatch-current)),repeating-conic-gradient(#efefef,#efefef 25%,#f7f7f7 0%,#f7f7f7 50%) 50% / 16px 16px;flex-shrink:0;position:relative;box-shadow:inset 0 0 0 1px #0000001a}.color-swatch--circle{border-radius:calc(var(--radius) * 2)}.color-swatch--square{border-radius:calc(var(--radius) * .75)}.color-swatch--xs{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.color-swatch--xs.color-swatch--circle{border-radius:calc(var(--radius) * 1)}.color-swatch--sm{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.color-swatch--sm.color-swatch--circle{border-radius:calc(var(--radius) * 1.5)}.color-swatch--lg{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.color-swatch--lg.color-swatch--circle{border-radius:calc(var(--radius) * 3)}.color-swatch--xl{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.color-swatch--xl.color-swatch--circle{border-radius:calc(var(--radius) * 3)}.color-swatch-picker{align-items:center;gap:calc(var(--spacing) * 2);flex-wrap:wrap;display:flex}.color-swatch-picker__item{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 2);border-style:var(--tw-border-style);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:border-color .1s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);border-width:2px;border-color:#0000;outline-style:none;justify-content:center;align-items:center;display:flex;position:relative}.color-swatch-picker__item:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-swatch-picker__item:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-swatch-picker__item:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-swatch-picker__item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-swatch-picker__item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-swatch-picker__item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-swatch-picker__item:focus-visible,.color-swatch-picker__item[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.color-swatch-picker__item[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-swatch-picker__item[data-selected=true]{border-color:var(--color-swatch-current);box-shadow:var(--field-shadow)}.color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{transform:scale(.77)}.color-swatch-picker__swatch{border-radius:inherit;width:100%;height:100%;transition:transform .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);display:block}.color-swatch-picker__swatch:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-swatch-picker__swatch:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-swatch-picker__swatch:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-swatch-picker__swatch:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-swatch-picker__swatch:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-swatch-picker__swatch:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.color-swatch-picker__swatch:hover{transform:scale(1.1)}}.color-swatch-picker__indicator{pointer-events:none;z-index:10;justify-content:center;align-items:center;display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.color-swatch-picker__indicator>*{width:33.3333%;height:33.3333%;color:var(--color-white);transition:transform .15s var(--ease-out);transform:scale(0)translateZ(0)}.color-swatch-picker__indicator>:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-swatch-picker__indicator>:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-swatch-picker__indicator>:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-swatch-picker__indicator>:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-swatch-picker__indicator>:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-swatch-picker__indicator>:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-swatch-picker__indicator[data-light-color=true] .color-swatch-picker__indicator>*{color:var(--color-black)}.color-swatch-picker__item[data-selected=true] .color-swatch-picker__indicator>*{transform:scale(1)translateZ(0)}.color-swatch-picker--stack{flex-direction:column}.color-swatch-picker--xs .color-swatch-picker__item{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1);border-style:var(--tw-border-style);border-width:1px}.color-swatch-picker--sm .color-swatch-picker__item{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6);border-radius:calc(var(--radius) * 1.5);border-style:var(--tw-border-style);border-width:2px}.color-swatch-picker--lg .color-swatch-picker__item{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9);border-radius:calc(var(--radius) * 3);border-style:var(--tw-border-style);border-width:3px}.color-swatch-picker--xl .color-swatch-picker__item{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);border-radius:calc(var(--radius) * 3);border-style:var(--tw-border-style);border-width:3px}.color-swatch-picker--square .color-swatch-picker__item{border-radius:calc(var(--radius) * 1.5)}.color-swatch-picker--square .color-swatch-picker__item .color-swatch-picker__swatch,.color-swatch-picker--square .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * 1)}.color-swatch-picker--square.color-swatch-picker--xs .color-swatch-picker__item,.color-swatch-picker--square.color-swatch-picker--xs .color-swatch-picker__item .color-swatch-picker__swatch,.color-swatch-picker--square.color-swatch-picker--xs .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * .75)}.color-swatch-picker--square.color-swatch-picker--sm .color-swatch-picker__item,.color-swatch-picker--square.color-swatch-picker--sm .color-swatch-picker__item .color-swatch-picker__swatch{border-radius:calc(var(--radius) * 1)}.color-swatch-picker--square.color-swatch-picker--sm .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * .75)}.color-swatch-picker--square.color-swatch-picker--lg .color-swatch-picker__item{border-radius:calc(var(--radius) * 1.5)}.color-swatch-picker--square.color-swatch-picker--lg .color-swatch-picker__item .color-swatch-picker__swatch,.color-swatch-picker--square.color-swatch-picker--lg .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * 1)}.color-swatch-picker--square.color-swatch-picker--xl .color-swatch-picker__item{border-radius:calc(var(--radius) * 1.5)}.color-swatch-picker--square.color-swatch-picker--xl .color-swatch-picker__item .color-swatch-picker__swatch,.color-swatch-picker--square.color-swatch-picker--xl .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * 1)}.color-input-group{height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);outline-style:none;align-items:center;display:inline-flex;overflow:hidden}.color-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.color-input-group:hover:not(:focus-within),.color-input-group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.color-input-group[data-focus-within=true],.color-input-group:focus-within{--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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;outline-style:none}.color-input-group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.color-input-group[data-invalid=true]:focus,.color-input-group[data-invalid=true]:focus-visible,.color-input-group[data-invalid=true][data-focused=true],.color-input-group[data-invalid=true][data-focus-visible=true],.color-input-group[data-invalid=true]:focus-within,.color-input-group[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.color-input-group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.color-input-group[data-disabled=true],.color-input-group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-input-group__input{cursor:text;border-style:var(--tw-border-style);height:100%;padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--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);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none;flex:1;align-items:center;display:flex}@media(min-width:40rem){.color-input-group__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.color-input-group__input::placeholder{color:var(--field-placeholder,var(--muted))}.color-input-group:has([data-slot=color-input-group-prefix]) .color-input-group__input{padding-left:calc(var(--spacing) * 2);border-top-left-radius:0;border-bottom-left-radius:0}.color-input-group:has([data-slot=color-input-group-suffix]) .color-input-group__input{padding-right:calc(var(--spacing) * 2);border-top-right-radius:0;border-bottom-right-radius:0}.color-input-group__input:focus,.color-input-group__input:focus-visible{--tw-outline-style:none;outline-style:none}.color-input-group__prefix{color:var(--field-placeholder,var(--muted));margin-right:0;margin-left:calc(var(--spacing) * 3);flex-shrink:0;align-items:center;display:flex}.color-input-group__suffix{color:var(--field-placeholder,var(--muted));margin-right:calc(var(--spacing) * 3);flex-shrink:0;align-items:center;display:flex}.color-input-group--secondary{--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);background-color:var(--color-input-group-bg);--color-input-group-bg:var(--default);--color-input-group-bg-hover:var(--default-hover);--color-input-group-bg-focus:var(--default)}@media(hover:hover){.color-input-group--secondary:hover:not(:focus-within),.color-input-group--secondary[data-hovered=true]:not([data-focus-within=true]){background-color:var(--color-input-group-bg-hover)}}.color-input-group--secondary:focus-within,.color-input-group--secondary[data-focus-within=true]{background-color:var(--color-input-group-bg-focus)}.color-input-group--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.color-input-group--secondary[data-invalid=true]:focus,.color-input-group--secondary[data-invalid=true]:focus-visible,.color-input-group--secondary[data-invalid=true][data-focused=true],.color-input-group--secondary[data-invalid=true][data-focus-visible=true],.color-input-group--secondary[data-invalid=true]:focus-within,.color-input-group--secondary[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.color-input-group--secondary[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--color-input-group-bg-focus)}.color-input-group--secondary [data-slot=color-input-group-input]{background-color:#0000}.color-input-group--full-width{width:100%}.color-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.color-field[data-invalid=true],.color-field[aria-invalid=true]) [data-slot=description]{display:none}.color-field [data-slot=label]{width:fit-content}.color-field--full-width{width:100%}.slider{gap:var(--spacing);grid-template-columns:1fr auto;grid-template-areas:"label output""track track";width:100%;display:grid}.slider [data-slot=label]{width:fit-content;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);grid-area:label}.slider .slider__output{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--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,);grid-area:output}.slider .slider__track{border-radius:calc(var(--radius) * 1.5);background-color:var(--default);grid-area:track;position:relative}.slider .slider__fill{pointer-events:none;background-color:var(--accent);position:absolute}.slider .slider__thumb{cursor:grab;border-radius:calc(var(--radius) * 1.5);background-color:var(--accent);-webkit-tap-highlight-color:transparent;transition:background-color .25s var(--ease-smooth),transform .25s var(--ease-out),box-shadow .15s var(--ease-out);justify-content:center;align-items:center;display:flex;position:absolute}.slider .slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *),.slider .slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.slider .slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.slider .slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.slider .slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.slider .slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.slider .slider__thumb:after{z-index:10;border-radius:calc(var(--radius) * 1);background-color:var(--accent-foreground);color:var(--color-black);--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);content:"";transform-origin:50%;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:relative}@media(prefers-reduced-motion:reduce){.slider .slider__thumb:after:not(:is()){transition-property:none}}.slider .slider__thumb[data-dragging=true]{cursor:grabbing}.slider .slider__thumb[data-dragging=true]:after{scale:.9}@media(prefers-reduced-motion:reduce){.slider .slider__thumb[data-dragging=true]:after:not(:is()){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}}.slider .slider__thumb[data-focus-visible=true]{z-index:10;--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.slider .slider__thumb[data-disabled=true]{cursor:default}.slider:disabled,.slider[data-disabled=true],.slider[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.slider:disabled,.slider[data-disabled=true],.slider[aria-disabled=true]) [data-slot=label]{opacity:1}.slider[data-orientation=horizontal]{flex-direction:column}.slider[data-orientation=horizontal] .slider__track{height:calc(var(--spacing) * 5);border-inline-style:var(--tw-border-style);border-inline-width:.75rem;border-inline-color:#0000;width:100%}.slider[data-orientation=horizontal] .slider__track[data-fill-start=true]{border-inline-start-color:var(--accent)}.slider[data-orientation=horizontal] .slider__track[data-fill-end=true]{border-inline-end-color:var(--accent)}.slider[data-orientation=horizontal] .slider__fill,.slider[data-orientation=horizontal] .slider__thumb{height:100%}.slider[data-orientation=horizontal] .slider__thumb{width:1.75rem;top:50%}.slider[data-orientation=horizontal] .slider__thumb:after{width:1.5rem;height:1rem}.slider[data-orientation=vertical]{gap:calc(var(--spacing) * 2);flex-direction:row;grid-template:"output""track"1fr"label"/1fr;height:100%}.slider[data-orientation=vertical] .slider__output,.slider[data-orientation=vertical] [data-slot=label]{text-align:center}.slider[data-orientation=vertical] .slider__track{height:100%;width:calc(var(--spacing) * 5);border-block-style:var(--tw-border-style);border-block-width:.75rem;border-block-color:#0000;justify-self:center}.slider[data-orientation=vertical] .slider__track[data-fill-start=true]{border-bottom-color:var(--accent)}.slider[data-orientation=vertical] .slider__track[data-fill-end=true]{border-top-color:var(--accent)}.slider[data-orientation=vertical] .slider__fill,.slider[data-orientation=vertical] .slider__thumb{width:100%}.slider[data-orientation=vertical] .slider__thumb{height:1.75rem;left:50%}.slider[data-orientation=vertical] .slider__thumb:after{width:1rem;height:1.5rem}.switch{align-items:flex-start;gap:var(--spacing);-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);--switch-control-bg:var(--default);--switch-control-bg-hover:var(--switch-control-bg);flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.switch{--switch-control-bg-hover:color-mix(in oklab, var(--switch-control-bg), transparent 20%)}}.switch{--switch-control-bg-pressed:var(--switch-control-bg-hover);--switch-control-bg-checked:var(--accent);--switch-control-bg-checked-hover:var(--accent-hover)}.switch[data-disabled=true],.switch[data-disabled=true] [data-slot=description],.switch[data-disabled=true] [data-slot=field-error]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.switch[data-disabled=true] .switch__thumb{background-color:var(--default-foreground)}@supports (color:color-mix(in lab,red,red)){.switch[data-disabled=true] .switch__thumb{background-color:color-mix(in oklab,var(--default-foreground) 20%,transparent)}}.switch>[data-slot=description]{width:100%;min-width:0;padding-inline-start:3.25rem}.switch>[data-slot=field-error]{width:100%;min-width:0;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--muted);padding-inline-start:3.25rem}.switch.switch--sm>[data-slot=description],.switch.switch--sm>[data-slot=field-error]{padding-inline-start:2.75rem}.switch.switch--lg>[data-slot=description],.switch.switch--lg>[data-slot=field-error]{padding-inline-start:3.75rem}:is(.switch:disabled[aria-checked=true],.switch:disabled[data-selected=true],.switch[data-disabled=true][aria-checked=true],.switch[data-disabled=true][data-selected=true],.switch[aria-disabled=true][aria-checked=true],.switch[aria-disabled=true][data-selected=true]) .switch__thumb{opacity:.4}.switch__control{border-radius:calc(var(--radius) * 1.5);background-color:var(--switch-control-bg);width:2.5rem;height:1.25rem;transition:background-color .25s var(--ease-smooth),box-shadow .15s var(--ease-out);flex-shrink:0;align-items:center;display:flex;position:relative;overflow:hidden}.switch__control:is([data-reduce-motion=true],[data-reduce-motion=true] *),.switch__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.switch__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.switch__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.switch__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.switch__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.switch:focus-visible .switch__control,.switch:has([data-slot=switch-content][data-focus-visible=true]) .switch__control,.switch [data-slot=switch-content][data-focus-visible=true] .switch__control{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.switch:hover .switch__control,.switch:has([data-slot=switch-content][data-hovered=true]) .switch__control,.switch [data-slot=switch-content][data-hovered=true] .switch__control{background-color:var(--switch-control-bg-hover)}.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control{background-color:var(--switch-control-bg-pressed)}:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transform:none}@media(prefers-reduced-motion:reduce){:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transform:none}}.switch[aria-checked=true] .switch__control,.switch[data-selected=true] .switch__control{background-color:var(--switch-control-bg-checked)}.switch[aria-checked=true]:hover .switch__control,.switch[data-selected=true]:hover .switch__control,.switch[aria-checked=true][data-hovered=true] .switch__control,.switch[data-selected=true][data-hovered=true] .switch__control,.switch:has([data-slot=switch-content][data-hovered=true])[data-selected=true] .switch__control,.switch[aria-checked=true]:active .switch__control,.switch[data-selected=true]:active .switch__control,.switch[aria-checked=true][data-pressed=true] .switch__control,.switch[data-selected=true][data-pressed=true] .switch__control,.switch:has([data-slot=switch-content][data-pressed=true])[data-selected=true] .switch__control{background-color:var(--switch-control-bg-checked-hover)}.switch__content{cursor:inherit;align-items:center;gap:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex}.switch--sm .switch__control{border-radius:calc(var(--radius) * 1);width:2rem;height:1rem}.switch--lg .switch__control{width:3rem;height:1.5rem}.switch__thumb{transform-origin:50%;border-radius:calc(var(--radius) * 1);background-color:var(--color-white);color:var(--color-black);--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);width:1.375rem;height:1rem;transition:margin .3s var(--ease-out-fluid),background-color .2s var(--ease-out);margin-inline-start:calc(var(--spacing) * .5);display:flex}.switch__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *),.switch__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.switch__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.switch__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.switch__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.switch__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.switch[aria-checked=true] .switch__thumb,.switch[data-selected=true] .switch__thumb{background-color:var(--accent-foreground);color:var(--accent);margin-inline-start:calc(100% - 1.5rem);box-shadow:0 0 5px #00000005,0 2px 10px #0000000f,0 0 1px #0000004d}.switch--sm .switch__thumb{border-radius:calc(var(--radius) * .75);width:1.03125rem;height:.75rem}.switch[aria-checked=true] :is(.switch--sm .switch__thumb),.switch[data-selected=true] :is(.switch--sm .switch__thumb){margin-inline-start:calc(100% - 1.15625rem)}.switch--lg .switch__thumb{border-radius:calc(var(--radius) * 1.5);width:1.71875rem;height:1.25rem}.switch[aria-checked=true] :is(.switch--lg .switch__thumb),.switch[data-selected=true] :is(.switch--lg .switch__thumb){margin-inline-start:calc(100% - 1.84375rem)}.switch__thumb>*{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.switch__label{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.switch [data-slot=label]{-webkit-user-select:none;user-select:none}.switch__content [data-slot=label]{cursor:var(--cursor-interactive)}.switch [data-slot=description]{cursor:default;-webkit-user-select:none;user-select:none}.switch-group{gap:calc(var(--spacing) * 6);flex-direction:column;display:flex}.switch-group__items{gap:calc(var(--spacing) * 4);display:flex}.switch-group--horizontal .switch-group__items{flex-direction:row}.switch-group--vertical .switch-group__items{flex-direction:column}.badge{justify-content:center;align-items:center;gap:calc(var(--spacing) * .5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);min-height:calc(var(--spacing) * 7);min-width:calc(var(--spacing) * 7);border-radius:calc(var(--radius) * 3);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:1.34;--badge-bg:var(--default);--badge-fg:var(--default-foreground);--badge-border:var(--background);background-color:var(--badge-bg);color:var(--badge-fg);border:1px solid var(--badge-border);flex-shrink:0;line-height:1.34;display:inline-flex}.badge__label{padding-inline:calc(var(--spacing) * .5)}.badge-anchor{flex-shrink:0;display:inline-flex;position:relative}.badge--lg{min-height:calc(var(--spacing) * 8);min-width:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1.43;line-height:1.43}.badge--sm{min-height:calc(var(--spacing) * 4);min-width:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1.5);--tw-leading:1.34;font-size:10px;line-height:1.34}.badge--accent{--badge-fg:var(--accent-soft-foreground)}.badge--default{--badge-fg:var(--default-foreground)}.badge--success{--badge-fg:var(--success-soft-foreground)}.badge--warning{--badge-fg:var(--warning-soft-foreground)}.badge--danger{--badge-fg:var(--danger-soft-foreground)}.badge--top-right{position:absolute;top:0;right:0;transform:translate(25%,-25%)}.badge--top-left{position:absolute;top:0;left:0;transform:translate(-25%,-25%)}.badge--bottom-right{position:absolute;bottom:0;right:0;transform:translate(25%,25%)}.badge--bottom-left{position:absolute;bottom:0;left:0;transform:translate(-25%,25%)}.badge--primary.badge--accent{--badge-bg:var(--accent);--badge-fg:var(--accent-foreground)}.badge--primary.badge--default{--badge-bg:var(--default);--badge-fg:var(--default-foreground)}.badge--primary.badge--success{--badge-bg:var(--success);--badge-fg:var(--success-foreground)}.badge--primary.badge--warning{--badge-bg:var(--warning);--badge-fg:var(--warning-foreground)}.badge--primary.badge--danger{--badge-bg:var(--danger);--badge-fg:var(--danger-foreground)}.badge--soft.badge--accent{--badge-bg:var(--accent-soft);--badge-fg:var(--accent-soft-foreground)}.badge--soft.badge--default{--badge-bg:var(--default-soft);--badge-fg:var(--default-soft-foreground)}.badge--soft.badge--success{--badge-bg:var(--success-soft);--badge-fg:var(--success-soft-foreground)}.badge--soft.badge--warning{--badge-bg:var(--warning-soft);--badge-fg:var(--warning-soft-foreground)}.badge--soft.badge--danger{--badge-bg:var(--danger-soft);--badge-fg:var(--danger-soft-foreground)}.chip{align-items:center;gap:calc(var(--spacing) * .5);border-radius:calc(var(--radius) * 2);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--chip-bg:var(--default);--chip-fg:currentColor;background-color:var(--chip-bg);color:var(--chip-fg);flex-shrink:0;display:inline-flex}.chip__label{padding-inline:calc(var(--spacing) * .5)}.chip--accent{--chip-fg:var(--accent-soft-foreground)}.chip--danger{--chip-fg:var(--danger-soft-foreground)}.chip--default{--chip-fg:var(--default-foreground)}.chip--success{--chip-fg:var(--success-soft-foreground)}.chip--warning{--chip-fg:var(--warning-soft-foreground)}.chip--tertiary{--chip-bg:transparent}.chip--sm{padding-inline:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));padding-block:0}.chip--md{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.chip--lg{padding-inline:calc(var(--spacing) * 3);padding-block:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.chip--primary.chip--accent{--chip-bg:var(--accent);--chip-fg:var(--accent-foreground)}.chip--primary.chip--success{--chip-bg:var(--success);--chip-fg:var(--success-foreground)}.chip--primary.chip--warning{--chip-bg:var(--warning);--chip-fg:var(--warning-foreground)}.chip--primary.chip--danger{--chip-bg:var(--danger);--chip-fg:var(--danger-foreground)}.chip--accent.chip--soft{--chip-bg:var(--accent-soft);--chip-fg:var(--accent-soft-foreground)}.chip--success.chip--soft{--chip-bg:var(--success-soft);--chip-fg:var(--success-soft-foreground)}.chip--warning.chip--soft{--chip-bg:var(--warning-soft);--chip-fg:var(--warning-soft-foreground)}.chip--danger.chip--soft{--chip-bg:var(--danger-soft);--chip-fg:var(--danger-soft-foreground)}.chip--default.chip--soft{--chip-bg:var(--default-soft);--chip-fg:var(--default-soft-foreground)}.table-root{grid-template-columns:minmax(0,1fr);width:100%;display:grid;position:relative;overflow:clip}.table__scroll-container{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);scrollbar-gutter:auto;overflow-x:auto}.table-root--primary{background-color:var(--surface-secondary);padding-inline:var(--spacing);padding-bottom:var(--spacing);border-radius:min(32px,calc(var(--radius) * 2.5))}.table-root--secondary .table__header{border-bottom-style:var(--tw-border-style);background-color:#0000;border-bottom-width:0}.table-root--secondary .table__column{background-color:var(--surface-secondary)}.table-root--secondary :is(th.table__column:first-child,[role=row]>[role=presentation]:first-of-type>.table__column){border-start-start-radius:min(32px,var(--radius-2xl));border-end-start-radius:min(32px,var(--radius-2xl))}.table-root--secondary :is(th.table__column:last-child,[role=row]>[role=presentation]:last-of-type>.table__column){border-start-end-radius:min(32px,var(--radius-2xl));border-end-end-radius:min(32px,var(--radius-2xl))}.table-root--secondary .table__body{--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)}.table-root--secondary .table__body tr:first-child td:first-child,.table-root--secondary .table__body tr:first-child td:last-child,.table-root--secondary .table__body tr:last-child td:first-child,.table-root--secondary .table__body tr:last-child td:last-child{border-radius:0}.table-root--secondary .table__body:not(tbody){border-radius:0;overflow:visible}.table-root--secondary .table__row .table__cell{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--separator-tertiary)}@supports (color:color-mix(in lab,red,red)){.table-root--secondary .table__row .table__cell{border-color:color-mix(in oklab,var(--separator-tertiary) 50%,transparent)}}.table-root--secondary .table__row .table__cell{background-color:#0000}@media(hover:hover){.table-root--secondary .table__row:hover .table__cell,.table-root--secondary .table__row[data-hovered=true] .table__cell{background-color:var(--default)}@supports (color:color-mix(in lab,red,red)){.table-root--secondary .table__row:hover .table__cell,.table-root--secondary .table__row[data-hovered=true] .table__cell{background-color:color-mix(in oklab,var(--default) 50%,transparent)}}}.table__content{border-collapse:separate;--tw-border-spacing-x:0;--tw-border-spacing-y:0;width:100%;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.table-root--primary .table__content{overflow:clip}.table__header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--separator)}@supports (color:color-mix(in lab,red,red)){.table__header{border-color:color-mix(in oklab,var(--separator) 50%,transparent)}}.table__header{background-color:var(--surface-secondary)}.table__column{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);text-align:left;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);position:relative}.table__column:after{content:"";pointer-events:none;height:calc(var(--spacing) * 4);--tw-translate-y: -50% ;width:1px;translate:var(--tw-translate-x) var(--tw-translate-y);border-radius:calc(var(--radius) * .5);background-color:var(--separator);inset-inline-end:calc(var(--spacing) * 0);position:absolute;top:50%}.table__column:last-child:not(:only-child):after{content:none}.table__column[data-allows-sorting=true]{cursor:var(--cursor-interactive)}@media(hover:hover){.table__column[data-allows-sorting=true]:hover,.table__column[data-allows-sorting=true][data-hovered=true]{color:var(--foreground)}}.table__column:focus-visible,.table__column[data-focus-visible=true]{border-radius:calc(var(--radius) * 1);--tw-outline-style:none;box-shadow:inset 0 0 0 2px var(--focus);outline-style:none}[role=row]>[role=presentation]:last-of-type:not(:only-of-type)>.table__column:after{content:none}.table__sortable-column-header{justify-content:space-between;align-items:center;display:flex}.table__sortable-column-indicator{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);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));--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out)}.table__sortable-column-indicator[data-direction=descending]{rotate:180deg}.table__body tr:first-child td:first-child{border-start-start-radius:min(32px,var(--radius-2xl))}.table__body tr:first-child td:last-child{border-start-end-radius:min(32px,var(--radius-2xl))}.table__body tr:last-child td:first-child{border-end-start-radius:min(32px,var(--radius-2xl))}.table__body tr:last-child td:last-child{border-end-end-radius:min(32px,var(--radius-2xl))}.table__body:not(tbody){border-radius:min(32px,var(--radius-2xl));height:100%;position:relative;overflow:clip}.table__row{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--separator);height:100%;position:relative}@supports (color:color-mix(in lab,red,red)){.table__row{border-color:color-mix(in oklab,var(--separator) 50%,transparent)}}.table__row:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.table__row:hover .table__cell,.table__row[data-hovered=true] .table__cell{background-color:var(--surface)}@supports (color:color-mix(in lab,red,red)){.table__row:hover .table__cell,.table__row[data-hovered=true] .table__cell{background-color:color-mix(in oklab,var(--surface) 40%,transparent)}}}.table__row[data-selected=true] .table__cell{background-color:var(--surface)}@supports (color:color-mix(in lab,red,red)){.table__row[data-selected=true] .table__cell{background-color:color-mix(in oklab,var(--surface) 10%,transparent)}}.table__row[aria-disabled=true],.table__row[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.table__row:focus-visible,.table__row[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.table__row[data-dragging=true]{opacity:.5}.table__row[data-drop-target=true] .table__cell{background-color:var(--accent-soft)}.table__cell{background-color:var(--surface);height:100%;padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);vertical-align:middle;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--foreground);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--separator-tertiary)}@supports (color:color-mix(in lab,red,red)){.table__cell{border-color:color-mix(in oklab,var(--separator-tertiary) 50%,transparent)}}.table__cell:focus-visible,.table__cell[data-focus-visible=true]{border-radius:calc(var(--radius) * 1);--tw-outline-style:none;box-shadow:inset 0 0 0 2px var(--focus);outline-style:none}.table__row:is(:focus-visible,[data-focus-visible=true]) :is(.table__cell,.table__column){--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)}.table__row:is(:focus-visible,[data-focus-visible=true])>:is(.table__cell,.table__column):only-child,.table__row:is(:focus-visible,[data-focus-visible=true])>:only-child :is(.table__cell,.table__column){border-radius:calc(var(--radius) * 1);--tw-shadow:inset 0 0 0 2px var(--tw-shadow-color,var(--focus));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.table__row:is(:focus-visible,[data-focus-visible=true])>:is(.table__cell,.table__column):first-child:not(:only-child),.table__row:is(:focus-visible,[data-focus-visible=true])>:first-child:not(:only-child) :is(.table__cell,.table__column){border-top-left-radius:calc(var(--radius) * 1);border-bottom-left-radius:calc(var(--radius) * 1);--tw-shadow:inset 2px 0 0 0 var(--tw-shadow-color,var(--focus)), inset 0 2px 0 0 var(--tw-shadow-color,var(--focus)), inset 0 -2px 0 0 var(--tw-shadow-color,var(--focus));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.table__row:is(:focus-visible,[data-focus-visible=true])>:is(.table__cell,.table__column):last-child:not(:only-child),.table__row:is(:focus-visible,[data-focus-visible=true])>:last-child:not(:only-child) :is(.table__cell,.table__column){border-top-right-radius:calc(var(--radius) * 1);border-bottom-right-radius:calc(var(--radius) * 1);--tw-shadow:inset -2px 0 0 0 var(--tw-shadow-color,var(--focus)), inset 0 2px 0 0 var(--tw-shadow-color,var(--focus)), inset 0 -2px 0 0 var(--tw-shadow-color,var(--focus));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.table__row:is(:focus-visible,[data-focus-visible=true])>:is(.table__cell,.table__column):not(:first-child):not(:last-child):not(:only-child),.table__row:is(:focus-visible,[data-focus-visible=true])>:not(:first-child):not(:last-child):not(:only-child) :is(.table__cell,.table__column){--tw-shadow:inset 0 2px 0 0 var(--tw-shadow-color,var(--focus)), inset 0 -2px 0 0 var(--tw-shadow-color,var(--focus));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.table__cell[data-tree-column]{padding-inline-start:calc(1rem * var(--table-row-level,1))}.table__footer{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);align-items:center;display:flex}.table__resizable-container{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);scrollbar-gutter:auto;position:relative;overflow:auto}.table__column-resizer{height:calc(var(--spacing) * 4);--tw-translate-y: -50% ;border-radius:calc(var(--radius) * .5);background-color:var(--separator);box-sizing:content-box;--tw-translate-x: 50% ;width:1px;translate:var(--tw-translate-x) var(--tw-translate-y);cursor:col-resize;touch-action:none;padding-inline:calc(var(--spacing) * 2);--tw-border-style:none;--tw-outline-style:none;inset-inline-end:calc(var(--spacing) * 0);background-clip:content-box;border-style:none;outline-style:none;position:absolute;top:50%}.table__column-resizer[data-hovered=true],.table__column-resizer:hover,.table__column-resizer[data-resizing=true]{height:100%;width:calc(var(--spacing) * .5);background-color:var(--accent)}.table__column-resizer[data-focus-visible=true],.table__column-resizer:focus-visible{height:100%;width:calc(var(--spacing) * .5);background-color:var(--focus)}.table__column:has(.table__column-resizer):after{content:none}.table__load-more td,.table__load-more [role=rowheader]{padding-block:calc(var(--spacing) * 3);text-align:center}:is(.table__load-more td,.table__load-more [role=rowheader])>*{margin-inline:auto}.table__load-more-content{justify-content:center;align-items:center;gap:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 2);display:flex}.alert{justify-content:flex-start;align-items:flex-start;gap:calc(var(--spacing) * 4);background-color:var(--surface);width:100%;padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);--tw-shadow:var(--surface-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:min(32px,var(--radius-3xl));flex-direction:row;display:flex}.alert__content{flex-direction:column;flex-grow:1;align-items:flex-start;height:100%;display:flex}.alert__indicator{padding:var(--spacing);-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;display:flex}.alert__indicator [data-slot=alert-default-icon]{box-sizing:content-box;width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.alert__title{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.alert__description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted)}.alert--default .alert__indicator,.alert--default .alert__title{color:var(--foreground)}.alert--accent .alert__indicator,.alert--accent .alert__title{color:var(--accent-soft-foreground)}.alert--success .alert__indicator,.alert--success .alert__title{color:var(--success-soft-foreground)}.alert--warning .alert__indicator,.alert--warning .alert__title{color:var(--warning-soft-foreground)}.alert--danger .alert__indicator,.alert--danger .alert__title{color:var(--danger-soft-foreground)}.empty-state{padding:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted)}.skeleton{pointer-events:none;border-radius:calc(var(--radius) * .5);background-color:var(--surface-tertiary);position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.skeleton{background-color:color-mix(in oklab,var(--surface-tertiary) 70%,transparent)}}.skeleton--shimmer:after{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-gradient-position:to right;animation:2s linear infinite skeleton;position:absolute;top:0;right:0;bottom:0;left:0}@supports (background-image:linear-gradient(in lab,red,red)){.skeleton--shimmer:after{--tw-gradient-position:to right in oklab}}.skeleton--shimmer:after{background-image:linear-gradient(var(--tw-gradient-stops));--tw-gradient-from:transparent;--tw-gradient-via:var(--surface-tertiary);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));--tw-gradient-to:transparent;--tw-content:"";content:var(--tw-content)}.skeleton--shimmer:has(.skeleton):after{content:none}.skeleton--shimmer:has(.skeleton):before{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-content:"";content:var(--tw-content);z-index:10;pointer-events:none;mix-blend-mode:overlay;background:linear-gradient(90deg,#0000,#ffffff80,#0000);animation:2s linear infinite skeleton;position:absolute;top:0;right:0;bottom:0;left:0}.skeleton--shimmer:has(.skeleton) .skeleton:after{content:none}.skeleton--pulse{animation:var(--animate-pulse)}.meter{gap:var(--spacing);--meter-fill:var(--accent);grid-template-columns:1fr auto;grid-template-areas:"label output""track track";width:100%;display:grid}.meter [data-slot=label]{width:fit-content;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);grid-area:label}.meter .meter__output{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--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,);grid-area:output}.meter .meter__track{border-radius:calc(var(--radius) * .5);background-color:var(--default);height:calc(var(--spacing) * 2);grid-area:track;position:relative;overflow:hidden}.meter .meter__fill{border-radius:calc(var(--radius) * .5);background-color:var(--meter-fill);height:100%;transition:width .3s var(--ease-out);position:absolute;top:0;left:0}.meter .meter__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *),.meter .meter__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.meter .meter__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.meter .meter__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.meter .meter__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.meter .meter__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.meter:disabled,.meter[data-disabled=true],.meter[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.meter:disabled,.meter[data-disabled=true],.meter[aria-disabled=true]) [data-slot=label]{opacity:1}.meter--sm .meter__track{height:var(--spacing);border-radius:calc(var(--radius) * .25)}.meter--sm .meter__fill{border-radius:calc(var(--radius) * .25)}.meter--lg .meter__track{height:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * .75)}.meter--lg .meter__fill{border-radius:calc(var(--radius) * .75)}.meter--default{--meter-fill:var(--default-foreground)}.meter--accent{--meter-fill:var(--accent)}.meter--success{--meter-fill:var(--success)}.meter--warning{--meter-fill:var(--warning)}.meter--danger{--meter-fill:var(--danger)}.progress-bar{gap:var(--spacing);--progress-bar-fill:var(--accent);grid-template-columns:1fr auto;grid-template-areas:"label output""track track";width:100%;display:grid}.progress-bar [data-slot=label]{width:fit-content;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);grid-area:label}.progress-bar .progress-bar__output{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--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,);grid-area:output}.progress-bar .progress-bar__track{border-radius:calc(var(--radius) * .5);background-color:var(--default);height:calc(var(--spacing) * 2);grid-area:track;position:relative;overflow:hidden}.progress-bar .progress-bar__fill{border-radius:calc(var(--radius) * .5);background-color:var(--progress-bar-fill);height:100%;transition:width .3s var(--ease-out);position:absolute;top:0;left:0}.progress-bar .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *),.progress-bar .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.progress-bar .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.progress-bar .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.progress-bar .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.progress-bar .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.progress-bar:not([aria-valuenow]) .progress-bar__fill{width:40%;animation:1.5s cubic-bezier(.65,0,.35,1) infinite progress-bar-indeterminate}.progress-bar:not([aria-valuenow]) .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *),.progress-bar:not([aria-valuenow]) .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.progress-bar:not([aria-valuenow]) .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){.progress-bar:not([aria-valuenow]) .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.progress-bar:not([aria-valuenow]) .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.progress-bar:not([aria-valuenow]) .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.progress-bar:disabled,.progress-bar[data-disabled=true],.progress-bar[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.progress-bar:disabled,.progress-bar[data-disabled=true],.progress-bar[aria-disabled=true]) [data-slot=label]{opacity:1}@keyframes progress-bar-indeterminate{0%{transform:translate(-100%)}to{transform:translate(350%)}}.progress-bar--sm .progress-bar__track{height:var(--spacing);border-radius:calc(var(--radius) * .25)}.progress-bar--sm .progress-bar__fill{border-radius:calc(var(--radius) * .25)}.progress-bar--lg .progress-bar__track{height:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * .75)}.progress-bar--lg .progress-bar__fill{border-radius:calc(var(--radius) * .75)}.progress-bar--default{--progress-bar-fill:var(--default-foreground)}.progress-bar--accent{--progress-bar-fill:var(--accent)}.progress-bar--success{--progress-bar-fill:var(--success)}.progress-bar--warning{--progress-bar-fill:var(--warning)}.progress-bar--danger{--progress-bar-fill:var(--danger)}.progress-circle{--progress-circle-stroke:var(--accent);--progress-circle-track-stroke:var(--default);justify-content:center;align-items:center;display:inline-flex}.progress-circle .progress-circle__track{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.progress-circle .progress-circle__track-circle{stroke:var(--progress-circle-track-stroke)}.progress-circle .progress-circle__fill-circle{stroke:var(--progress-circle-stroke);transition:stroke-dashoffset .3s var(--ease-out)}.progress-circle .progress-circle__fill-circle:is([data-reduce-motion=true],[data-reduce-motion=true] *),.progress-circle .progress-circle__fill-circle:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.progress-circle .progress-circle__fill-circle:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.progress-circle .progress-circle__fill-circle:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.progress-circle .progress-circle__fill-circle:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.progress-circle .progress-circle__fill-circle:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.progress-circle:not([aria-valuenow]) .progress-circle__track{animation:1s linear infinite progress-circle-spin}.progress-circle:not([aria-valuenow]) .progress-circle__track:is([data-reduce-motion=true],[data-reduce-motion=true] *),.progress-circle:not([aria-valuenow]) .progress-circle__track:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.progress-circle:not([aria-valuenow]) .progress-circle__track:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){.progress-circle:not([aria-valuenow]) .progress-circle__track:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.progress-circle:not([aria-valuenow]) .progress-circle__track:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.progress-circle:not([aria-valuenow]) .progress-circle__track:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.progress-circle:disabled,.progress-circle[data-disabled=true],.progress-circle[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}@keyframes progress-circle-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.progress-circle--sm .progress-circle__track{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.progress-circle--lg .progress-circle__track{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.progress-circle--default{--progress-circle-stroke:var(--default-foreground)}.progress-circle--accent{--progress-circle-stroke:var(--accent)}.progress-circle--success{--progress-circle-stroke:var(--success)}.progress-circle--warning{--progress-circle-stroke:var(--warning)}.progress-circle--danger{--progress-circle-stroke:var(--danger)}.spinner{pointer-events:none;width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6);flex-shrink:0;animation:.75s linear infinite spin;display:inline-flex}.spinner:is([data-reduce-motion=true],[data-reduce-motion=true] *),.spinner:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.spinner:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){.spinner:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.spinner:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.spinner:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.spinner--sm{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.spinner--lg{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.spinner--xl{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.spinner--current{color:inherit}.spinner--accent{color:var(--accent)}.spinner--danger{color:var(--danger)}.spinner--success{color:var(--success)}.spinner--warning{color:var(--warning)}.toast-region{pointer-events:none;z-index:50;--tw-outline-style:none;outline-style:none;width:calc(100vw - 2rem);position:fixed}@media(min-width:40rem){.toast-region{width:auto;min-width:var(--toast-width)}}.toast-region{display:block}.toast-region--bottom{bottom:calc(var(--spacing) * 4);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);left:50%}.toast-region--bottom-start{bottom:calc(var(--spacing) * 4);left:calc(var(--spacing) * 4)}.toast-region--bottom-end{right:calc(var(--spacing) * 4);bottom:calc(var(--spacing) * 4)}.toast-region--top{top:calc(var(--spacing) * 4);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);left:50%}.toast-region--top-start{top:calc(var(--spacing) * 4);left:calc(var(--spacing) * 4)}.toast-region--top-end{top:calc(var(--spacing) * 4);right:calc(var(--spacing) * 4)}.toast-region:focus-visible{outline-style:var(--tw-outline-style);outline-offset:2px;outline-width:2px;outline-color:var(--focus)}.toast{pointer-events:auto;justify-content:flex-start;align-items:flex-start;gap:calc(var(--spacing) * 1.5);background-color:var(--surface);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);--tw-shadow:var(--overlay-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:min(32px,var(--radius-3xl));flex-direction:row;display:flex;position:absolute;left:0;right:0}.toast--bottom,.toast--bottom-start,.toast--bottom-end{bottom:0}.toast--top,.toast--top-start,.toast--top-end{top:0}.toast:not([data-frontmost=true]){pointer-events:none;height:var(--front-height);overflow:hidden}.toast:not([data-frontmost=true]) .toast__close-button{pointer-events:none;opacity:0;outline:none}.toast[data-hidden=true]{pointer-events:none;opacity:0;display:flex}.toast:focus-visible{outline-style:var(--tw-outline-style);outline-offset:2px;outline-width:2px;outline-color:var(--focus)}.toast--bottom,.toast--bottom-start,.toast--bottom-end{view-transition-class:toast-bottom}.toast--top,.toast--top-start,.toast--top-end{view-transition-class:toast-top}.toast__content{flex-direction:column;flex-grow:1;align-self:center;align-items:flex-start;height:100%;display:flex}.toast__indicator{padding:var(--spacing);color:var(--overlay-foreground);-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.toast__indicator [data-slot=toast-default-icon]{box-sizing:content-box;width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.toast__indicator [data-slot=spinner],.toast__indicator [data-slot=spinner-icon]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.toast__title{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--overlay-foreground)}.toast__description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted)}.toast__close-button{pointer-events:none;top:calc(var(--spacing) * -1);right:calc(var(--spacing) * -1);width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);border-color:var(--border);background-color:var(--default);opacity:0;position:absolute}@media(min-width:40rem){.toast__close-button{border-style:var(--tw-border-style);background-color:var(--overlay);border-width:1px}}.toast__close-button{transition:opacity .15s var(--ease-smooth)}.toast__close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.toast__close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.toast__close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.toast__close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.toast__close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.toast__close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.toast__close-button [data-slot=close-button-icon]{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}@media(min-width:40rem){.toast__close-button [data-slot=close-button-icon]{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}}@media(hover:hover){.toast__close-button:hover,.toast__close-button[data-hovered=true]{background-color:var(--default)}}.toast[data-frontmost=true]:hover .toast__close-button{pointer-events:auto;opacity:1}.toast__action{margin-top:calc(var(--spacing) * 2)}@media(min-width:40rem){.toast__action{margin-top:0}}.toast--accent .toast__title{color:var(--accent-soft-foreground)}.toast--success .toast__title,.toast--success .toast__indicator{color:var(--success-soft-foreground)}.toast--warning .toast__title,.toast--warning .toast__indicator{color:var(--warning-soft-foreground)}.toast--danger .toast__title,.toast--danger .toast__indicator{color:var(--danger-soft-foreground)}::view-transition-old(*){will-change:translate,opacity}::view-transition-new(*){will-change:translate,opacity}::view-transition-new(.toast-bottom):only-child{animation:.35s toast-slide-bottom-in}::view-transition-old(.toast-bottom):only-child{animation:.35s forwards toast-slide-bottom-out}::view-transition-new(.toast-top):only-child{animation:.35s toast-slide-top-in}::view-transition-old(.toast-top):only-child{animation:.35s forwards toast-slide-top-out}@keyframes toast-slide-bottom-in{0%{opacity:0;translate:0 100%}}@keyframes toast-slide-bottom-out{to{opacity:0;translate:0 100%}}@keyframes toast-slide-top-in{0%{opacity:0;translate:0 -100%}}@keyframes toast-slide-top-out{to{opacity:0;translate:0 -100%}}.checkbox-group{flex-direction:column;display:flex}.checkbox-group [data-slot=checkbox]{margin-top:calc(var(--spacing) * 4)}.checkbox{align-items:flex-start;gap:var(--spacing);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);outline-style:none;flex-direction:column;display:flex}.checkbox>[data-slot=description],.checkbox>[data-slot=field-error]{cursor:default;width:100%;min-width:0;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));text-wrap:wrap;overflow-wrap:break-word;color:var(--muted);-webkit-user-select:none;user-select:none;padding-inline-start:calc(var(--spacing) * 7)}.checkbox [data-slot=label]{-webkit-user-select:none;user-select:none}.checkbox .checkbox__content [data-slot=label]{cursor:var(--cursor-interactive)}.checkbox[data-disabled=true],.checkbox[data-disabled=true] [data-slot=description],.checkbox[data-disabled=true] [data-slot=field-error]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.checkbox[data-selected=true],.checkbox[data-indeterminate=true]) .checkbox__indicator{border-color:var(--accent-foreground)}.checkbox [data-slot=checkbox-default-indicator--checkmark]{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5);stroke-width:2.5px;color:var(--accent-foreground);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}.checkbox [data-slot=checkbox-default-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *),.checkbox [data-slot=checkbox-default-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.checkbox [data-slot=checkbox-default-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.checkbox [data-slot=checkbox-default-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.checkbox [data-slot=checkbox-default-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.checkbox [data-slot=checkbox-default-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.checkbox[data-selected=true] [data-slot=checkbox-default-indicator--checkmark]{transition:stroke-dashoffset .15s linear 15ms}.checkbox[data-invalid=true][data-selected=true] [data-slot=checkbox-default-indicator--checkmark],.checkbox[data-invalid=true][aria-checked=true] [data-slot=checkbox-default-indicator--checkmark],.checkbox[aria-invalid=true][data-selected=true] [data-slot=checkbox-default-indicator--checkmark],.checkbox[aria-invalid=true][aria-checked=true] [data-slot=checkbox-default-indicator--checkmark]{color:var(--danger-foreground)}.checkbox[data-indeterminate=true] [data-slot=checkbox-default-indicator--indeterminate]{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.checkbox[data-indeterminate=true][data-invalid=true] [data-slot=checkbox-default-indicator--indeterminate],.checkbox[data-indeterminate=true][aria-invalid=true] [data-slot=checkbox-default-indicator--indeterminate]{color:var(--danger-foreground)}.checkbox__control{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * .75);border-style:var(--tw-border-style);border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border,var(--border));background-color:var(--field-background,var(--default));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;transition:background-color .2s var(--ease-out),border-color .2s var(--ease-out),transform .1s var(--ease-out);outline-style:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative;overflow:hidden}.checkbox__control:is([data-reduce-motion=true],[data-reduce-motion=true] *),.checkbox__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.checkbox__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.checkbox__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.checkbox__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.checkbox__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.checkbox__control{cursor:var(--cursor-interactive)}.checkbox__control:before{pointer-events:none;z-index:0;transform-origin:50%;--tw-scale-x:70%;--tw-scale-y:70%;--tw-scale-z:70%;scale:var(--tw-scale-x) var(--tw-scale-y);border-radius:calc(var(--radius) * .75);background-color:var(--accent);opacity:0;--tw-content:"";content:var(--tw-content);transition:scale .1s var(--ease-linear),opacity .2s var(--ease-linear),background-color .2s var(--ease-out);position:absolute;top:0;right:0;bottom:0;left:0}@media(prefers-reduced-motion:reduce){.checkbox__control:before:not(:is()){transition-property:none}}.checkbox:focus-visible .checkbox__control,.checkbox:has([data-slot=checkbox-content][data-focus-visible=true]) .checkbox__control,.checkbox [data-slot=checkbox-content][data-focus-visible=true] .checkbox__control{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.checkbox:hover .checkbox__control,.checkbox:has([data-slot=checkbox-content][data-hovered=true]) .checkbox__control,.checkbox [data-slot=checkbox-content][data-hovered=true] .checkbox__control{border-color:var(--field-border-hover)}:is(.checkbox:hover .checkbox__control,.checkbox:has([data-slot=checkbox-content][data-hovered=true]) .checkbox__control,.checkbox [data-slot=checkbox-content][data-hovered=true] .checkbox__control):before{background-color:var(--accent-hover)}.checkbox[aria-checked=true] .checkbox__control,.checkbox[data-selected=true] .checkbox__control{color:var(--accent-foreground);border-color:#0000}:is(.checkbox[aria-checked=true] .checkbox__control,.checkbox[data-selected=true] .checkbox__control):before{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:1}.checkbox[data-indeterminate=true] .checkbox__control{background-color:var(--accent);color:var(--accent-foreground)}.checkbox:active[data-indeterminate=true] .checkbox__control,.checkbox[data-pressed=true][data-indeterminate=true] .checkbox__control,.checkbox:has([data-slot=checkbox-content][data-pressed=true])[data-indeterminate=true] .checkbox__control{background-color:var(--accent-hover)}.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control):focus,:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control):focus-visible,:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control)[data-focused=true],:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control)[data-focus-visible=true],:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control):focus-within,:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control)[data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.checkbox[data-invalid=true][aria-checked=true] .checkbox__control,.checkbox[data-invalid=true][data-selected=true] .checkbox__control,.checkbox[aria-invalid=true][aria-checked=true] .checkbox__control,.checkbox[aria-invalid=true][data-selected=true] .checkbox__control{background-color:var(--danger);color:var(--danger-foreground);border-color:#0000}:is(.checkbox[data-invalid=true][aria-checked=true] .checkbox__control,.checkbox[data-invalid=true][data-selected=true] .checkbox__control,.checkbox[aria-invalid=true][aria-checked=true] .checkbox__control,.checkbox[aria-invalid=true][data-selected=true] .checkbox__control):before{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y);background-color:var(--danger);opacity:1}.checkbox[data-indeterminate=true][aria-invalid=true] .checkbox__control,.checkbox[data-indeterminate=true][data-invalid=true] .checkbox__control{background-color:var(--danger);color:var(--danger-foreground)}.checkbox__indicator{z-index:10;width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);justify-content:center;align-items:center;display:flex;position:relative}.checkbox__indicator svg{width:100%;height:100%;transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.checkbox--disabled{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.checkbox--secondary .checkbox__control{--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);background-color:var(--checkbox-control-bg);--checkbox-control-bg:var(--default)}.checkbox:hover :is(.checkbox--secondary .checkbox__control),.checkbox:has([data-slot=checkbox-content][data-hovered=true]) :is(.checkbox--secondary .checkbox__control),.checkbox [data-slot=checkbox-content][data-hovered=true] :is(.checkbox--secondary .checkbox__control){border-color:var(--field-border-hover)}.checkbox__content{cursor:inherit;align-items:center;gap:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex}.checkbox--secondary:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control{background-color:var(--checkbox-control-bg)}:is(.checkbox--secondary[aria-checked=true] .checkbox__control,.checkbox--secondary[data-selected=true] .checkbox__control):before,.checkbox--secondary[data-indeterminate=true] .checkbox__control,.checkbox--secondary[data-indeterminate=true] .checkbox__control:before{background-color:var(--accent)}.fieldset{gap:calc(var(--spacing) * 6);flex-direction:column;flex:1 1 0;display:flex}.fieldset__legend{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.fieldset__field_group{width:100%}:where(.fieldset__field_group>: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)))}.fieldset__actions{align-items:center;gap:calc(var(--spacing) * 2);padding-top:var(--spacing);display:flex}.input-otp{align-items:center;gap:calc(var(--spacing) * 2);display:flex;position:relative}.input-otp[data-disabled=true]{cursor:not-allowed;opacity:.5}.input-otp__group{align-items:center;gap:calc(var(--spacing) * 2);display:flex}.input-otp__slot{height:calc(var(--spacing) * 10);width:calc(var(--spacing) * 9.5);border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:var(--field-radius,calc(var(--radius) * 1.5));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);outline-style:none;flex:1;justify-content:center;align-items:center;display:flex;position:relative}.input-otp__slot:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-otp__slot:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-otp__slot:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input-otp__slot:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-otp__slot:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-otp__slot:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.input-otp__slot:hover,.input-otp__slot[data-hovered=true]{background-color:var(--field-hover);border-color:var(--field-border-hover)}}.input-otp__slot[data-active=true]{z-index:10;background-color:var(--field-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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;outline-style:none}.input-otp__slot[data-filled=true]{background-color:var(--field-focus)}.input-otp__slot[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.input-otp__slot[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input-otp__slot[data-invalid=true]:focus,.input-otp__slot[data-invalid=true]:focus-visible,.input-otp__slot[data-invalid=true][data-focused=true],.input-otp__slot[data-invalid=true][data-focus-visible=true],.input-otp__slot[data-invalid=true]:focus-within,.input-otp__slot[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.input-otp__slot[data-invalid=true]{background-color:var(--field-focus)}.input-otp__slot-value{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6);--tw-tracking:-.27px;letter-spacing:-.27px;animation:slot-value-in .25s var(--ease-smooth) both;transform-origin:bottom}.input-otp__slot-value:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-otp__slot-value:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-otp__slot-value:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){.input-otp__slot-value:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-otp__slot-value:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-otp__slot-value:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.input-otp__caret{height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * .5);background-color:var(--field-placeholder,var(--muted));width:2px;animation:1.2s ease-out infinite caret-blink;position:absolute}.input-otp__separator{border-radius:calc(var(--radius) * .5);background-color:var(--separator);flex-shrink:0;width:6px;height:2px}.input-otp--secondary .input-otp__slot{--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);background-color:var(--input-otp-slot-bg);--input-otp-slot-bg:var(--default);--input-otp-slot-bg-hover:var(--default-hover);--input-otp-slot-bg-focus:var(--default)}@media(hover:hover){.input-otp--secondary .input-otp__slot:hover,.input-otp--secondary .input-otp__slot[data-hovered=true]{background-color:var(--input-otp-slot-bg-hover)}}.input-otp--secondary .input-otp__slot[data-active=true],.input-otp--secondary .input-otp__slot[data-filled=true]{background-color:var(--input-otp-slot-bg-focus)}@keyframes slot-value-in{0%{opacity:0;transform:translateY(8px)scale(.8)}to{opacity:1;transform:translateY(0)scale(1)}}.input{border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;outline-style:none}.input::placeholder{color:var(--field-placeholder,var(--muted))}@media(min-width:40rem){.input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.input{border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out)}.input:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.input:hover:not(:focus):not(:focus-visible),.input[data-hovered=true]:not([data-focused=true]):not([data-focus-visible=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.input:focus,.input[data-focused=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.input[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input[data-invalid=true]:focus,.input[data-invalid=true]:focus-visible,.input[data-invalid=true][data-focused=true],.input[data-invalid=true][data-focus-visible=true],.input[data-invalid=true]:focus-within,.input[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.input[data-invalid=true]{background-color:var(--field-focus)}.input:disabled,.input[data-disabled=true],.input[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.input--secondary{--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);background-color:var(--input-bg);--input-bg:var(--default);--input-bg-hover:var(--default-hover);--input-bg-focus:var(--default)}@media(hover:hover){.input--secondary:hover:not(:focus):not(:focus-visible),.input--secondary[data-hovered=true]:not([data-focus-visible=true]):not([data-focused=true]){background-color:var(--input-bg-hover)}}.input--secondary:focus,.input--secondary[data-focused=true]{background-color:var(--input-bg-focus)}.input--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input--secondary[data-invalid=true]:focus,.input--secondary[data-invalid=true]:focus-visible,.input--secondary[data-invalid=true][data-focused=true],.input--secondary[data-invalid=true][data-focus-visible=true],.input--secondary[data-invalid=true]:focus-within,.input--secondary[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.input--secondary[data-invalid=true]{background-color:var(--input-bg-focus)}.input--full-width{width:100%}.input-group{min-height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);outline-style:none;align-items:center;display:inline-flex}.input-group:has([data-slot=input-group-textarea]){align-items:flex-start;height:auto}.input-group{transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out)}.input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.input-group:hover:not(:focus-within),.input-group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.input-group:has([data-slot=input-group-input]:focus),.input-group:has([data-slot=input-group-textarea]: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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.input-group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input-group[data-invalid=true]:focus,.input-group[data-invalid=true]:focus-visible,.input-group[data-invalid=true][data-focused=true],.input-group[data-invalid=true][data-focus-visible=true],.input-group[data-invalid=true]:focus-within,.input-group[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.input-group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.input-group[data-disabled=true],.input-group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:-webkit-any(.input-group:has([data-slot=input-group-input]:-webkit-autofill),.input-group:has([data-slot=input-group-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}:is(.input-group:has([data-slot=input-group-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}.input-group__input{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--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);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none;flex:1}.input-group__input::placeholder{color:var(--field-placeholder,var(--muted))}@media(min-width:40rem){.input-group__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.input-group:has([data-slot=input-group-prefix]) .input-group__input{border-top-left-radius:0;border-bottom-left-radius:0;padding-left:0}.input-group:has([data-slot=input-group-suffix]) .input-group__input{border-top-right-radius:0;border-bottom-right-radius:0;padding-right:0}.input-group__input:focus,.input-group__input:focus-visible{--tw-outline-style:none;outline-style:none}.input-group__input:-webkit-autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input:-webkit-autofill:hover{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input:-webkit-autofill:focus{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input:-webkit-autofill:active{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input:autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input[data-slot=input-group-textarea]{resize:vertical;min-height:38px}.input-group__prefix{border-top-left-radius:var(--field-radius,calc(var(--radius) * 1.5));border-bottom-left-radius:var(--field-radius,calc(var(--radius) * 1.5));height:100%;padding-inline:calc(var(--spacing) * 3);color:var(--field-placeholder,var(--muted));border-width:var(--border-width-field);border-color:var(--field-border);border-style:solid;border-right-color:var(--field-border);background-color:#0000;border-top:none;border-bottom:none;border-left:none;border-top-right-radius:0;border-bottom-right-radius:0;justify-content:center;align-items:center;display:flex}.input-group:has([data-slot=input-group-textarea]) .input-group__prefix{align-items:flex-start;padding-top:.5rem}.input-group__prefix{transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth)}.input-group__prefix:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-group__prefix:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-group__prefix:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input-group__prefix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-group__prefix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-group__prefix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.input-group__suffix{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--field-radius,calc(var(--radius) * 1.5));border-bottom-right-radius:var(--field-radius,calc(var(--radius) * 1.5));height:100%;padding-inline:calc(var(--spacing) * 3);color:var(--field-placeholder,var(--muted));border-width:var(--border-width-field);border-color:var(--field-border);border-style:solid;border-left-color:var(--field-border);background-color:#0000;border-top:none;border-bottom:none;border-right:none;justify-content:center;align-items:center;display:flex}.input-group:has([data-slot=input-group-textarea]) .input-group__suffix{align-items:flex-start;padding-top:.5rem}.input-group__suffix{transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth)}.input-group__suffix:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-group__suffix:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-group__suffix:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input-group__suffix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-group__suffix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-group__suffix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.input-group--secondary{--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);background-color:var(--input-group-bg);--input-group-bg:var(--default);--input-group-bg-hover:var(--default-hover);--input-group-bg-focus:var(--default)}@media(hover:hover){.input-group--secondary:hover:not(:focus-within),.input-group--secondary[data-hovered=true]:not([data-focus-within=true]){background-color:var(--input-group-bg-hover)}}.input-group--secondary:has([data-slot=input-group-input]:focus),.input-group--secondary:has([data-slot=input-group-textarea]:focus){background-color:var(--input-group-bg-focus)}.input-group--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input-group--secondary[data-invalid=true]:focus,.input-group--secondary[data-invalid=true]:focus-visible,.input-group--secondary[data-invalid=true][data-focused=true],.input-group--secondary[data-invalid=true][data-focus-visible=true],.input-group--secondary[data-invalid=true]:focus-within,.input-group--secondary[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.input-group--secondary[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--input-group-bg-focus)}.input-group--secondary [data-slot=input-group-input],.input-group--secondary [data-slot=input-group-textarea]{background-color:#0000}.input-group--full-width{width:100%}.number-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.number-field[data-invalid=true],.number-field[aria-invalid=true]) [data-slot=description]{display:none}.number-field [data-slot=label]{width:fit-content}.number-field__group{height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);outline-style:none;grid-template-columns:40px 1fr 40px;align-items:center;display:grid;overflow:hidden}.number-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.number-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.number-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.number-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.number-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.number-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.number-field__group:hover:not(:focus-within),.number-field__group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.number-field__group[data-focus-within=true],.number-field__group:focus-within{--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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.number-field__group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.number-field__group[data-invalid=true]:focus,.number-field__group[data-invalid=true]:focus-visible,.number-field__group[data-invalid=true][data-focused=true],.number-field__group[data-invalid=true][data-focus-visible=true],.number-field__group[data-invalid=true]:focus-within,.number-field__group[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.number-field__group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.number-field__group[data-disabled=true],.number-field__group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:-webkit-any(.number-field__group:has([data-slot=number-field-input]:-webkit-autofill),.number-field__group:has([data-slot=number-field-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}:is(.number-field__group:has([data-slot=number-field-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}.number-field__input{border-style:var(--tw-border-style);min-width:0;padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--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,);--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);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none}@media(min-width:40rem){.number-field__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.number-field__group:has([slot=decrement]) .number-field__input{border-top-left-radius:0;border-bottom-left-radius:0}.number-field__group:has([slot=increment]) .number-field__input{border-top-right-radius:0;border-bottom-right-radius:0}.number-field__input:focus,.number-field__input:focus-visible{--tw-outline-style:none;outline-style:none}.number-field__input:-webkit-autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__input:-webkit-autofill:hover{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__input:-webkit-autofill:focus{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__input:-webkit-autofill:active{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__input:autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__increment-button,.number-field__decrement-button{height:100%;width:calc(var(--spacing) * 10);color:var(--field-foreground,var(--foreground));--tw-outline-style:none;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth);background-color:#0000;border-style:solid;border-radius:0;outline-style:none;justify-content:center;align-items:center;display:flex}:is(.number-field__increment-button,.number-field__decrement-button):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.number-field__increment-button,.number-field__decrement-button):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.number-field__increment-button,.number-field__decrement-button):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.number-field__increment-button,.number-field__decrement-button):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.number-field__increment-button,.number-field__decrement-button):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.number-field__increment-button,.number-field__decrement-button):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.number-field__increment-button,.number-field__decrement-button{cursor:var(--cursor-interactive)}:is(.number-field__increment-button,.number-field__decrement-button):active,:is(.number-field__increment-button,.number-field__decrement-button)[data-pressed=true]{background-color:var(--field-foreground,var(--foreground))}@supports (color:color-mix(in lab,red,red)){:is(.number-field__increment-button,.number-field__decrement-button):active,:is(.number-field__increment-button,.number-field__decrement-button)[data-pressed=true]{background-color:color-mix(in oklab,var(--field-foreground,var(--foreground)) 10%,transparent)}}:is(.number-field__increment-button,.number-field__decrement-button):active,:is(.number-field__increment-button,.number-field__decrement-button)[data-pressed=true]{transform:scale(.97)}:is(.number-field__increment-button,.number-field__decrement-button):disabled,:is(.number-field__increment-button,.number-field__decrement-button)[data-disabled=true],:is(.number-field__increment-button,.number-field__decrement-button)[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.number-field__increment-button,.number-field__decrement-button) [data-slot=number-field-increment-button-icon],:is(.number-field__increment-button,.number-field__decrement-button) [data-slot=number-field-decrement-button-icon]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.number-field__increment-button{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--field-radius,calc(var(--radius) * 1.5));border-bottom-right-radius:var(--field-radius,calc(var(--radius) * 1.5));border-left-style:var(--tw-border-style);border-left-width:1px;border-color:var(--field-placeholder,var(--muted))}@supports (color:color-mix(in lab,red,red)){.number-field__increment-button{border-color:color-mix(in oklab,var(--field-placeholder,var(--muted)) 15%,transparent)}}.number-field__decrement-button{border-top-left-radius:var(--field-radius,calc(var(--radius) * 1.5));border-bottom-left-radius:var(--field-radius,calc(var(--radius) * 1.5));border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--field-placeholder,var(--muted));border-top-right-radius:0;border-bottom-right-radius:0}@supports (color:color-mix(in lab,red,red)){.number-field__decrement-button{border-color:color-mix(in oklab,var(--field-placeholder,var(--muted)) 15%,transparent)}}.number-field--secondary .number-field__group{--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);background-color:var(--number-field-group-bg);--number-field-group-bg:var(--default);--number-field-group-bg-hover:var(--default-hover);--number-field-group-bg-focus:var(--default)}@media(hover:hover){.number-field--secondary .number-field__group:hover:not(:focus-within),.number-field--secondary .number-field__group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--number-field-group-bg-hover)}}.number-field--secondary .number-field__group:focus-within,.number-field--secondary .number-field__group[data-focus-within=true]{background-color:var(--number-field-group-bg-focus)}.number-field--secondary .number-field__group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.number-field--secondary .number-field__group[data-invalid=true]:focus,.number-field--secondary .number-field__group[data-invalid=true]:focus-visible,.number-field--secondary .number-field__group[data-invalid=true][data-focused=true],.number-field--secondary .number-field__group[data-invalid=true][data-focus-visible=true],.number-field--secondary .number-field__group[data-invalid=true]:focus-within,.number-field--secondary .number-field__group[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.number-field--secondary .number-field__group[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--number-field-group-bg-focus)}.number-field--secondary .number-field__group [data-slot=number-field-input]{background-color:#0000}.number-field--full-width,.number-field__group--full-width{width:100%}.radio-group{flex-direction:column;display:flex}.radio-group[data-orientation=vertical] [data-slot=radio]{margin-top:calc(var(--spacing) * 4)}.radio-group[data-orientation=horizontal]{gap:calc(var(--spacing) * 4);flex-flow:wrap}.radio-group--secondary .radio__control{--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);background-color:var(--radio-control-bg);--radio-control-bg:var(--default);--radio-control-bg-hover:var(--default-hover)}.radio:has([data-slot=radio-content][data-hovered=true]) :is(.radio-group--secondary .radio__control),.radio [data-slot=radio-content][data-hovered=true] :is(.radio-group--secondary .radio__control){border-color:var(--field-border-hover)}.radio:not([data-selected]):not(:has(input:checked)) :is(.radio-group--secondary .radio__control) .radio__indicator:empty:before{background-color:var(--radio-control-bg)}.radio:has([data-slot=radio-content][data-hovered=true]):not([data-selected]):not(:has(input:checked)) :is(.radio-group--secondary .radio__control) .radio__indicator:empty:before{background-color:var(--radio-control-bg-hover)}.radio{align-items:flex-start;gap:var(--spacing);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);outline-style:none;flex-direction:column;display:flex}.radio [data-slot=label]{-webkit-user-select:none;user-select:none}.radio .radio__content [data-slot=label]{cursor:var(--cursor-interactive)}.radio>[data-slot=description],.radio>[data-slot=field-error]{cursor:default;width:100%;min-width:0;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));text-wrap:wrap;overflow-wrap:break-word;color:var(--muted);-webkit-user-select:none;user-select:none;padding-inline-start:calc(var(--spacing) * 7)}.radio:disabled,.radio[data-disabled=true],.radio[aria-disabled=true],:is(.radio:disabled,.radio[data-disabled=true],.radio[aria-disabled=true]) [data-slot=description],:is(.radio:disabled,.radio[data-disabled=true],.radio[aria-disabled=true]) [data-slot=field-error]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.radio__content{cursor:inherit;align-items:center;gap:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex}.radio__control{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1);border-style:var(--tw-border-style);border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border,var(--border));background-color:var(--field-background,var(--default));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;transition:background-color .2s var(--ease-out),border-color .2s var(--ease-out),transform .1s var(--ease-out);outline-style:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.radio__control:is([data-reduce-motion=true],[data-reduce-motion=true] *),.radio__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.radio__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.radio__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.radio__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.radio__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.radio__control{cursor:var(--cursor-interactive)}.radio:has([data-slot=radio-content][data-focus-visible=true]) .radio__control,.radio [data-slot=radio-content][data-focus-visible=true] .radio__control{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.radio:has([data-slot=radio-content][data-hovered=true]) .radio__control,.radio [data-slot=radio-content][data-hovered=true] .radio__control{border-color:var(--field-border-hover)}.radio:has([data-slot=radio-content][data-hovered=true]):not([data-selected]):not(:has(input:checked)) .radio__control .radio__indicator:empty:before{background-color:var(--field-hover)}.radio:has([data-slot=radio-content][data-pressed=true]) .radio__control,.radio [data-slot=radio-content][data-pressed=true] .radio__control{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.radio[data-selected] .radio__control,.radio:has([data-slot=radio-content][aria-checked=true]) .radio__control,.radio:has(input:checked) .radio__control{background-color:var(--accent);border-color:#0000}.radio[data-selected]:has([data-slot=radio-content][data-pressed=true]) .radio__control,.radio:has([data-slot=radio-content][data-pressed=true][aria-checked=true]) .radio__control,.radio:has(input:checked):has([data-slot=radio-content][data-pressed=true]) .radio__control{background-color:var(--accent-hover)}.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control):focus,:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control):focus-visible,:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control)[data-focused=true],:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control)[data-focus-visible=true],:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control):focus-within,:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control)[data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control):focus,:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control):focus-visible,:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control)[data-focused=true],:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control)[data-focus-visible=true],:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control):focus-within,:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control)[data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.radio__indicator{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.radio__indicator:empty:before{content:"";border-radius:calc(var(--radius) * 1);background-color:var(--field-background,var(--default));width:100%;height:100%;transition:scale .2s var(--ease-out),background-color .2s var(--ease-out);scale:1}@media(prefers-reduced-motion:reduce){.radio__indicator:empty:before:not(:is()){transition-property:none}}.radio[data-selected] .radio__indicator:empty:before,.radio:has([data-slot=radio-content][aria-checked=true]) .radio__indicator:empty:before,.radio:has(input:checked) .radio__indicator:empty:before{background-color:var(--accent-foreground);scale:.4286}.radio[data-selected]:has([data-slot=radio-content][data-pressed=true]) .radio__indicator:empty:before,.radio:has([data-slot=radio-content][data-pressed=true][aria-checked=true]) .radio__indicator:empty:before,.radio:has(input:checked):has([data-slot=radio-content][data-pressed=true]) .radio__indicator:empty:before{scale:.5714}.radio--disabled{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.textfield{gap:var(--spacing);flex-direction:column;display:flex}:is(.textfield[data-invalid=true],.textfield[aria-invalid=true]) [data-slot=description]{display:none}.textfield--full-width,.textfield--full-width [data-slot=input],.textfield--full-width [data-slot=textarea]{width:100%}.search-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.search-field[data-invalid=true],.search-field[aria-invalid=true]) [data-slot=description]{display:none}.search-field [data-slot=label]{width:fit-content}.search-field[data-empty=true] [data-slot=search-field-clear-button]{pointer-events:none;opacity:0}.search-field__group{height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);outline-style:none;align-items:center;display:inline-flex;position:relative;overflow:hidden}.search-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.search-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.search-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.search-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.search-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.search-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.search-field__group:hover:not(:focus-within),.search-field__group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.search-field__group[data-focus-within=true],.search-field__group:focus-within{--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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;outline-style:none}.search-field__group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.search-field__group[data-invalid=true]:focus,.search-field__group[data-invalid=true]:focus-visible,.search-field__group[data-invalid=true][data-focused=true],.search-field__group[data-invalid=true][data-focus-visible=true],.search-field__group[data-invalid=true]:focus-within,.search-field__group[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.search-field__group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.search-field__group[data-disabled=true],.search-field__group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:-webkit-any(.search-field__group:has([data-slot=search-field-input]:-webkit-autofill),.search-field__group:has([data-slot=search-field-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}:is(.search-field__group:has([data-slot=search-field-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}.search-field__input{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--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);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none;flex:1}@media(min-width:40rem){.search-field__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.search-field__input::-webkit-search-cancel-button{-webkit-appearance:none;-moz-appearance:none;appearance:none}.search-field__input::-webkit-search-decoration{-webkit-appearance:none;-moz-appearance:none;appearance:none}.search-field__group:has([data-slot=search-field-search-icon]) .search-field__input{padding-left:calc(var(--spacing) * 2);border-top-left-radius:0;border-bottom-left-radius:0}.search-field__group:has([slot=clear]) .search-field__input{padding-right:calc(var(--spacing) * 2);border-top-right-radius:0;border-bottom-right-radius:0}.search-field__input:focus,.search-field__input:focus-visible{--tw-outline-style:none;outline-style:none}.search-field__input:-webkit-autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__input:-webkit-autofill:hover{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__input:-webkit-autofill:focus{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__input:-webkit-autofill:active{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__input:autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__search-icon{pointer-events:none;color:var(--field-placeholder,var(--muted));margin-right:0;margin-left:calc(var(--spacing) * 3);width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);flex-shrink:0}.search-field__clear-button{margin-right:calc(var(--spacing) * 2);width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);flex-shrink:0}.search-field__clear-button [data-slot=close-button-icon]{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.search-field--secondary .search-field__group{--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);background-color:var(--search-field-group-bg);--search-field-group-bg:var(--default);--search-field-group-bg-hover:var(--default-hover);--search-field-group-bg-focus:var(--default)}@media(hover:hover){.search-field--secondary .search-field__group:hover:not(:focus-within),.search-field--secondary .search-field__group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--search-field-group-bg-hover)}}.search-field--secondary .search-field__group:focus-within,.search-field--secondary .search-field__group[data-focus-within=true]{background-color:var(--search-field-group-bg-focus)}.search-field--secondary .search-field__group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.search-field--secondary .search-field__group[data-invalid=true]:focus,.search-field--secondary .search-field__group[data-invalid=true]:focus-visible,.search-field--secondary .search-field__group[data-invalid=true][data-focused=true],.search-field--secondary .search-field__group[data-invalid=true][data-focus-visible=true],.search-field--secondary .search-field__group[data-invalid=true]:focus-within,.search-field--secondary .search-field__group[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.search-field--secondary .search-field__group[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--search-field-group-bg-focus)}.search-field--secondary .search-field__group [data-slot=search-field-input]{background-color:#0000}.search-field--full-width,.search-field__group--full-width{width:100%}.textarea{border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;outline-style:none}.textarea::placeholder{color:var(--field-placeholder,var(--muted))}@media(min-width:40rem){.textarea{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.textarea{border-width:var(--border-width-field);border-color:var(--field-border);min-height:38px;transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out)}.textarea:is([data-reduce-motion=true],[data-reduce-motion=true] *),.textarea:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.textarea:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.textarea:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.textarea:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.textarea:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.textarea:hover:not(:focus):not(:focus-visible),.textarea[data-hovered=true]:not([data-focused=true]):not([data-focus-visible=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.textarea:focus,.textarea[data-focused=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.textarea[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.textarea[data-invalid=true]:focus,.textarea[data-invalid=true]:focus-visible,.textarea[data-invalid=true][data-focused=true],.textarea[data-invalid=true][data-focus-visible=true],.textarea[data-invalid=true]:focus-within,.textarea[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.textarea[data-invalid=true]{background-color:var(--field-focus)}.textarea:disabled,.textarea[data-disabled=true],.textarea[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.textarea--secondary{--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);background-color:var(--textarea-bg);--textarea-bg:var(--default);--textarea-bg-hover:var(--default-hover);--textarea-bg-focus:var(--default)}@media(hover:hover){.textarea--secondary:hover:not(:focus):not(:focus-visible),.textarea--secondary[data-hovered=true]:not([data-focused=true]):not([data-focus-visible=true]){background-color:var(--textarea-bg-hover)}}.textarea--secondary:focus,.textarea--secondary[data-focused=true]{background-color:var(--textarea-bg-focus)}.textarea--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.textarea--secondary[data-invalid=true]:focus,.textarea--secondary[data-invalid=true]:focus-visible,.textarea--secondary[data-invalid=true][data-focused=true],.textarea--secondary[data-invalid=true][data-focus-visible=true],.textarea--secondary[data-invalid=true]:focus-within,.textarea--secondary[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.textarea--secondary[data-invalid=true]{background-color:var(--textarea-bg-focus)}.textarea--full-width{width:100%}.calendar{width:calc(var(--spacing) * 63);max-width:calc(var(--spacing) * 63);container-type:inline-size}.calendar--week-view .calendar__cell,.calendar--day-view .calendar__cell{aspect-ratio:1;place-self:center;width:100%;height:auto}.calendar--day-view .calendar__grid{flex-direction:column;display:flex}.calendar--day-view .calendar__grid-header{grid-template-columns:repeat(7,1fr);width:100%;display:grid}.calendar--day-view .calendar__grid-header>tr{display:contents}.calendar--day-view .calendar__grid-body{margin-top:var(--spacing);grid-template-columns:repeat(7,1fr);width:100%;display:grid}.calendar--day-view .calendar__grid-body>tr{display:contents}.calendar--day-view .calendar__grid-body>tr:first-child>td{margin-top:0}.calendar__header{padding-inline:calc(var(--spacing) * .5);padding-bottom:calc(var(--spacing) * 4);justify-content:space-between;align-items:center;display:flex}.calendar__header:has(.calendar-year-picker__trigger[data-open=true]) .calendar__nav-button{pointer-events:none;opacity:0}.calendar__heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);flex:1}.calendar__nav-button{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6);border-radius:calc(var(--radius) * 2);color:var(--accent-soft-foreground);will-change:scale;transition:transform .25s var(--ease-out),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out),opacity .15s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);justify-content:center;align-items:center;display:flex}.calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar__nav-button{cursor:var(--cursor-interactive)}@media(hover:hover){.calendar__nav-button:hover,.calendar__nav-button[data-hovered=true]{background-color:var(--default);color:var(--accent-soft-foreground)}}.calendar__nav-button:active,.calendar__nav-button[data-pressed=true]{transform:scale(.95)}.calendar__nav-button:focus-visible,.calendar__nav-button[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.calendar__nav-button:disabled,.calendar__nav-button[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.calendar__nav-button-icon{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.calendar__grid{grid-template-columns:repeat(7,1fr);width:100%;display:grid}.calendar__grid[aria-readonly=true] .calendar__cell{pointer-events:none}.calendar__grid-header,.calendar__grid-header>tr,.calendar__grid-body,.calendar__grid-body>tr{display:contents}.calendar__grid-body>tr:first-child>td{margin-top:var(--spacing)}.calendar__grid-row{display:contents}.calendar__header-cell{padding-bottom:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);justify-content:center;align-items:center;display:flex}.calendar__cell{aspect-ratio:1;border-radius:calc(var(--radius) * 3);text-align:center;width:100%;height:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;will-change:scale;transition:transform .25s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);outline-style:none;justify-content:center;align-items:center;display:flex;position:relative}.calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar__cell{cursor:var(--cursor-interactive)}.calendar__cell:focus-visible:not(:focus),.calendar__cell[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.calendar__cell[data-today=true]{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}@media(hover:hover){.calendar__cell[data-today=true]:hover:not([data-selected=true]),.calendar__cell[data-today=true][data-hovered=true]:not([data-selected=true]){background-color:var(--accent-soft-hover)}}.calendar__cell[data-selected=true]{background-color:var(--accent);color:var(--accent-foreground)}.calendar__cell:active,.calendar__cell[data-pressed=true]{background-color:var(--default);transform:scale(.95)}:is(.calendar__cell:active,.calendar__cell[data-pressed=true])[data-selected=true]{background-color:var(--accent-hover)}@media(hover:hover){.calendar__cell:hover:not([data-selected=true]),.calendar__cell[data-hovered=true]:not([data-selected=true]){background-color:var(--default)}}.calendar__cell[data-outside-month=true]{color:var(--muted);opacity:.5}.calendar__cell[data-selected=true][data-outside-month=true]{background-color:var(--default)}.calendar__cell[data-unavailable=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.calendar__cell:disabled:not([data-outside-month=true]),.calendar__cell[data-disabled=true]:not([data-outside-month=true]){opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none;text-decoration:line-through}.calendar__cell-indicator{bottom:var(--spacing);--tw-translate-x: -50% ;width:3px;height:3px;translate:var(--tw-translate-x) var(--tw-translate-y);border-radius:calc(var(--radius) * .25);background-color:var(--muted);position:absolute;left:50%}[data-selected=true]>.calendar__cell-indicator{background-color:var(--accent-foreground)}.range-calendar{width:calc(var(--spacing) * 63);max-width:calc(var(--spacing) * 63);container-type:inline-size}.range-calendar--week-view .range-calendar__cell,.range-calendar--day-view .range-calendar__cell{aspect-ratio:1;place-self:center;width:100%;height:auto}.range-calendar--day-view .range-calendar__grid{flex-direction:column;display:flex}.range-calendar--day-view .range-calendar__grid-header{grid-template-columns:repeat(7,1fr);width:100%;display:grid}.range-calendar--day-view .range-calendar__grid-header>tr{display:contents}.range-calendar--day-view .range-calendar__grid-body{margin-top:var(--spacing);grid-template-columns:repeat(7,1fr);width:100%;display:grid}.range-calendar--day-view .range-calendar__grid-body>tr{display:contents}.range-calendar--day-view .range-calendar__grid-body>tr:first-child>td{margin-top:0}.range-calendar__header{padding-inline:calc(var(--spacing) * .5);padding-bottom:calc(var(--spacing) * 4);justify-content:space-between;align-items:center;display:flex}.range-calendar__header:has(.calendar-year-picker__trigger[data-open=true]) .range-calendar__nav-button{pointer-events:none;opacity:0}.range-calendar__heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);flex:1}.range-calendar__nav-button{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6);border-radius:calc(var(--radius) * 1.5);color:var(--accent-soft-foreground);will-change:scale;transition:transform .25s var(--ease-out),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out),opacity .15s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);justify-content:center;align-items:center;display:flex}.range-calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.range-calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.range-calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.range-calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.range-calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.range-calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.range-calendar__nav-button{cursor:var(--cursor-interactive)}@media(hover:hover){.range-calendar__nav-button:hover,.range-calendar__nav-button[data-hovered=true]{background-color:var(--default);color:var(--accent-soft-foreground)}}.range-calendar__nav-button:active,.range-calendar__nav-button[data-pressed=true]{transform:scale(.95)}.range-calendar__nav-button:focus-visible,.range-calendar__nav-button[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.range-calendar__nav-button:disabled,.range-calendar__nav-button[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.range-calendar__nav-button-icon{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.range-calendar__grid{grid-template-columns:repeat(7,1fr);width:100%;display:grid}.range-calendar__grid[aria-readonly=true] .range-calendar__cell{pointer-events:none}.range-calendar__grid-header,.range-calendar__grid-header>tr,.range-calendar__grid-body,.range-calendar__grid-body>tr{display:contents}.range-calendar__grid-body>tr:first-child>td{margin-top:var(--spacing)}.range-calendar__grid-row{display:contents}.range-calendar__header-cell{padding-bottom:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);justify-content:center;align-items:center;display:flex}.range-calendar__cell{z-index:1;border-radius:calc(var(--radius) * 3);--tw-outline-style:none;cursor:var(--cursor-interactive);will-change:background-color,border-color;transition:box-shadow .1s var(--ease-out),border-color .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);outline-style:none;margin-block:2px;margin-inline:0;padding:0;position:relative}.range-calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *),.range-calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.range-calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.range-calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.range-calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.range-calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.range-calendar__cell .range-calendar__cell-button{aspect-ratio:1;border-radius:calc(var(--radius) * 3);width:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);-webkit-tap-highlight-color:transparent;will-change:scale;transition:scale .2s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);justify-content:center;align-items:center;display:flex}.range-calendar__cell .range-calendar__cell-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.range-calendar__cell .range-calendar__cell-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.range-calendar__cell .range-calendar__cell-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.range-calendar__cell .range-calendar__cell-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.range-calendar__cell .range-calendar__cell-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.range-calendar__cell .range-calendar__cell-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.range-calendar__cell:focus-visible:not(:focus),.range-calendar__cell[data-focus-visible=true]{z-index:2}:is(.range-calendar__cell:focus-visible:not(:focus),.range-calendar__cell[data-focus-visible=true]) .range-calendar__cell-button{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.range-calendar__cell[data-today=true] .range-calendar__cell-button{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}@media(hover:hover){:is(.range-calendar__cell[data-today=true]:hover:not([data-selected=true]),.range-calendar__cell[data-today=true][data-hovered=true]:not([data-selected=true])) .range-calendar__cell-button{background-color:var(--accent-soft-hover)}}.range-calendar__cell[data-selected=true]:not([data-outside-month=true]){background-color:var(--accent-soft);border-radius:0}.range-calendar__cell[data-selected=true]:is(td:first-child>*,[aria-disabled]+td>*){border-start-start-radius:calc(var(--radius) * 1);border-end-start-radius:calc(var(--radius) * 1)}.range-calendar__cell[data-selected=true]:is(td:first-child>*,[aria-disabled]+td>*)[data-selection-start=true]{border-start-start-radius:calc(var(--radius) * 3);border-end-start-radius:calc(var(--radius) * 3)}.range-calendar__cell[data-selected=true]:is(td:last-child>*,td:has(+[aria-disabled])>*){border-start-end-radius:calc(var(--radius) * 1);border-end-end-radius:calc(var(--radius) * 1)}.range-calendar__cell[data-selected=true]:is(td:last-child>*,td:has(+[aria-disabled])>*)[data-selection-end=true]{border-start-end-radius:calc(var(--radius) * 3);border-end-end-radius:calc(var(--radius) * 3)}.range-calendar__cell[data-selection-start=true]:not([data-outside-month=true]),.range-calendar__cell[data-selection-end=true]:not([data-outside-month=true]){z-index:2}:is(.range-calendar__cell[data-selection-start=true]:not([data-outside-month=true]),.range-calendar__cell[data-selection-end=true]:not([data-outside-month=true])) .range-calendar__cell-button{background-color:var(--accent);color:var(--accent-foreground)}.range-calendar__cell[data-selection-start=true]:not([data-outside-month=true]){border-top-left-radius:calc(var(--radius) * 3);border-bottom-left-radius:calc(var(--radius) * 3)}.range-calendar__cell[data-selection-end=true]:not([data-outside-month=true]){border-top-right-radius:calc(var(--radius) * 3);border-bottom-right-radius:calc(var(--radius) * 3)}:is(.range-calendar__cell:active,.range-calendar__cell[data-pressed=true]) .range-calendar__cell-button{scale:.9}:is(:is(.range-calendar__cell:active,.range-calendar__cell[data-pressed=true])[data-selection-start=true],:is(.range-calendar__cell:active,.range-calendar__cell[data-pressed=true])[data-selection-end=true]) .range-calendar__cell-button{background-color:var(--accent-hover)}@media(hover:hover){:is(.range-calendar__cell:hover:not([data-selected=true]),.range-calendar__cell[data-hovered=true]:not([data-selected=true])) .range-calendar__cell-button{background-color:var(--default)}}.range-calendar__cell[data-outside-month=true]{color:var(--muted);opacity:.5}.range-calendar__cell[data-selected=true][data-outside-month=true]:not([data-selection-start=true],[data-selection-end=true]){background-color:var(--default)}@supports (color:color-mix(in lab,red,red)){.range-calendar__cell[data-selected=true][data-outside-month=true]:not([data-selection-start=true],[data-selection-end=true]){background-color:color-mix(in oklab,var(--default) 20%,transparent)}}.range-calendar__cell[data-unavailable=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.range-calendar__cell:disabled:not([data-outside-month=true]),.range-calendar__cell[data-disabled=true]:not([data-outside-month=true]){opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none;text-decoration:line-through}.range-calendar__grid-body td:has(>.range-calendar__cell[data-outside-month=true])+td>.range-calendar__cell[data-selected=true]{border-start-start-radius:calc(var(--radius) * 1);border-end-start-radius:calc(var(--radius) * 1)}.range-calendar__grid-body td:has(>.range-calendar__cell[data-outside-month=true])+td>.range-calendar__cell[data-selected=true][data-outside-month=true],.range-calendar__grid-body td:has(>.range-calendar__cell[data-outside-month=true])+td>.range-calendar__cell[data-selected=true][data-selection-start=true]{border-start-start-radius:calc(var(--radius) * 3);border-end-start-radius:calc(var(--radius) * 3)}.range-calendar__grid-body td:has(>.range-calendar__cell[data-selected=true]):has(+td>.range-calendar__cell[data-outside-month=true])>.range-calendar__cell[data-selected=true]{border-start-end-radius:calc(var(--radius) * 1);border-end-end-radius:calc(var(--radius) * 1)}.range-calendar__grid-body td:has(>.range-calendar__cell[data-selected=true]):has(+td>.range-calendar__cell[data-outside-month=true])>.range-calendar__cell[data-selected=true][data-outside-month=true],.range-calendar__grid-body td:has(>.range-calendar__cell[data-selected=true]):has(+td>.range-calendar__cell[data-outside-month=true])>.range-calendar__cell[data-selected=true][data-selection-end=true]{border-start-end-radius:calc(var(--radius) * 3);border-end-end-radius:calc(var(--radius) * 3)}.range-calendar__cell-indicator{bottom:var(--spacing);--tw-translate-x: -50% ;width:3px;height:3px;translate:var(--tw-translate-x) var(--tw-translate-y);border-radius:calc(var(--radius) * .25);background-color:var(--muted);position:absolute;left:50%}[data-selected=true]>.range-calendar__cell-indicator{background-color:var(--accent-foreground)}.calendar:has(.calendar-year-picker__year-grid),.range-calendar:has(.calendar-year-picker__year-grid){position:relative}.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]{will-change:opacity;transition:opacity .15s var(--ease-out),visibility 0s linear}:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]{pointer-events:none;opacity:0;visibility:hidden;transition:opacity .15s var(--ease-out),visibility 0s linear .15s}:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__trigger{justify-content:flex-start;align-items:center;gap:var(--spacing);border-radius:calc(var(--radius) * 1);--tw-outline-style:none;cursor:var(--cursor-interactive);touch-action:manipulation;outline-style:none;flex:1;display:flex}.calendar-year-picker__trigger: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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.calendar-year-picker__trigger-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition:color .15s var(--ease-out)}.calendar-year-picker__trigger-heading:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar-year-picker__trigger-heading:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar-year-picker__trigger-heading:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar-year-picker__trigger-heading:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar-year-picker__trigger-heading:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar-year-picker__trigger-heading:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__trigger-indicator{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--accent-soft-foreground);transition:transform .15s var(--ease-out)}.calendar-year-picker__trigger-indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar-year-picker__trigger-indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar-year-picker__trigger-indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar-year-picker__trigger-indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar-year-picker__trigger-indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar-year-picker__trigger-indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__trigger[data-open=true] .calendar-year-picker__trigger-indicator{transform:rotate(90deg)}.calendar-year-picker__trigger[data-open=true] .calendar-year-picker__trigger-heading{color:var(--accent-soft-foreground)}.calendar-year-picker__year-grid{pointer-events:none;scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);align-content:flex-start;gap:var(--spacing);padding:var(--spacing);opacity:0;will-change:opacity;grid-template-columns:repeat(3,1fr);display:grid;position:absolute;left:0;right:0;overflow-y:auto}.calendar-year-picker__year-grid[data-open=true]{pointer-events:auto;opacity:1;transition:opacity .2s var(--ease-out) 50ms}.calendar-year-picker__year-grid[data-open=true]:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar-year-picker__year-grid[data-open=true]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar-year-picker__year-grid[data-open=true]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar-year-picker__year-grid[data-open=true]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar-year-picker__year-grid[data-open=true]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar-year-picker__year-grid[data-open=true]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__year-cell{height:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 3);padding-inline:calc(var(--spacing) * 2.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;transition:color .1s var(--ease-smooth),scale .1s var(--ease-smooth),opacity .1s var(--ease-smooth),background-color .1s var(--ease-smooth),box-shadow .1s var(--ease-out);transform-origin:50%;transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);outline-style:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.calendar-year-picker__year-cell:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar-year-picker__year-cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar-year-picker__year-cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar-year-picker__year-cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar-year-picker__year-cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar-year-picker__year-cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__year-cell{cursor:var(--cursor-interactive)}@media(hover:hover)and (pointer:fine){.calendar-year-picker__year-cell:is(:hover,[data-hovered=true]):not([data-selected=true]){background-color:var(--default);color:var(--default-foreground)}}.calendar-year-picker__year-cell[data-selected=true],.calendar-year-picker__year-cell[aria-selected=true]{background-color:var(--accent);color:var(--accent-foreground)}@media(hover:hover)and (pointer:fine){:is(.calendar-year-picker__year-cell[data-selected=true],.calendar-year-picker__year-cell[aria-selected=true]):is(:hover,[data-hovered=true]){background-color:var(--accent-hover)}}.calendar-year-picker__year-cell: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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.date-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.date-field[data-invalid=true],.date-field[aria-invalid=true]) [data-slot=description]{display:none}.date-field [data-slot=label]{width:fit-content}.date-field--full-width{width:100%}.time-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.time-field[data-invalid=true],.time-field[aria-invalid=true]) [data-slot=description]{display:none}.time-field [data-slot=label]{width:fit-content}.time-field--full-width{width:100%}.date-input-group{height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);outline-style:none;align-items:center;display:inline-flex;overflow:hidden}.date-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.date-input-group:hover:not(:focus-within),.date-input-group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.date-input-group[data-focus-within=true]:not(:has([data-slot=date-picker-trigger]:focus,[data-slot=date-picker-trigger][data-focused=true],[data-slot=date-range-picker-trigger]:focus,[data-slot=date-range-picker-trigger][data-focused=true])),.date-input-group:focus-within:not(:has([data-slot=date-picker-trigger]:focus,[data-slot=date-picker-trigger][data-focused=true],[data-slot=date-range-picker-trigger]:focus,[data-slot=date-range-picker-trigger][data-focused=true])){--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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;outline-style:none}.date-input-group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.date-input-group[data-invalid=true]:focus,.date-input-group[data-invalid=true]:focus-visible,.date-input-group[data-invalid=true][data-focused=true],.date-input-group[data-invalid=true][data-focus-visible=true],.date-input-group[data-invalid=true]:focus-within,.date-input-group[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.date-input-group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.date-input-group[data-disabled=true],.date-input-group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.date-input-group__input{cursor:text;border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--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);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none;flex:1;align-items:center;gap:1px;display:flex}@media(min-width:40rem){.date-input-group__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.date-input-group:has([data-slot=date-input-group-prefix]) .date-input-group__input{padding-left:calc(var(--spacing) * 2);border-top-left-radius:0;border-bottom-left-radius:0}.date-input-group:has([data-slot=date-input-group-suffix]) .date-input-group__input{padding-right:calc(var(--spacing) * 2);border-top-right-radius:0;border-bottom-right-radius:0}.date-input-group:has(.date-range-picker__range-separator) .date-input-group__input[slot=start]{flex:none;padding-right:0}.date-input-group:has(.date-range-picker__range-separator) .date-input-group__input[slot=end]{padding-left:0}.date-input-group__input:focus,.date-input-group__input:focus-visible{--tw-outline-style:none;outline-style:none}.date-input-group__input-container{scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;flex:1;align-items:center;width:fit-content;display:flex;overflow:auto clip}.date-input-group__segment{border-radius:calc(var(--radius) * .75);padding-inline:calc(var(--spacing) * .5);text-align:end;text-wrap:nowrap;--tw-outline-style:none;outline-style:none;display:inline-block}.date-input-group__segment[data-type=literal]{color:var(--muted);padding:0}.date-input-group__segment[data-placeholder=true]{color:var(--field-placeholder,var(--muted))}.date-input-group__segment:focus,.date-input-group__segment[data-focused=true]{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}.date-input-group__segment[data-disabled=true]{opacity:.5}.date-input-group__segment[data-invalid=true]{color:var(--danger)}.date-input-group__segment[data-invalid=true]:focus,.date-input-group__segment[data-invalid=true][data-focused=true]{background-color:var(--danger-soft);color:var(--danger-soft-foreground)}.date-input-group__prefix{pointer-events:none;color:var(--field-placeholder,var(--muted));margin-right:0;margin-left:calc(var(--spacing) * 3);flex-shrink:0;align-items:center;display:flex}.date-input-group__suffix{pointer-events:none;color:var(--field-placeholder,var(--muted));margin-right:calc(var(--spacing) * 3);flex-shrink:0;align-items:center;display:flex}.date-input-group--secondary{--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);background-color:var(--date-input-group-bg);--date-input-group-bg:var(--default);--date-input-group-bg-hover:var(--default-hover);--date-input-group-bg-focus:var(--default)}@media(hover:hover){.date-input-group--secondary:hover:not(:focus-within),.date-input-group--secondary[data-hovered=true]:not([data-focus-within=true]){background-color:var(--date-input-group-bg-hover)}}.date-input-group--secondary:focus-within,.date-input-group--secondary[data-focus-within=true]{background-color:var(--date-input-group-bg-focus)}.date-input-group--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.date-input-group--secondary[data-invalid=true]:focus,.date-input-group--secondary[data-invalid=true]:focus-visible,.date-input-group--secondary[data-invalid=true][data-focused=true],.date-input-group--secondary[data-invalid=true][data-focus-visible=true],.date-input-group--secondary[data-invalid=true]:focus-within,.date-input-group--secondary[data-invalid=true][data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.date-input-group--secondary[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--date-input-group-bg-focus)}.date-input-group--secondary [data-slot=date-input-group-input]{background-color:#0000}.date-input-group--full-width{width:100%}.date-picker{gap:var(--spacing);flex-direction:column;display:inline-flex}.date-picker .date-input-group__suffix,.date-picker .date-input-group__prefix{pointer-events:auto}.date-picker__trigger{border-radius:var(--field-radius,calc(var(--radius) * 1.5));width:100%;padding:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:box-shadow .15s var(--ease-out);align-items:center;display:inline-flex}.date-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.date-picker__trigger:focus-visible:not(:focus),.date-picker__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.date-picker__trigger:disabled,.date-picker__trigger[data-disabled=true],.date-picker__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.date-picker__trigger-indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);color:var(--field-placeholder,var(--muted));justify-content:center;align-items:center;display:inline-flex}.date-picker__popover{min-width:var(--trigger-width);transform-origin:var(--trigger-anchor-point);scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;overscroll-behavior:contain;background-color:var(--overlay);padding:calc(var(--spacing) * 3);overflow-y:auto}.date-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.date-picker__popover{box-shadow:var(--shadow-overlay);border-radius:min(32px,calc(var(--radius) * 2.5))}.date-picker__popover:focus-visible:not(:focus),.date-picker__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.date-picker__popover[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.date-picker__popover[data-entering=true][data-placement^=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.date-picker__popover[data-entering=true][data-placement^=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.date-picker__popover[data-entering=true][data-placement^=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.date-picker__popover[data-entering=true][data-placement^=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.date-picker__popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.date-picker__popover[data-exiting=true],.date-picker__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.date-range-picker{gap:var(--spacing);flex-direction:column;display:inline-flex}.date-range-picker .date-input-group__suffix,.date-range-picker .date-input-group__prefix{pointer-events:auto}.date-range-picker__trigger{border-radius:var(--field-radius,calc(var(--radius) * 1.5));width:100%;padding:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:box-shadow .15s var(--ease-out);align-items:center;display:inline-flex}.date-range-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-range-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-range-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-range-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-range-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-range-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.date-range-picker__trigger:focus-visible:not(:focus),.date-range-picker__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.date-range-picker__trigger:disabled,.date-range-picker__trigger[data-disabled=true],.date-range-picker__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.date-range-picker__trigger-indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);color:var(--field-placeholder,var(--muted));justify-content:center;align-items:center;display:inline-flex}.date-range-picker__range-separator{padding-inline:var(--spacing);color:var(--field-placeholder,var(--muted));-webkit-user-select:none;user-select:none}.date-range-picker__popover{min-width:var(--trigger-width);transform-origin:var(--trigger-anchor-point);scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;overscroll-behavior:contain;background-color:var(--overlay);padding:calc(var(--spacing) * 3);overflow-y:auto}.date-range-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-range-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-range-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-range-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-range-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-range-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.date-range-picker__popover{box-shadow:var(--shadow-overlay);border-radius:min(32px,calc(var(--radius) * 2.5))}.date-range-picker__popover:focus-visible:not(:focus),.date-range-picker__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.date-range-picker__popover[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.date-range-picker__popover[data-entering=true][data-placement^=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.date-range-picker__popover[data-entering=true][data-placement^=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.date-range-picker__popover[data-entering=true][data-placement^=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.date-range-picker__popover[data-entering=true][data-placement^=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.date-range-picker__popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.date-range-picker__popover[data-exiting=true],.date-range-picker__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.card{gap:calc(var(--spacing) * 3);padding:calc(var(--spacing) * 4);--tw-shadow:var(--surface-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:min(32px,var(--radius-3xl));flex-direction:column;display:flex;position:relative;overflow:visible}.card__header{flex-direction:column;display:flex}.card__title{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.card__description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5);color:var(--muted)}.card__content{gap:var(--spacing);flex-direction:column;flex:1;display:flex}.card__footer{flex-direction:row;align-items:center;display:flex}.card--transparent{--tw-border-style: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);background-color:#0000;border-style:none}.card--default{background-color:var(--surface)}.card--secondary{background-color:var(--surface-secondary)}.card--tertiary{background-color:var(--surface-tertiary)}.header{width:100%;padding-inline:calc(var(--spacing) * 2);padding-top:calc(var(--spacing) * 1.5);padding-bottom:var(--spacing);text-align:left;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted)}.separator{border-radius:calc(var(--radius) * .5);border-top-style:var(--tw-border-style);border-top-width:0;border-bottom-style:var(--tw-border-style);background-color:var(--separator);border-bottom-width:0;flex-shrink:0;width:100%;height:1px}.separator--horizontal{width:100%;height:1px}.separator--vertical{height:auto;min-height:calc(var(--spacing) * 2);align-self:stretch;width:1px}.separator--default{background-color:var(--separator)}.separator--secondary{background-color:var(--separator-secondary)}.separator--tertiary{background-color:var(--separator-tertiary)}.separator__container{align-items:center;gap:calc(var(--spacing) * 3);display:flex}.separator__container--horizontal{flex-direction:row;width:100%}.separator__container--vertical{flex-direction:column;justify-content:center;height:100%}.separator__line{flex-grow:1;flex-shrink:0}.separator__content{text-align:center;white-space:nowrap;color:var(--muted);justify-content:center;align-items:center;display:inline-flex}.separator__content--horizontal,.separator__content--vertical{text-align:center}.surface{color:var(--foreground);position:relative}.surface--transparent{background-color:#0000}.surface--default{background-color:var(--surface);color:var(--surface-foreground)}.surface--secondary{background-color:var(--surface-secondary);color:var(--surface-secondary-foreground)}.surface--tertiary{background-color:var(--surface-tertiary);color:var(--surface-tertiary-foreground)}.avatar{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);border-radius:calc(var(--radius) * 3);background-color:var(--default);flex-shrink:0;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.avatar__fallback{background-color:var(--default);width:100%;height:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);justify-content:center;align-items:center;display:flex}.avatar__image{aspect-ratio:1;width:100%;height:100%;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;transition-duration:.25s;position:absolute;top:0;right:0;bottom:0;left:0}.avatar__image:is([data-reduce-motion=true],[data-reduce-motion=true] *),.avatar__image:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.avatar__image:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.avatar__image:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.avatar__image:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.avatar__image:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.avatar--sm{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 2)}.avatar--lg{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12);border-radius:calc(var(--radius) * 3)}.avatar--lg .avatar__fallback{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.avatar__fallback--accent{color:var(--accent-soft-foreground)}.avatar__fallback--default{color:var(--default-soft-foreground)}.avatar__fallback--success{color:var(--success-soft-foreground)}.avatar__fallback--warning{color:var(--warning-soft-foreground)}.avatar__fallback--danger{color:var(--danger-soft-foreground)}.avatar--soft{background-color:#0000}.avatar--soft .avatar__fallback--accent{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}.avatar--soft .avatar__fallback--success{background-color:var(--success-soft);color:var(--success-soft-foreground)}.avatar--soft .avatar__fallback--warning{background-color:var(--warning-soft);color:var(--warning-soft-foreground)}.avatar--soft .avatar__fallback--default{background-color:var(--default-soft);color:var(--default-soft-foreground)}.avatar--soft .avatar__fallback--danger{background-color:var(--danger-soft);color:var(--danger-soft-foreground)}.alert-dialog__trigger{cursor:var(--cursor-interactive);transition:transform .25s var(--ease-out-quart),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.alert-dialog__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.alert-dialog__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.alert-dialog__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.alert-dialog__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.alert-dialog__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.alert-dialog__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.alert-dialog__trigger:focus-visible:not(:focus),.alert-dialog__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.alert-dialog__trigger:disabled,.alert-dialog__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.alert-dialog__trigger:active,.alert-dialog__trigger[data-pressed=true]{transform:scale(.97)}.alert-dialog__backdrop{z-index:50;height:var(--visual-viewport-height);flex-direction:row;justify-content:center;align-items:center;width:100%;display:flex;position:fixed;top:0;right:0;bottom:0;left:0}.alert-dialog__backdrop[data-entering=true]{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);--tw-duration:.15s;--tw-ease:var(--ease-out);transition-duration:.15s;transition-timing-function:var(--ease-out);--tw-enter-opacity:0}.alert-dialog__backdrop[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out);--tw-exit-opacity:0}.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]{will-change:opacity}:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.alert-dialog__backdrop--transparent{background-color:#0000}.alert-dialog__backdrop--opaque{background-color:var(--backdrop)}.alert-dialog__backdrop--blur{background-color:var(--backdrop);--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.alert-dialog__container{height:var(--visual-viewport-height);width:100%;min-width:0;padding:calc(var(--spacing) * 4);flex-direction:column;flex:1;align-items:center;display:flex}@media(min-width:40rem){.alert-dialog__container{width:fit-content;padding:calc(var(--spacing) * 10)}}.alert-dialog__container{pointer-events:none}.alert-dialog__container[data-entering=true]{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);--tw-duration:.25s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-enter-opacity:0;--tw-enter-scale: 105% ;transition-duration:.25s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.alert-dialog__container[data-entering=true][data-placement=auto]{--tw-enter-translate-y:calc(1*var(--spacing))}@media(min-width:40rem){.alert-dialog__container[data-entering=true][data-placement=auto]{--tw-enter-translate-y: 0% }}.alert-dialog__container[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.alert-dialog__container[data-entering=true][data-placement=center]{--tw-enter-translate-y: -0% }.alert-dialog__container[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing))}.alert-dialog__container[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-exit-opacity:0;--tw-exit-scale:.95;transition-duration:.1s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]{will-change:opacity,transform}:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.alert-dialog__dialog{background-color:var(--overlay);--tw-shadow:var(--overlay-shadow);width:100%;min-height:0;max-height:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-radius:min(32px,var(--radius-3xl));padding:calc(var(--spacing) * 6);pointer-events:auto;outline-style:none;flex-direction:column;display:flex;position:relative;overflow:clip}.alert-dialog__dialog[data-placement=auto]{margin-top:auto}@media(min-width:40rem){.alert-dialog__dialog[data-placement=auto]{margin-block:auto}}.alert-dialog__dialog[data-placement=center]{margin-block:auto}.alert-dialog__dialog[data-placement=bottom]{margin-top:auto}.alert-dialog__dialog[data-placement=top]{margin-top:0}.alert-dialog__dialog--xs{max-width:var(--container-xs)}.alert-dialog__dialog--sm{max-width:var(--container-sm)}.alert-dialog__dialog--md{max-width:var(--container-md)}.alert-dialog__dialog--lg{max-width:var(--container-lg)}.alert-dialog__dialog--cover{width:100%;height:100%;min-height:100%}.alert-dialog__header{gap:calc(var(--spacing) * 3);flex-direction:column;margin-bottom:0;display:flex}.alert-dialog__header>.modal__icon{margin-bottom:0}.alert-dialog__heading{vertical-align:middle;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.alert-dialog__icon{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);border-radius:calc(var(--radius) * 3);-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.alert-dialog__icon [data-slot=alert-dialog-default-icon]{box-sizing:content-box;width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.alert-dialog__icon--default{background-color:var(--default);color:var(--foreground)}.alert-dialog__icon--accent{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}.alert-dialog__icon--success{background-color:var(--success-soft);color:var(--success-soft-foreground)}.alert-dialog__icon--warning{background-color:var(--warning-soft);color:var(--warning-soft-foreground)}.alert-dialog__icon--danger{background-color:var(--danger-soft);color:var(--danger-soft-foreground)}.alert-dialog__body{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);min-height:0;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1.43;color:var(--muted);overscroll-behavior:contain;-webkit-overflow-scrolling:touch;margin:-3px;flex:1;margin-block:0;padding:3px;line-height:1.43;overflow-y:auto}.alert-dialog__footer{justify-content:flex-end;align-items:center;gap:calc(var(--spacing) * 2);flex-direction:row;margin-top:0;display:flex}.alert-dialog__close-trigger{top:calc(var(--spacing) * 4);right:calc(var(--spacing) * 4);position:absolute}.alert-dialog__header+.alert-dialog__body{margin-top:calc(var(--spacing) * 2)}.alert-dialog__header+.alert-dialog__footer,.alert-dialog__body+.alert-dialog__footer{margin-top:calc(var(--spacing) * 5)}.drawer__trigger{cursor:var(--cursor-interactive);transition:transform .25s var(--ease-out-quart),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.drawer__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.drawer__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.drawer__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.drawer__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.drawer__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.drawer__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.drawer__trigger:focus-visible:not(:focus),.drawer__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.drawer__trigger:disabled,.drawer__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.drawer__trigger:active,.drawer__trigger[data-pressed=true]{transform:scale(.97)}.drawer__backdrop{z-index:50;height:var(--visual-viewport-height);opacity:1;width:100%;transition:opacity .25s cubic-bezier(.32,.72,0,1);position:fixed;top:0;right:0;bottom:0;left:0}.drawer__backdrop[data-entering=true]{opacity:0}.drawer__backdrop[data-exiting=true]{opacity:0;transition-duration:.2s;transition-timing-function:cubic-bezier(.32,.72,0,1)}.drawer__backdrop[data-exiting=true],.drawer__backdrop[data-entering=true]{will-change:opacity}@media(prefers-reduced-motion:reduce){.drawer__backdrop{transition:none}}.drawer__backdrop--transparent{background-color:#0000}.drawer__backdrop--opaque{background-color:var(--backdrop)}.drawer__backdrop--blur{background-color:var(--backdrop);--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.drawer__content{pointer-events:none;z-index:50;height:var(--visual-viewport-height);width:100%;min-width:0;display:flex;position:fixed;top:0;right:0;bottom:0;left:0}.drawer__content--bottom{align-items:flex-end}.drawer__content--top{align-items:flex-start}.drawer__content--left{justify-content:flex-start}.drawer__content--right{justify-content:flex-end}.drawer__dialog{background-color:var(--overlay);--tw-shadow:var(--overlay-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;padding:calc(var(--spacing) * 6);pointer-events:auto;--drawer-enter-duration:.25s;--drawer-exit-duration:.2s;--drawer-enter-ease:cubic-bezier(.32, .72, 0, 1);--drawer-exit-ease:cubic-bezier(.32, .72, 0, 1);will-change:translate;transition:translate var(--drawer-enter-duration) var(--drawer-enter-ease);outline-style:none;flex-direction:column;display:flex;position:relative}@media(prefers-reduced-motion:reduce){.drawer__dialog{transition:none}}.drawer__dialog[data-placement=bottom]{border-top-left-radius:min(32px,var(--radius-2xl));border-top-right-radius:min(32px,var(--radius-2xl));width:100%;max-height:85vh}.drawer__dialog[data-placement=top]{border-bottom-left-radius:min(32px,var(--radius-2xl));border-bottom-right-radius:min(32px,var(--radius-2xl));width:100%;max-height:85vh}.drawer__dialog[data-placement=left]{height:100%;width:calc(var(--spacing) * 80);border-radius:0;max-width:85vw}@media(min-width:40rem){.drawer__dialog[data-placement=left]{width:calc(var(--spacing) * 96)}}.drawer__dialog[data-placement=right]{height:100%;width:calc(var(--spacing) * 80);border-radius:0;max-width:85vw}@media(min-width:40rem){.drawer__dialog[data-placement=right]{width:calc(var(--spacing) * 96)}}[data-exiting=true] .drawer__dialog{transition-duration:var(--drawer-exit-duration);transition-timing-function:var(--drawer-exit-ease)}.drawer__content--left .drawer__dialog,.drawer__content--right .drawer__dialog,.drawer__content--top .drawer__dialog,.drawer__content--bottom .drawer__dialog{translate:0}.drawer__content--left[data-entering=true] .drawer__dialog,.drawer__content--left[data-exiting=true] .drawer__dialog{translate:-100%}.drawer__content--right[data-entering=true] .drawer__dialog,.drawer__content--right[data-exiting=true] .drawer__dialog{translate:100%}.drawer__content--top[data-entering=true] .drawer__dialog,.drawer__content--top[data-exiting=true] .drawer__dialog{translate:0 -100%}.drawer__content--bottom[data-entering=true] .drawer__dialog,.drawer__content--bottom[data-exiting=true] .drawer__dialog{translate:0 100%}.drawer__dialog--top{padding-bottom:calc(var(--spacing) * 2)}.drawer__dialog--top .drawer__handle{padding-bottom:0}.drawer__header{gap:calc(var(--spacing) * 3);flex-direction:column;margin-bottom:0;display:flex}.drawer__heading{vertical-align:middle;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.drawer__body{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);min-height:0;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1.43;color:var(--muted);overscroll-behavior:contain;-webkit-overflow-scrolling:touch;margin:-3px;flex:1;margin-block:0;padding:3px;line-height:1.43;overflow-y:auto}.drawer__footer{justify-content:flex-end;align-items:center;gap:calc(var(--spacing) * 2);flex-direction:row;margin-top:0;display:flex}.drawer__handle{padding-bottom:calc(var(--spacing) * 2);justify-content:center;align-items:center;display:flex}.drawer__handle>[data-slot=drawer-handle-bar]{height:var(--spacing);width:calc(var(--spacing) * 9);border-radius:calc(var(--radius) * .25);background-color:var(--separator)}.drawer__close-trigger{top:calc(var(--spacing) * 4);right:calc(var(--spacing) * 4);position:absolute}.drawer__header+.drawer__body{margin-top:calc(var(--spacing) * 2)}.drawer__header+.drawer__footer,.drawer__body+.drawer__footer{margin-top:calc(var(--spacing) * 5)}.drawer__handle+.drawer__header,.drawer__handle+.drawer__body{margin-top:0}.modal__trigger{cursor:var(--cursor-interactive);transition:transform .25s var(--ease-out-quart),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.modal__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.modal__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.modal__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.modal__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.modal__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.modal__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.modal__trigger:focus-visible:not(:focus),.modal__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.modal__trigger:disabled,.modal__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.modal__trigger:active,.modal__trigger[data-pressed=true]{transform:scale(.97)}.modal__backdrop{z-index:50;height:var(--visual-viewport-height);flex-direction:row;justify-content:center;align-items:center;width:100%;display:flex;position:fixed;top:0;right:0;bottom:0;left:0}.modal__backdrop[data-entering=true]{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);--tw-duration:.15s;--tw-ease:var(--ease-out);transition-duration:.15s;transition-timing-function:var(--ease-out);--tw-enter-opacity:0}.modal__backdrop[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out);--tw-exit-opacity:0}.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]{will-change:opacity}:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.modal__backdrop--transparent{background-color:#0000}.modal__backdrop--opaque{background-color:var(--backdrop)}.modal__backdrop--blur{background-color:var(--backdrop);--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.modal__container{height:var(--visual-viewport-height);width:100%;min-width:0;padding:calc(var(--spacing) * 4);flex-direction:column;flex:1;align-items:center;display:flex}@media(min-width:40rem){.modal__container{width:fit-content;padding:calc(var(--spacing) * 10)}}.modal__container{pointer-events:none}.modal__container[data-entering=true]{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);--tw-duration:.25s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-enter-opacity:0;--tw-enter-scale: 105% ;transition-duration:.25s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.modal__container[data-entering=true][data-placement=auto]{--tw-enter-translate-y:calc(1*var(--spacing))}@media(min-width:40rem){.modal__container[data-entering=true][data-placement=auto]{--tw-enter-translate-y: 0% }}.modal__container[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.modal__container[data-entering=true][data-placement=center]{--tw-enter-translate-y: -0% }.modal__container[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing))}.modal__container[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-exit-opacity:0;--tw-exit-scale:.95;transition-duration:.1s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.modal__container[data-exiting=true],.modal__container[data-entering=true]{will-change:opacity,transform}:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.modal__container--scroll-outside{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);pointer-events:auto;-webkit-overflow-scrolling:touch;overflow-y:auto}.modal__container--full{padding:0}@media(min-width:40rem){.modal__container--full{padding:0}}.modal__container--full[data-entering=true]{--tw-enter-translate-y: 0% ;--tw-enter-scale:1}@media(min-width:40rem){.modal__container--full[data-entering=true]{--tw-enter-translate-y: 0% }}.modal__container--full[data-exiting=true]{--tw-exit-scale:1}.modal__dialog{background-color:var(--overlay);--tw-shadow:var(--overlay-shadow);width:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-radius:min(32px,var(--radius-3xl));padding:calc(var(--spacing) * 6);pointer-events:auto;outline-style:none;flex-direction:column;display:flex;position:relative}.modal__dialog[data-placement=auto]{margin-top:auto}@media(min-width:40rem){.modal__dialog[data-placement=auto]{margin-block:auto}}.modal__dialog[data-placement=center]{margin-block:auto}.modal__dialog[data-placement=bottom]{margin-top:auto}.modal__dialog[data-placement=top]{margin-top:0}.modal__dialog--scroll-inside{min-height:0;max-height:100%;overflow:clip}.modal__dialog--scroll-outside{flex-shrink:0;height:auto;min-height:0}.modal__dialog--xs{max-width:var(--container-xs)}.modal__dialog--sm{max-width:var(--container-sm)}.modal__dialog--md{max-width:var(--container-md)}.modal__dialog--lg{max-width:var(--container-lg)}.modal__dialog--cover{width:100%;height:100%;min-height:100%}.modal__dialog--full{--tw-shadow:0 0 #0000;width:100%;height:100%;min-height:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:0}.modal__header{gap:calc(var(--spacing) * 3);flex-direction:column;margin-bottom:0;display:flex}.modal__header>.modal__icon{margin-bottom:0}.modal__heading{vertical-align:middle;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.modal__icon{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);border-radius:calc(var(--radius) * 3);-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.modal__body{min-height:0;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1.43;color:var(--muted);margin:-3px;flex:1;margin-block:0;padding:3px;line-height:1.43;overflow:visible}.modal__body--scroll-inside{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overscroll-behavior:contain;-webkit-overflow-scrolling:touch;overflow-y:auto}.modal__body--scroll-outside{overflow-y:visible}.modal__footer{justify-content:flex-end;align-items:center;gap:calc(var(--spacing) * 2);flex-direction:row;margin-top:0;display:flex}.modal__close-trigger{top:calc(var(--spacing) * 4);right:calc(var(--spacing) * 4);position:absolute}.modal__header+.modal__body{margin-top:calc(var(--spacing) * 2)}.modal__header+.modal__footer,.modal__body+.modal__footer{margin-top:calc(var(--spacing) * 5)}.popover{transform-origin:var(--trigger-anchor-point);background-color:var(--overlay);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-radius:min(32px,var(--radius-3xl));box-shadow:var(--shadow-overlay);padding:0}.popover[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.9;transition-duration:.15s;transition-timing-function:ease}.popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.popover[data-exiting=true],.popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.popover__dialog{padding:calc(var(--spacing) * 4);--tw-outline-style:none;outline-style:none}.popover__heading{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.popover__trigger{transition:color .15s var(--ease-smooth),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.popover__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.popover__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.popover__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.popover__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.popover__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.popover__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.popover__trigger{cursor:var(--cursor-interactive)}.popover__trigger:focus-visible:not(:focus),.popover__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.popover__trigger:disabled,.popover__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.tooltip{max-width:var(--container-xs);transform-origin:var(--trigger-anchor-point);background-color:var(--overlay);padding:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));word-break:break-all;border-radius:min(32px,var(--radius-xl));box-shadow:var(--shadow-overlay)}.tooltip[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.9;transition-duration:.15s;transition-timing-function:ease}.tooltip[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.tooltip[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.tooltip[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.tooltip[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.tooltip[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.tooltip[data-exiting=true],.tooltip[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.tooltip [data-slot=overlay-arrow]{stroke:var(--border)}@supports (color:color-mix(in lab,red,red)){.tooltip [data-slot=overlay-arrow]{stroke:color-mix(in oklab,var(--border) 40%,transparent)}}.tooltip [data-slot=overlay-arrow]{fill:var(--overlay)}.tooltip[data-placement=bottom] [data-slot=overlay-arrow]{rotate:180deg}.tooltip[data-placement=left] [data-slot=overlay-arrow]{rotate:-90deg}.tooltip[data-placement=right] [data-slot=overlay-arrow]{rotate:90deg}.tooltip__trigger{transition:color .15s var(--ease-smooth),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.tooltip__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tooltip__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tooltip__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tooltip__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tooltip__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tooltip__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tooltip__trigger:focus-visible:not(:focus),.tooltip__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.combo-box{gap:var(--spacing);flex-direction:column;display:flex}:is(.combo-box[data-invalid=true],.combo-box[aria-invalid=true]) [data-slot=description]{display:none}.combo-box [data-slot=label]{width:fit-content}.combo-box [data-slot=input]{flex:1;min-width:0}.combo-box [data-slot=input]:has(+.combo-box__trigger){padding-inline-end:calc(var(--spacing) * 7)}.combo-box [data-slot=input]:focus,.combo-box [data-slot=input][data-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);--tw-ring-color:var(--focus);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-offset-width:0px;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.combo-box [data-slot=input]:disabled,.combo-box [data-slot=input][data-disabled],.combo-box [data-slot=input][aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.combo-box__input-group{isolation:isolate;align-items:center;display:inline-flex;position:relative}.combo-box__trigger{--tw-translate-y: -50% ;height:100%;translate:var(--tw-translate-x) var(--tw-translate-y);cursor:pointer;color:var(--field-placeholder,var(--muted));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;-webkit-tap-highlight-color:transparent;--tw-border-style:none;--tw-outline-style:none;inset-inline-end:calc(var(--spacing) * 0);background-color:#0000;border-style:none;outline-style:none;flex-shrink:0;justify-content:center;align-items:center;padding-inline-end:calc(var(--spacing) * 2);transition-duration:.15s;display:flex;position:absolute;top:50%}@media(hover:hover){.combo-box__trigger:hover,.combo-box__trigger[data-hovered=true]{color:var(--field-foreground,var(--foreground))}}.combo-box__trigger:focus-visible:not(:focus),.combo-box__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--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);--tw-ring-offset-color:var(--background);--tw-outline-style:none;border-radius:.25rem;outline-style:none}.combo-box__trigger[data-pressed=true]{opacity:.7}.combo-box__trigger:disabled,.combo-box__trigger[data-disabled],.combo-box__trigger[aria-disabled=true]{cursor:not-allowed;opacity:.5}.combo-box__trigger [data-slot=combo-box-trigger-default-icon]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);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));--tw-duration:.15s;transition-duration:.15s}.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:is([data-reduce-motion=true],[data-reduce-motion=true] *),.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.combo-box__trigger[data-open=true] [data-slot=combo-box-trigger-default-icon]{rotate:180deg}.combo-box__popover{min-width:var(--trigger-width);transform-origin:var(--trigger-anchor-point);scroll-padding-block:var(--spacing);scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overscroll-behavior:contain;background-color:var(--overlay);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-radius:min(32px,var(--radius-3xl));box-shadow:var(--shadow-overlay);padding:0;overflow-y:auto}.combo-box__popover:focus-visible:not(:focus),.combo-box__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.combo-box__popover[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.combo-box__popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.combo-box__popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.combo-box__popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.combo-box__popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.combo-box__popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.combo-box__popover[data-exiting=true],.combo-box__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.combo-box__popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.combo-box__popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.combo-box__popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.combo-box__popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.combo-box__popover [data-slot=list-box]{padding:calc(var(--spacing) * 1.5);--tw-outline-style:none;outline-style:none}.combo-box__popover [data-slot=list-box-item]{padding-inline:calc(var(--spacing) * 2.5)}.combo-box__popover [data-slot=list-box-item] [data-slot=list-box-item-indicator--checkmark]{transition-property:none}.combo-box--full-width,.combo-box__input-group--full-width{width:100%}.select{gap:var(--spacing);flex-direction:column;display:flex}:is(.select[data-invalid=true],.select[aria-invalid=true]) [data-slot=description]{display:none}.select [data-slot=label]{width:fit-content}.select__trigger{isolation:isolate;min-height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);border-width:1px;outline-style:none;display:inline-flex;position:relative}.select__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.select__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.select__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.select__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.select__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.select__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.select__trigger{cursor:var(--cursor-interactive);border-width:var(--border-width-field);border-color:var(--field-border)}.select__trigger:has(.select__indicator){padding-inline-end:calc(var(--spacing) * 7)}@media(hover:hover){.select__trigger:hover,.select__trigger[data-hovered=true]{background-color:var(--field-hover);border-color:var(--field-border-hover)}}.select__trigger:focus-visible:not(:focus),.select__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger):focus,:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger):focus-visible,:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger)[data-focused=true],:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger)[data-focus-visible=true],:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger):focus-within,:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger)[data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger{background-color:var(--field-focus)}.select__trigger:disabled,.select__trigger[data-disabled=true],.select__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.select--secondary .select__trigger{--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);background-color:var(--select-trigger-bg);--select-trigger-bg:var(--default);--select-trigger-bg-hover:var(--default-hover);--select-trigger-bg-focus:var(--default)}@media(hover:hover){.select--secondary .select__trigger:hover,.select--secondary .select__trigger[data-hovered=true]{background-color:var(--select-trigger-bg-hover)}}.select--secondary .select__trigger:focus-visible:not(:focus),.select--secondary .select__trigger[data-focus-visible=true],.select[data-invalid=true] :is(.select--secondary .select__trigger),.select[aria-invalid=true] :is(.select--secondary .select__trigger){background-color:var(--select-trigger-bg-focus)}.select__value{text-align:start;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));overflow-wrap:break-word;color:currentColor;flex:1}@media(min-width:40rem){.select__value{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.select__value[data-placeholder=true]{color:var(--field-placeholder,var(--muted))}.select__value [data-slot=list-box-item-indicator]{display:none}.select__indicator{color:var(--field-placeholder,var(--muted));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;flex-shrink:0;justify-content:center;align-items:center;margin-block:auto;transition-duration:.15s;display:flex;position:absolute;inset-block:0;inset-inline-end:calc(var(--spacing) * 2)}.select__indicator[data-open=true]{rotate:180deg}.select__indicator[data-slot=select-default-indicator]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.select__popover{min-width:var(--trigger-width);transform-origin:var(--trigger-anchor-point);scroll-padding-block:var(--spacing);scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overscroll-behavior:contain;background-color:var(--overlay);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-radius:min(32px,var(--radius-3xl));box-shadow:var(--shadow-overlay);padding:0;overflow-y:auto}.select__popover:focus-visible:not(:focus),.select__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.select__popover[data-entering=true]{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);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.select__popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.select__popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.select__popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.select__popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.select__popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:ease}.select__popover[data-exiting=true],.select__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.select__popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.select__popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.select__popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.select__popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.select__popover [data-slot=list-box]{padding:calc(var(--spacing) * 1.5);--tw-outline-style:none;outline-style:none}.select__popover [data-slot=list-box-item]{padding-inline:calc(var(--spacing) * 2.5)}.select__popover [data-slot=list-box]:not([aria-multiselectable=true]) [data-slot=list-box-item-indicator],.select__popover [data-slot=list-box]:not([aria-multiselectable=true]) [data-slot=list-box-item-indicator] [data-slot=list-box-item-indicator--checkmark]{transition-property:none}.select--full-width,.select__trigger--full-width{width:100%}.autocomplete{gap:var(--spacing);flex-direction:column;display:flex}.autocomplete__trigger{isolation:isolate;min-height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);border-width:1px;outline-style:none;display:inline-flex;position:relative}.autocomplete__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.autocomplete__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.autocomplete__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.autocomplete__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.autocomplete__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.autocomplete__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.autocomplete__trigger{cursor:var(--cursor-interactive);border-width:var(--border-width-field);border-color:var(--field-border)}.autocomplete__trigger:has(.autocomplete__indicator){padding-inline-end:calc(var(--spacing) * 7)}@media(hover:hover){.autocomplete__trigger:hover:not(:has(.autocomplete__clear-button:hover)),.autocomplete__trigger[data-hovered=true]:not(:has(.autocomplete__clear-button:hover)){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.autocomplete__trigger:focus-visible:not(:focus),.autocomplete__trigger[data-focus-visible=true]{--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);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger):focus,:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger):focus-visible,:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger)[data-focused=true],:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger)[data-focus-visible=true],:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger):focus-within,:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger)[data-focus-within=true]{--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);--tw-ring-color:var(--danger);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-width:0px}.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger{background-color:var(--field-focus)}.autocomplete__trigger:disabled,.autocomplete__trigger[data-disabled=true],.autocomplete__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.autocomplete--secondary .autocomplete__trigger{--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);background-color:var(--autocomplete-trigger-bg);--autocomplete-trigger-bg:var(--default);--autocomplete-trigger-bg-hover:var(--default-hover);--autocomplete-trigger-bg-focus:var(--default)}@media(hover:hover){.autocomplete--secondary .autocomplete__trigger:hover:not(:has(.autocomplete__clear-button:hover)),.autocomplete--secondary .autocomplete__trigger[data-hovered=true]:not(:has(.autocomplete__clear-button:hover)){background-color:var(--autocomplete-trigger-bg-hover)}}.autocomplete--secondary .autocomplete__trigger:focus-visible:not(:focus),.autocomplete--secondary .autocomplete__trigger[data-focus-visible=true],.autocomplete[data-invalid=true] :is(.autocomplete--secondary .autocomplete__trigger),.autocomplete[aria-invalid=true] :is(.autocomplete--secondary .autocomplete__trigger){background-color:var(--autocomplete-trigger-bg-focus)}.autocomplete__value{text-align:start;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));overflow-wrap:break-word;color:currentColor;flex:1}@media(min-width:40rem){.autocomplete__value{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.autocomplete__value[data-placeholder=true]{color:var(--field-placeholder,var(--muted))}.autocomplete__value [data-slot=list-box-item-indicator]{display:none}.autocomplete__indicator{color:var(--field-placeholder,var(--muted));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;cursor:var(--cursor-interactive);flex-shrink:0;justify-content:center;align-items:center;margin-block:auto;transition-duration:.15s;display:flex;position:absolute;inset-block:0;inset-inline-end:calc(var(--spacing) * 2)}.autocomplete__indicator[data-open=true]{rotate:180deg}.autocomplete__indicator[data-slot=autocomplete-default-indicator]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.autocomplete__popover{width:var(--trigger-width);max-width:var(--trigger-width);transform-origin:var(--trigger-anchor-point);scroll-padding-block:var(--spacing);overscroll-behavior:contain;background-color:var(--overlay);padding:0;padding-top:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-radius:min(32px,var(--radius-3xl));box-shadow:var(--shadow-overlay);overflow:hidden}.autocomplete__popover:focus-visible:not(:focus),.autocomplete__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.autocomplete__popover[data-entering=true]{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);--tw-duration:.25s;--tw-ease:cubic-bezier(.32, .72, 0, 1);--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.25s;transition-timing-function:cubic-bezier(.32,.72,0,1)}.autocomplete__popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.autocomplete__popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.autocomplete__popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.autocomplete__popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.autocomplete__popover[data-exiting=true]{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);--tw-duration:.1s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-exit-scale:.95;--tw-exit-opacity:0;transition-duration:.1s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.autocomplete__popover[data-exiting=true],.autocomplete__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.autocomplete__popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.autocomplete__popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.autocomplete__popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.autocomplete__popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.autocomplete__popover [data-slot=list-box]{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);max-height:320px;padding:calc(var(--spacing) * 1.5);--tw-outline-style:none;outline-style:none;overflow-y:auto}.autocomplete__popover [data-slot=list-box-item]{padding-inline:calc(var(--spacing) * 2.5)}.autocomplete__popover [data-slot=list-box]:not([aria-multiselectable=true]) [data-slot=list-box-item-indicator],.autocomplete__popover [data-slot=list-box]:not([aria-multiselectable=true]) [data-slot=list-box-item-indicator] [data-slot=list-box-item-indicator--checkmark]{transition-property:none}.autocomplete__popover [data-slot=search-field]{padding-inline:calc(var(--spacing) * 3);padding-block:var(--spacing);--tw-outline-style:none;outline-style:none}.autocomplete__popover [data-slot=empty-state]{text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--overlay-foreground)}@supports (color:color-mix(in lab,red,red)){.autocomplete__popover [data-slot=empty-state]{color:color-mix(in oklab,var(--overlay-foreground) 60%,transparent)}}.autocomplete__popover-dialog,.autocomplete__popover-dialog:focus,.autocomplete__popover-dialog:focus-visible,.autocomplete__popover-dialog[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.autocomplete--full-width,.autocomplete__trigger--full-width{width:100%}.autocomplete__clear-button{isolation:isolate;height:calc(var(--spacing) * 6);width:calc(var(--spacing) * 6);transform-origin:50%;border-radius:calc(var(--radius) * 1.5);padding:var(--spacing);color:var(--muted);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);cursor:var(--cursor-interactive);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);background-color:#0000;flex-shrink:0;justify-content:center;align-self:center;align-items:center;margin-inline-end:0;display:inline-flex;position:relative}.autocomplete__clear-button:not([data-empty=true]){transition:opacity .15s var(--ease-smooth)}.autocomplete__clear-button:not([data-empty=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),.autocomplete__clear-button:not([data-empty=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.autocomplete__clear-button:not([data-empty=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.autocomplete__clear-button:not([data-empty=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.autocomplete__clear-button:not([data-empty=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.autocomplete__clear-button:not([data-empty=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.autocomplete__clear-button[data-empty=true]{pointer-events:none;opacity:0}.autocomplete__clear-button [data-slot=autocomplete-clear-button-icon]{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}@media(hover:hover){.autocomplete__clear-button:hover,.autocomplete__clear-button[data-hovered=true]{background-color:var(--default-hover)}}.autocomplete__clear-button:active,.autocomplete__clear-button[data-pressed=true]{transform:scale(.93)}.kbd{height:calc(var(--spacing) * 6);align-items:center;display:inline-flex}:where(.kbd>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * .5) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-x-reverse)))}.kbd{border-radius:calc(var(--radius) * 1);background-color:var(--default);padding-inline:calc(var(--spacing) * 2);text-align:center;font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--muted)}:where(.kbd:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}.kbd{word-spacing:-.25rem}.kbd__abbr{justify-content:center;align-items:center;width:100%;height:100%;text-decoration:none;display:flex}.kbd__content{justify-content:center;align-items:center;display:flex}.kbd--light{background-color:#0000}.typography,.typography-prose{color:var(--foreground)}.typography-prose h1{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h2{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h3{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h4{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h5{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h6{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose p{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.typography-prose code{border-radius:calc(var(--radius) * .75);background-color:var(--default);padding-inline:calc(var(--spacing) * 1.5);padding-block:calc(var(--spacing) * .5);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--foreground)}.typography-prose a{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--link);text-underline-offset:4px;text-decoration-line:underline}.typography-prose blockquote{margin-top:calc(var(--spacing) * 4);border-left-style:var(--tw-border-style);border-left-width:4px;border-color:var(--border);padding-left:calc(var(--spacing) * 4);color:var(--muted);font-style:italic}.typography-prose ul{margin-block:calc(var(--spacing) * 4);list-style-type:disc}:where(.typography-prose ul>: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)))}.typography-prose ul{padding-left:calc(var(--spacing) * 6)}.typography-prose ol{margin-block:calc(var(--spacing) * 4);list-style-type:decimal}:where(.typography-prose ol>: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)))}.typography-prose ol{padding-left:calc(var(--spacing) * 6)}.typography-prose li{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.typography-prose hr{margin-block:calc(var(--spacing) * 8);border-color:var(--separator)}.typography-prose pre{margin-block:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1.5);background-color:var(--default);padding:calc(var(--spacing) * 4);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);overflow-x:auto}.typography-prose strong{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--foreground)}.typography-prose em{font-style:italic}.typography-prose img{margin-block:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1.5)}.typography--h1{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h2{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h3{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h4{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h5{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h6{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--body{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.typography--body-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.typography--body-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.typography--code{border-radius:calc(var(--radius) * .75);background-color:var(--default);padding-inline:calc(var(--spacing) * 1.5);padding-block:calc(var(--spacing) * .5);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--foreground)}.typography--align-start{text-align:left}.typography--align-start:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}.typography--align-center{text-align:center}.typography--align-end{text-align:right}.typography--align-end:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:left}.typography--align-justify{text-align:justify}.typography--color-default{color:var(--foreground)}.typography--color-muted{color:var(--muted)}.typography--truncate{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.typography--weight-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.typography--weight-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.typography--weight-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.typography--weight-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.scroll-shadow{--scroll-shadow-size:40px;--scroll-shadow-scrollbar-size:10px;position:relative}.scroll-shadow--vertical{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overflow-y:auto}.scroll-shadow--horizontal{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overflow-x:auto}.scroll-shadow--fade.scroll-shadow--vertical:where([data-top-scroll=true],[data-bottom-scroll=true],[data-top-bottom-scroll=true]){mask-image:linear-gradient(var(--scroll-linear-gradient)),linear-gradient(#000,#000);mask-position:0 0,100% 0;mask-repeat:no-repeat;mask-size:calc(100% - var(--scroll-shadow-scrollbar-size)) 100%,var(--scroll-shadow-scrollbar-size) 100%;-webkit-mask-image:linear-gradient(var(--scroll-linear-gradient)),linear-gradient(#000,#000);-webkit-mask-position:0 0,100% 0;-webkit-mask-repeat:no-repeat;-webkit-mask-size:calc(100% - var(--scroll-shadow-scrollbar-size)) 100%,var(--scroll-shadow-scrollbar-size) 100%}.scroll-shadow--fade.scroll-shadow--vertical[data-top-scroll=true]{--scroll-linear-gradient:0deg, #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--vertical[data-bottom-scroll=true]{--scroll-linear-gradient:180deg, #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--vertical[data-top-bottom-scroll=true]{--scroll-linear-gradient:#000, #000, transparent 0, #000 var(--scroll-shadow-size), #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--horizontal:where([data-left-scroll=true],[data-right-scroll=true],[data-left-right-scroll=true]){mask-image:linear-gradient(var(--scroll-linear-gradient)),linear-gradient(#000,#000);mask-position:0 0,0 100%;mask-repeat:no-repeat;mask-size:100% calc(100% - var(--scroll-shadow-scrollbar-size)),100% var(--scroll-shadow-scrollbar-size);-webkit-mask-image:linear-gradient(var(--scroll-linear-gradient)),linear-gradient(#000,#000);-webkit-mask-position:0 0,0 100%;-webkit-mask-repeat:no-repeat;-webkit-mask-size:100% calc(100% - var(--scroll-shadow-scrollbar-size)),100% var(--scroll-shadow-scrollbar-size)}.scroll-shadow--fade.scroll-shadow--horizontal[data-left-scroll=true]{--scroll-linear-gradient:270deg, #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--horizontal[data-right-scroll=true]{--scroll-linear-gradient:90deg, #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--horizontal[data-left-right-scroll=true]{--scroll-linear-gradient:to right, #000, #000, transparent 0, #000 var(--scroll-shadow-size), #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--hide-scrollbar{scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;--scroll-shadow-scrollbar-size:0px}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-4{top:calc(var(--spacing) * 4)}.top-full{top:100%}.-right-3{right:calc(var(--spacing) * -3)}.right-0{right:0}.right-4{right:calc(var(--spacing) * 4)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.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:var(--spacing)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-auto{margin-inline:auto}.-mt-1{margin-top:calc(var(--spacing) * -1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-auto{margin-top:auto}.-mr-1{margin-right:calc(var(--spacing) * -1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1{height:var(--spacing)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-12{height:calc(var(--spacing) * 12)}.h-48{height:calc(var(--spacing) * 48)}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:0}.min-h-full{min-height:100%}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-28{width:calc(var(--spacing) * 28)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-\[17rem\]{width:17rem}.w-fit{width:fit-content}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-44{max-width:calc(var(--spacing) * 44)}.max-w-\[1800px\]{max-width:1800px}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-\[140px\]{min-width:140px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:0;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0\.5{--tw-translate-x:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing) * 5);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-\[var\(--otari-line\)\]>:not(:last-child)){border-color:var(--otari-line)}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:calc(var(--radius) * 1)}.rounded-md{border-radius:calc(var(--radius) * .75)}.rounded-xl{border-radius:calc(var(--radius) * 1.5)}.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-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-\[\#c2843a\]{border-color:#c2843a}.border-\[var\(--otari-brand\)\]{border-color:var(--otari-brand)}.border-\[var\(--otari-line\)\]{border-color:var(--otari-line)}.border-amber-200{border-color:var(--color-amber-200)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-green-200{border-color:var(--color-green-200)}.border-red-200{border-color:var(--color-red-200)}.border-l-amber-500{border-left-color:var(--color-amber-500)}.border-l-emerald-500{border-left-color:var(--color-emerald-500)}.border-l-red-500{border-left-color:var(--color-red-500)}.bg-\[var\(--otari-bg\)\]{background-color:var(--otari-bg)}.bg-\[var\(--otari-brand\)\]{background-color:var(--otari-brand)}.bg-\[var\(--otari-brand-tint\)\]{background-color:var(--otari-brand-tint)}.bg-\[var\(--otari-line\)\]{background-color:var(--otari-line)}.bg-\[var\(--otari-surface\)\]{background-color:var(--otari-surface)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-500{background-color:var(--color-green-500)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-500{background-color:var(--color-red-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-7{padding:calc(var(--spacing) * 7)}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-10{padding-block:calc(var(--spacing) * 10)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-1{padding-bottom:var(--spacing)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.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))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#b45309\]{color:#b45309}.text-\[var\(--otari-brand-dark\)\]{color:var(--otari-brand-dark)}.text-\[var\(--otari-ink\)\]{color:var(--otari-ink)}.text-\[var\(--otari-muted\)\]{color:var(--otari-muted)}.text-amber-400{color:var(--color-amber-400)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-emerald-700{color:var(--color-emerald-700)}.text-green-700{color:var(--color-green-700)}.text-red-700{color:var(--color-red-700)}.text-white{color:var(--color-white)}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.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-2{text-underline-offset:2px}.accent-\[var\(--otari-brand\)\]{accent-color:var(--otari-brand)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-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-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.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-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-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.running{animation-play-state:running}.group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-data-\[focus-visible\]\:outline-2:is(:where(.group)[data-focus-visible] *){outline-style:var(--tw-outline-style);outline-width:2px}.group-data-\[focus-visible\]\:outline-\[var\(--otari-brand\)\]:is(:where(.group)[data-focus-visible] *){outline-color:var(--otari-brand)}@media(hover:hover){.hover\:border-\[var\(--otari-brand\)\]:hover{border-color:var(--otari-brand)}.hover\:bg-\[var\(--otari-bg\)\]:hover{background-color:var(--otari-bg)}.hover\:bg-\[var\(--otari-brand\)\]:hover{background-color:var(--otari-brand)}.hover\:text-\[var\(--otari-brand\)\]:hover{color:var(--otari-brand)}.hover\:text-\[var\(--otari-brand-dark\)\]:hover{color:var(--otari-brand-dark)}.hover\:text-\[var\(--otari-ink\)\]:hover{color:var(--otari-ink)}.hover\:text-amber-950:hover{color:var(--color-amber-950)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-\[var\(--otari-brand\)\]:focus{border-color:var(--otari-brand)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:bg-\[var\(--otari-brand\)\]:focus-visible{background-color:var(--otari-brand)}.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-\[var\(--otari-brand\)\]:focus-visible{--tw-ring-color:var(--otari-brand)}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-start-1{grid-column-start:1}.sm\:col-start-2{grid-column-start:2}.sm\:col-start-3{grid-column-start:3}.sm\:w-28{width:calc(var(--spacing) * 28)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[minmax\(0\,1fr\)_16rem_10rem\]{grid-template-columns:minmax(0,1fr) 16rem 10rem}.sm\:flex-row{flex-direction:row}.sm\:flex-wrap{flex-wrap:wrap}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-self-end{justify-self:flex-end}.sm\:justify-self-start{justify-self:flex-start}.sm\:p-5{padding:calc(var(--spacing) * 5)}.sm\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}}@media(min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-auto{width:auto}.md\:px-6{padding-inline:calc(var(--spacing) * 6)}.md\:py-6{padding-block:calc(var(--spacing) * 6)}}@media(min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-4{top:calc(var(--spacing) * 4)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,1fr\)_360px\]{grid-template-columns:minmax(0,1fr) 360px}.lg\:items-start{align-items:flex-start}}@media(min-width:80rem){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}}@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{--otari-brand:#4e8295;--otari-brand-dark:#3c6678;--otari-brand-tint:#eaf1f3;--otari-ink:#14242c;--otari-muted:#5b6b73;--otari-line:#dbe5e8;--otari-surface:#fff;--otari-bg:#f6f9fa}.otari-table.table-root{background-color:var(--otari-surface);border:1px solid var(--otari-line);border-radius:.75rem;padding:0;overflow:hidden}.otari-table .table__header{background-color:var(--otari-brand-tint);border-bottom:1px solid var(--otari-line)}.otari-table .table__column,.otari-table [role=row]>[role=presentation]:first-of-type>.table__column,.otari-table [role=row]>[role=presentation]:last-of-type>.table__column{color:var(--otari-ink);background-color:#0000;border-radius:0;font-weight:600}.otari-table .table__column:after{content:none}.otari-table .table__row .table__cell{border-color:var(--otari-line)}.otari-table .table__row:hover .table__cell{background-color:var(--otari-bg)}html,body,#root{height:100%}body{background-color:var(--otari-bg);color:var(--otari-ink);margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-divide-y-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-content{syntax:"*";inherits:false;initial-value:""}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-border-spacing-x{syntax:"";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:"";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@keyframes caret-blink{0%,70%,to{opacity:1}20%,50%{opacity:0}}@keyframes skeleton{to{transform:translate(200%)}} diff --git a/src/gateway/static/dashboard/assets/recharts-CR3TAEof.js b/src/gateway/static/dashboard/assets/recharts-D7kuKp97.js similarity index 99% rename from src/gateway/static/dashboard/assets/recharts-CR3TAEof.js rename to src/gateway/static/dashboard/assets/recharts-D7kuKp97.js index d9b56d84..c3b6c468 100644 --- a/src/gateway/static/dashboard/assets/recharts-CR3TAEof.js +++ b/src/gateway/static/dashboard/assets/recharts-D7kuKp97.js @@ -1,4 +1,4 @@ -var kg=Object.defineProperty;var Tg=(e,t,r)=>t in e?kg(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var ii=(e,t,r)=>Tg(e,typeof t!="symbol"?t+"":t,r);import{r as h,c as iv,a as av,g as Mg,R as jg}from"./react-dgEcD0HR.js";import{c as ne,r as Dg}from"./heroui-BX6JwHY-.js";var $g=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"];function Ou(e){if(typeof e!="string")return!1;var t=$g;return t.includes(e)}var Ng=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],Rg=new Set(Ng);function ov(e){return typeof e!="string"?!1:Rg.has(e)}function uv(e){return typeof e=="string"&&e.startsWith("data-")}function wt(e){if(typeof e!="object"||e===null)return{};var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(ov(r)||uv(r))&&(t[r]=e[r]);return t}function Ln(e){if(e==null)return null;if(h.isValidElement(e)&&typeof e.props=="object"&&e.props!==null){var t=e.props;return wt(t)}return typeof e=="object"&&!Array.isArray(e)?wt(e):null}function Ge(e){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(ov(r)||uv(r)||Ou(r))&&(t[r]=e[r]);return t}function Lg(e){return e==null?null:h.isValidElement(e)?Ge(e.props):typeof e=="object"&&!Array.isArray(e)?Ge(e):null}var Bg=["children","width","height","viewBox","className","style","title","desc"];function jo(){return jo=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=e.children,n=e.width,i=e.height,a=e.viewBox,o=e.className,u=e.style,l=e.title,c=e.desc,s=zg(e,Bg),f=a||{width:n,height:i,x:0,y:0},d=ne("recharts-surface",o);return h.createElement("svg",jo({},Ge(s),{className:d,width:n,height:i,style:u,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height),ref:t}),h.createElement("title",null,l),h.createElement("desc",null,c),r)}),Wg=["children","className"];function Do(){return Do=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=e.children,n=e.className,i=Ug(e,Wg),a=ne("recharts-layer",n);return h.createElement("g",Do({className:a},Ge(i),{ref:t}),r)});function $o(e){return e==="__proto__"}function cv(e){switch(typeof e){case"number":case"symbol":return!1;case"string":return e.includes(".")||e.includes("[")||e.includes("]")}}function Pu(e){var t;return typeof e=="string"||typeof e=="symbol"?e:Object.is((t=e==null?void 0:e.valueOf)==null?void 0:t.call(e),-0)?"-0":String(e)}function sv(e){if(e==null)return"";if(typeof e=="string")return e;if(Array.isArray(e))return e.map(sv).join(",");const t=String(e);return t==="0"&&Object.is(Number(e),-0)?"-0":t}function Su(e){if(Array.isArray(e))return e.map(Pu);if(typeof e=="symbol")return[e];e=sv(e);const t=[],r=e.length;if(r===0)return t;let n=0,i="",a="",o=!1;for(e.charCodeAt(0)===46&&t.push("");n1&&arguments[1]!==void 0?arguments[1]:Yg,r=10**t,n=Math.round(e*r)/r;return Object.is(n,-0)?0:n}function Se(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n{var u=r[o-1];return typeof u=="string"?i+u+a:u!==void 0?i+It(u)+a:i+a},"")}var We=e=>e===0?0:e>0?1:-1,At=e=>typeof e=="number"&&e!=+e,mr=e=>typeof e=="string"&&e.length>1&&e.indexOf("%")===e.length-1,D=e=>(typeof e=="number"||e instanceof Number)&&!At(e),Ot=e=>D(e)||typeof e=="string",Vg=0,Sn=e=>{var t=++Vg;return"".concat(e||"").concat(t)},ut=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!D(t)&&typeof t!="string")return n;var a;if(mr(t)){if(r==null)return n;var o=t.indexOf("%");a=r*parseFloat(t.slice(0,o))/100}else a=+t;return At(a)&&(a=n),i&&r!=null&&a>r&&(a=r),a},fv=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,r={},n=0;nn&&(typeof t=="function"?t(n):Tt(n,t))===r)}var ae=e=>e===null||typeof e>"u",Eu=e=>ae(e)?e:"".concat(e.charAt(0).toUpperCase()).concat(e.slice(1));function mt(e){return e!=null}function Or(){}function Iu(e){if(e)return{x:e.x,y:e.y,upperWidth:"upperWidth"in e?e.upperWidth:e.width,lowerWidth:"lowerWidth"in e?e.lowerWidth:e.width,width:e.width,height:e.height}}function ac(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function dt(e){for(var t=1;t{var t=e.viewBox,r=e.position,n=e.offset,i=n===void 0?0:n,a=e.parentViewBox,o=Iu(t),u=o.x,l=o.y,c=o.height,s=o.upperWidth,f=o.lowerWidth,d=u,v=u+(s-f)/2,p=(d+v)/2,m=(s+f)/2,y=d+s/2,g=c>=0?1:-1,x=g*i,A=g>0?"end":"start",w=g>0?"start":"end",O=s>=0?1:-1,b=O*i,S=O>0?"end":"start",I=O>0?"start":"end",_=a;if(r==="top"){var T={x:d+s/2,y:l-x,horizontalAnchor:"middle",verticalAnchor:A};return _&&(T.height=Math.max(l-_.y,0),T.width=s),T}if(r==="bottom"){var k={x:v+f/2,y:l+c+x,horizontalAnchor:"middle",verticalAnchor:w};return _&&(k.height=Math.max(_.y+_.height-(l+c),0),k.width=f),k}if(r==="left"){var E={x:p-b,y:l+c/2,horizontalAnchor:S,verticalAnchor:"middle"};return _&&(E.width=Math.max(E.x-_.x,0),E.height=c),E}if(r==="right"){var R={x:p+m+b,y:l+c/2,horizontalAnchor:I,verticalAnchor:"middle"};return _&&(R.width=Math.max(_.x+_.width-R.x,0),R.height=c),R}var $=_?{width:m,height:c}:{};return r==="insideLeft"?dt({x:p+b,y:l+c/2,horizontalAnchor:I,verticalAnchor:"middle"},$):r==="insideRight"?dt({x:p+m-b,y:l+c/2,horizontalAnchor:S,verticalAnchor:"middle"},$):r==="insideTop"?dt({x:d+s/2,y:l+x,horizontalAnchor:"middle",verticalAnchor:w},$):r==="insideBottom"?dt({x:v+f/2,y:l+c-x,horizontalAnchor:"middle",verticalAnchor:A},$):r==="insideTopLeft"?dt({x:d+b,y:l+x,horizontalAnchor:I,verticalAnchor:w},$):r==="insideTopRight"?dt({x:d+s-b,y:l+x,horizontalAnchor:S,verticalAnchor:w},$):r==="insideBottomLeft"?dt({x:v+b,y:l+c-x,horizontalAnchor:I,verticalAnchor:A},$):r==="insideBottomRight"?dt({x:v+f-b,y:l+c-x,horizontalAnchor:S,verticalAnchor:A},$):r&&typeof r=="object"&&(D(r.x)||mr(r.x))&&(D(r.y)||mr(r.y))?dt({x:u+ut(r.x,m),y:l+ut(r.y,c),horizontalAnchor:"end",verticalAnchor:"end"},$):dt({x:y,y:l+c/2,horizontalAnchor:"middle",verticalAnchor:"middle"},$)},Qg=["top","left","right","bottom"];function Jg(e){return e==null?!1:typeof e=="object"?!0:Qg.includes(e)}var e0=h.createContext(null);function ue(e){return function(){return e}}const No=Math.PI,Ro=2*No,or=1e-6,t0=Ro-or;function vv(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return vv;const r=10**t;return function(n){this._+=n[0];for(let i=1,a=n.length;ior)if(!(Math.abs(f*l-c*s)>or)||!a)this._append`L${this._x1=t},${this._y1=r}`;else{let v=n-o,p=i-u,m=l*l+c*c,y=v*v+p*p,g=Math.sqrt(m),x=Math.sqrt(d),A=a*Math.tan((No-Math.acos((m+d-y)/(2*g*x)))/2),w=A/x,O=A/g;Math.abs(w-1)>or&&this._append`L${t+w*s},${r+w*f}`,this._append`A${a},${a},0,0,${+(f*v>s*p)},${this._x1=t+O*l},${this._y1=r+O*c}`}}arc(t,r,n,i,a,o){if(t=+t,r=+r,n=+n,o=!!o,n<0)throw new Error(`negative radius: ${n}`);let u=n*Math.cos(i),l=n*Math.sin(i),c=t+u,s=r+l,f=1^o,d=o?i-a:a-i;this._x1===null?this._append`M${c},${s}`:(Math.abs(this._x1-c)>or||Math.abs(this._y1-s)>or)&&this._append`L${c},${s}`,n&&(d<0&&(d=d%Ro+Ro),d>t0?this._append`A${n},${n},0,1,${f},${t-u},${r-l}A${n},${n},0,1,${f},${this._x1=c},${this._y1=s}`:d>or&&this._append`A${n},${n},0,${+(d>=No)},${f},${this._x1=t+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function hv(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new n0(t)}function _u(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function pv(e){this._context=e}pv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function ma(e){return new pv(e)}function mv(e){return e[0]}function yv(e){return e[1]}function gv(e,t){var r=ue(!0),n=null,i=ma,a=null,o=hv(u);e=typeof e=="function"?e:e===void 0?mv:ue(e),t=typeof t=="function"?t:t===void 0?yv:ue(t);function u(l){var c,s=(l=_u(l)).length,f,d=!1,v;for(n==null&&(a=i(v=o())),c=0;c<=s;++c)!(c=v;--p)u.point(A[p],w[p]);u.lineEnd(),u.areaEnd()}g&&(A[d]=+e(y,d,f),w[d]=+t(y,d,f),u.point(n?+n(y,d,f):A[d],r?+r(y,d,f):w[d]))}if(x)return u=null,x+""||null}function s(){return gv().defined(i).curve(o).context(a)}return c.x=function(f){return arguments.length?(e=typeof f=="function"?f:ue(+f),n=null,c):e},c.x0=function(f){return arguments.length?(e=typeof f=="function"?f:ue(+f),c):e},c.x1=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:ue(+f),c):n},c.y=function(f){return arguments.length?(t=typeof f=="function"?f:ue(+f),r=null,c):t},c.y0=function(f){return arguments.length?(t=typeof f=="function"?f:ue(+f),c):t},c.y1=function(f){return arguments.length?(r=f==null?null:typeof f=="function"?f:ue(+f),c):r},c.lineX0=c.lineY0=function(){return s().x(e).y(t)},c.lineY1=function(){return s().x(e).y(r)},c.lineX1=function(){return s().x(n).y(t)},c.defined=function(f){return arguments.length?(i=typeof f=="function"?f:ue(!!f),c):i},c.curve=function(f){return arguments.length?(o=f,a!=null&&(u=o(a)),c):o},c.context=function(f){return arguments.length?(f==null?a=u=null:u=o(a=f),c):a},c}class bv{constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}}function i0(e){return new bv(e,!0)}function a0(e){return new bv(e,!1)}function _i(){}function Ci(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function xv(e){this._context=e}xv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Ci(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Ci(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function o0(e){return new xv(e)}function wv(e){this._context=e}wv.prototype={areaStart:_i,areaEnd:_i,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Ci(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function u0(e){return new wv(e)}function Av(e){this._context=e}Av.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Ci(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function l0(e){return new Av(e)}function Ov(e){this._context=e}Ov.prototype={areaStart:_i,areaEnd:_i,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function c0(e){return new Ov(e)}function oc(e){return e<0?-1:1}function uc(e,t,r){var n=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(n||i<0&&-0),o=(r-e._y1)/(i||n<0&&-0),u=(a*i+o*n)/(n+i);return(oc(a)+oc(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function lc(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function eo(e,t,r){var n=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-n)/3;e._context.bezierCurveTo(n+u,i+u*t,a-u,o-u*r,a,o)}function ki(e){this._context=e}ki.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:eo(this,this._t0,lc(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,eo(this,lc(this,r=uc(this,e,t)),r);break;default:eo(this,this._t0,r=uc(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function Pv(e){this._context=new Sv(e)}(Pv.prototype=Object.create(ki.prototype)).point=function(e,t){ki.prototype.point.call(this,t,e)};function Sv(e){this._context=e}Sv.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,a){this._context.bezierCurveTo(t,e,n,r,a,i)}};function s0(e){return new ki(e)}function f0(e){return new Pv(e)}function Ev(e){this._context=e}Ev.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var n=cc(e),i=cc(t),a=0,o=1;o=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function v0(e){return new ya(e,.5)}function h0(e){return new ya(e,0)}function p0(e){return new ya(e,1)}function yr(e,t){if((o=e.length)>1)for(var r=1,n,i,a=e[t[0]],o,u=a.length;r=0;)r[t]=t;return r}function m0(e,t){return e[t]}function y0(e){const t=[];return t.key=e,t}function g0(){var e=ue([]),t=Lo,r=yr,n=m0;function i(a){var o=Array.from(e.apply(this,arguments),y0),u,l=o.length,c=-1,s;for(const f of a)for(u=0,++c;u0){for(var r,n,i=0,a=e[0].length,o;i0){for(var r=0,n=e[t[0]],i,a=n.length;r0)||!((a=(i=e[t[0]]).length)>0))){for(var r=0,n=1,i,a,o;n"radius"in e&&"startAngle"in e&&"endAngle"in e,Cu=(e,t)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var r=e;if(h.isValidElement(e)&&(r=e.props),typeof r!="object"&&typeof r!="function")return null;var n={};return Object.keys(r).forEach(i=>{Ou(i)&&typeof r[i]=="function"&&(n[i]=(a=>r[i](r,a)))}),n},A0=(e,t,r)=>n=>(e(t,r,n),null),ku=(e,t,r)=>{if(e===null||typeof e!="object"&&typeof e!="function")return null;var n=null;return Object.keys(e).forEach(i=>{var a=e[i];Ou(i)&&typeof a=="function"&&(n||(n={}),n[i]=A0(a,t,r))}),n};function sc(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function O0(e){for(var t=1;t(o[u]===void 0&&n[u]!==void 0&&(o[u]=n[u]),o),r);return a}function I0(e,t){const r=new Map;for(let n=0;nObject.prototype.propertyIsEnumerable.call(e,t))}function En(e){return e==null?e===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}const Cv="[object RegExp]",Tu="[object String]",Mu="[object Number]",ju="[object Boolean]",kv="[object Arguments]",Tv="[object Symbol]",Mv="[object Date]",jv="[object Map]",Dv="[object Set]",$v="[object Array]",T0="[object Function]",Nv="[object ArrayBuffer]",Ai="[object Object]",M0="[object Error]",Rv="[object DataView]",Lv="[object Uint8Array]",Bv="[object Uint8ClampedArray]",zv="[object Uint16Array]",Fv="[object Uint32Array]",j0="[object BigUint64Array]",Wv="[object Int8Array]",Uv="[object Int16Array]",Kv="[object Int32Array]",D0="[object BigInt64Array]",Hv="[object Float32Array]",Yv="[object Float64Array]",fc=typeof globalThis=="object"&&globalThis||typeof window=="object"&&window||typeof self=="object"&&self||typeof global=="object"&&global||(function(){return this})();function Fo(e){return typeof fc.Buffer<"u"&&fc.Buffer.isBuffer(e)}function $0(e,t){return cr(e,void 0,e,new Map,t)}function cr(e,t,r,n=new Map,i=void 0){const a=i==null?void 0:i(e,t,r,n);if(a!==void 0)return a;if(Bo(e))return e;if(n.has(e))return n.get(e);if(Array.isArray(e)){const o=new Array(e.length);n.set(e,o);for(let u=0;u{}):Wo(e,t,function n(i,a,o,u,l,c){const s=r(i,a,o,u,l,c);return s!==void 0?!!s:Wo(i,a,n,c,!1)},new Map,!0)}function Wo(e,t,r,n,i=!1){if(t===e)return!0;switch(typeof t){case"object":return L0(e,t,r,n);case"function":return Object.keys(t).length>0?Wo(e,{...t},r,n,i):wn(e,t);default:return Vv(e)&&i?typeof t=="string"?t==="":!0:wn(e,t)}}function L0(e,t,r,n){if(t==null)return!0;if(Array.isArray(t))return Xv(e,t,r,n);if(t instanceof Map)return B0(e,t,r,n);if(t instanceof Set)return z0(e,t,r,n);const i=Object.keys(t);if(e==null||Bo(e))return i.length===0;if(i.length===0)return!0;if(n!=null&&n.has(t))return n.get(t)===e;n==null||n.set(t,e);try{for(let a=0;a{})}function F0(e){return e=R0(e),t=>Gv(t,e)}function W0(e,t){return $0(e,(r,n,i,a)=>{if(typeof e=="object"){if(En(e)==="[object Object]"&&typeof e.constructor!="function"){const o={};return a.set(e,o),it(o,e,i,a),o}switch(Object.prototype.toString.call(e)){case Mu:case Tu:case ju:{const o=new e.constructor(e==null?void 0:e.valueOf());return it(o,e),o}case kv:{const o={};return it(o,e),o.length=e.length,o[Symbol.iterator]=e[Symbol.iterator],o}default:return}}})}function U0(e){return W0(e)}const K0=/^(?:0|[1-9]\d*)$/;function Zv(e,t=Number.MAX_SAFE_INTEGER){switch(typeof e){case"number":return Number.isInteger(e)&&e>=0&&e=0}function Qv(e){return e!=null&&typeof e!="function"&&X0(e.length)}function G0(e){return typeof e=="object"&&e!==null}function Z0(e){return G0(e)&&Qv(e)}function dc(e,t=_v){return Z0(e)?I0(Array.from(e),_0(q0(t),1)):[]}function Q0(e,t,r){return t===!0?dc(e,r):typeof t=="function"?dc(e,t):e}var to={exports:{}},ro={};/** +var kg=Object.defineProperty;var Tg=(e,t,r)=>t in e?kg(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var ii=(e,t,r)=>Tg(e,typeof t!="symbol"?t+"":t,r);import{r as h,c as iv,a as av,g as Mg,R as jg}from"./react-dgEcD0HR.js";import{c as ne,r as Dg}from"./heroui-DZj66Arc.js";var $g=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"];function Ou(e){if(typeof e!="string")return!1;var t=$g;return t.includes(e)}var Ng=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],Rg=new Set(Ng);function ov(e){return typeof e!="string"?!1:Rg.has(e)}function uv(e){return typeof e=="string"&&e.startsWith("data-")}function wt(e){if(typeof e!="object"||e===null)return{};var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(ov(r)||uv(r))&&(t[r]=e[r]);return t}function Ln(e){if(e==null)return null;if(h.isValidElement(e)&&typeof e.props=="object"&&e.props!==null){var t=e.props;return wt(t)}return typeof e=="object"&&!Array.isArray(e)?wt(e):null}function Ge(e){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(ov(r)||uv(r)||Ou(r))&&(t[r]=e[r]);return t}function Lg(e){return e==null?null:h.isValidElement(e)?Ge(e.props):typeof e=="object"&&!Array.isArray(e)?Ge(e):null}var Bg=["children","width","height","viewBox","className","style","title","desc"];function jo(){return jo=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=e.children,n=e.width,i=e.height,a=e.viewBox,o=e.className,u=e.style,l=e.title,c=e.desc,s=zg(e,Bg),f=a||{width:n,height:i,x:0,y:0},d=ne("recharts-surface",o);return h.createElement("svg",jo({},Ge(s),{className:d,width:n,height:i,style:u,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height),ref:t}),h.createElement("title",null,l),h.createElement("desc",null,c),r)}),Wg=["children","className"];function Do(){return Do=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=e.children,n=e.className,i=Ug(e,Wg),a=ne("recharts-layer",n);return h.createElement("g",Do({className:a},Ge(i),{ref:t}),r)});function $o(e){return e==="__proto__"}function cv(e){switch(typeof e){case"number":case"symbol":return!1;case"string":return e.includes(".")||e.includes("[")||e.includes("]")}}function Pu(e){var t;return typeof e=="string"||typeof e=="symbol"?e:Object.is((t=e==null?void 0:e.valueOf)==null?void 0:t.call(e),-0)?"-0":String(e)}function sv(e){if(e==null)return"";if(typeof e=="string")return e;if(Array.isArray(e))return e.map(sv).join(",");const t=String(e);return t==="0"&&Object.is(Number(e),-0)?"-0":t}function Su(e){if(Array.isArray(e))return e.map(Pu);if(typeof e=="symbol")return[e];e=sv(e);const t=[],r=e.length;if(r===0)return t;let n=0,i="",a="",o=!1;for(e.charCodeAt(0)===46&&t.push("");n1&&arguments[1]!==void 0?arguments[1]:Yg,r=10**t,n=Math.round(e*r)/r;return Object.is(n,-0)?0:n}function Se(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n{var u=r[o-1];return typeof u=="string"?i+u+a:u!==void 0?i+It(u)+a:i+a},"")}var We=e=>e===0?0:e>0?1:-1,At=e=>typeof e=="number"&&e!=+e,mr=e=>typeof e=="string"&&e.length>1&&e.indexOf("%")===e.length-1,D=e=>(typeof e=="number"||e instanceof Number)&&!At(e),Ot=e=>D(e)||typeof e=="string",Vg=0,Sn=e=>{var t=++Vg;return"".concat(e||"").concat(t)},ut=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!D(t)&&typeof t!="string")return n;var a;if(mr(t)){if(r==null)return n;var o=t.indexOf("%");a=r*parseFloat(t.slice(0,o))/100}else a=+t;return At(a)&&(a=n),i&&r!=null&&a>r&&(a=r),a},fv=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,r={},n=0;nn&&(typeof t=="function"?t(n):Tt(n,t))===r)}var ae=e=>e===null||typeof e>"u",Eu=e=>ae(e)?e:"".concat(e.charAt(0).toUpperCase()).concat(e.slice(1));function mt(e){return e!=null}function Or(){}function Iu(e){if(e)return{x:e.x,y:e.y,upperWidth:"upperWidth"in e?e.upperWidth:e.width,lowerWidth:"lowerWidth"in e?e.lowerWidth:e.width,width:e.width,height:e.height}}function ac(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function dt(e){for(var t=1;t{var t=e.viewBox,r=e.position,n=e.offset,i=n===void 0?0:n,a=e.parentViewBox,o=Iu(t),u=o.x,l=o.y,c=o.height,s=o.upperWidth,f=o.lowerWidth,d=u,v=u+(s-f)/2,p=(d+v)/2,m=(s+f)/2,y=d+s/2,g=c>=0?1:-1,x=g*i,A=g>0?"end":"start",w=g>0?"start":"end",O=s>=0?1:-1,b=O*i,S=O>0?"end":"start",I=O>0?"start":"end",_=a;if(r==="top"){var T={x:d+s/2,y:l-x,horizontalAnchor:"middle",verticalAnchor:A};return _&&(T.height=Math.max(l-_.y,0),T.width=s),T}if(r==="bottom"){var k={x:v+f/2,y:l+c+x,horizontalAnchor:"middle",verticalAnchor:w};return _&&(k.height=Math.max(_.y+_.height-(l+c),0),k.width=f),k}if(r==="left"){var E={x:p-b,y:l+c/2,horizontalAnchor:S,verticalAnchor:"middle"};return _&&(E.width=Math.max(E.x-_.x,0),E.height=c),E}if(r==="right"){var R={x:p+m+b,y:l+c/2,horizontalAnchor:I,verticalAnchor:"middle"};return _&&(R.width=Math.max(_.x+_.width-R.x,0),R.height=c),R}var $=_?{width:m,height:c}:{};return r==="insideLeft"?dt({x:p+b,y:l+c/2,horizontalAnchor:I,verticalAnchor:"middle"},$):r==="insideRight"?dt({x:p+m-b,y:l+c/2,horizontalAnchor:S,verticalAnchor:"middle"},$):r==="insideTop"?dt({x:d+s/2,y:l+x,horizontalAnchor:"middle",verticalAnchor:w},$):r==="insideBottom"?dt({x:v+f/2,y:l+c-x,horizontalAnchor:"middle",verticalAnchor:A},$):r==="insideTopLeft"?dt({x:d+b,y:l+x,horizontalAnchor:I,verticalAnchor:w},$):r==="insideTopRight"?dt({x:d+s-b,y:l+x,horizontalAnchor:S,verticalAnchor:w},$):r==="insideBottomLeft"?dt({x:v+b,y:l+c-x,horizontalAnchor:I,verticalAnchor:A},$):r==="insideBottomRight"?dt({x:v+f-b,y:l+c-x,horizontalAnchor:S,verticalAnchor:A},$):r&&typeof r=="object"&&(D(r.x)||mr(r.x))&&(D(r.y)||mr(r.y))?dt({x:u+ut(r.x,m),y:l+ut(r.y,c),horizontalAnchor:"end",verticalAnchor:"end"},$):dt({x:y,y:l+c/2,horizontalAnchor:"middle",verticalAnchor:"middle"},$)},Qg=["top","left","right","bottom"];function Jg(e){return e==null?!1:typeof e=="object"?!0:Qg.includes(e)}var e0=h.createContext(null);function ue(e){return function(){return e}}const No=Math.PI,Ro=2*No,or=1e-6,t0=Ro-or;function vv(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return vv;const r=10**t;return function(n){this._+=n[0];for(let i=1,a=n.length;ior)if(!(Math.abs(f*l-c*s)>or)||!a)this._append`L${this._x1=t},${this._y1=r}`;else{let v=n-o,p=i-u,m=l*l+c*c,y=v*v+p*p,g=Math.sqrt(m),x=Math.sqrt(d),A=a*Math.tan((No-Math.acos((m+d-y)/(2*g*x)))/2),w=A/x,O=A/g;Math.abs(w-1)>or&&this._append`L${t+w*s},${r+w*f}`,this._append`A${a},${a},0,0,${+(f*v>s*p)},${this._x1=t+O*l},${this._y1=r+O*c}`}}arc(t,r,n,i,a,o){if(t=+t,r=+r,n=+n,o=!!o,n<0)throw new Error(`negative radius: ${n}`);let u=n*Math.cos(i),l=n*Math.sin(i),c=t+u,s=r+l,f=1^o,d=o?i-a:a-i;this._x1===null?this._append`M${c},${s}`:(Math.abs(this._x1-c)>or||Math.abs(this._y1-s)>or)&&this._append`L${c},${s}`,n&&(d<0&&(d=d%Ro+Ro),d>t0?this._append`A${n},${n},0,1,${f},${t-u},${r-l}A${n},${n},0,1,${f},${this._x1=c},${this._y1=s}`:d>or&&this._append`A${n},${n},0,${+(d>=No)},${f},${this._x1=t+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function hv(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new n0(t)}function _u(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function pv(e){this._context=e}pv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function ma(e){return new pv(e)}function mv(e){return e[0]}function yv(e){return e[1]}function gv(e,t){var r=ue(!0),n=null,i=ma,a=null,o=hv(u);e=typeof e=="function"?e:e===void 0?mv:ue(e),t=typeof t=="function"?t:t===void 0?yv:ue(t);function u(l){var c,s=(l=_u(l)).length,f,d=!1,v;for(n==null&&(a=i(v=o())),c=0;c<=s;++c)!(c=v;--p)u.point(A[p],w[p]);u.lineEnd(),u.areaEnd()}g&&(A[d]=+e(y,d,f),w[d]=+t(y,d,f),u.point(n?+n(y,d,f):A[d],r?+r(y,d,f):w[d]))}if(x)return u=null,x+""||null}function s(){return gv().defined(i).curve(o).context(a)}return c.x=function(f){return arguments.length?(e=typeof f=="function"?f:ue(+f),n=null,c):e},c.x0=function(f){return arguments.length?(e=typeof f=="function"?f:ue(+f),c):e},c.x1=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:ue(+f),c):n},c.y=function(f){return arguments.length?(t=typeof f=="function"?f:ue(+f),r=null,c):t},c.y0=function(f){return arguments.length?(t=typeof f=="function"?f:ue(+f),c):t},c.y1=function(f){return arguments.length?(r=f==null?null:typeof f=="function"?f:ue(+f),c):r},c.lineX0=c.lineY0=function(){return s().x(e).y(t)},c.lineY1=function(){return s().x(e).y(r)},c.lineX1=function(){return s().x(n).y(t)},c.defined=function(f){return arguments.length?(i=typeof f=="function"?f:ue(!!f),c):i},c.curve=function(f){return arguments.length?(o=f,a!=null&&(u=o(a)),c):o},c.context=function(f){return arguments.length?(f==null?a=u=null:u=o(a=f),c):a},c}class bv{constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}}function i0(e){return new bv(e,!0)}function a0(e){return new bv(e,!1)}function _i(){}function Ci(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function xv(e){this._context=e}xv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Ci(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Ci(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function o0(e){return new xv(e)}function wv(e){this._context=e}wv.prototype={areaStart:_i,areaEnd:_i,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Ci(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function u0(e){return new wv(e)}function Av(e){this._context=e}Av.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Ci(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function l0(e){return new Av(e)}function Ov(e){this._context=e}Ov.prototype={areaStart:_i,areaEnd:_i,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function c0(e){return new Ov(e)}function oc(e){return e<0?-1:1}function uc(e,t,r){var n=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(n||i<0&&-0),o=(r-e._y1)/(i||n<0&&-0),u=(a*i+o*n)/(n+i);return(oc(a)+oc(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function lc(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function eo(e,t,r){var n=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-n)/3;e._context.bezierCurveTo(n+u,i+u*t,a-u,o-u*r,a,o)}function ki(e){this._context=e}ki.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:eo(this,this._t0,lc(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,eo(this,lc(this,r=uc(this,e,t)),r);break;default:eo(this,this._t0,r=uc(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function Pv(e){this._context=new Sv(e)}(Pv.prototype=Object.create(ki.prototype)).point=function(e,t){ki.prototype.point.call(this,t,e)};function Sv(e){this._context=e}Sv.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,a){this._context.bezierCurveTo(t,e,n,r,a,i)}};function s0(e){return new ki(e)}function f0(e){return new Pv(e)}function Ev(e){this._context=e}Ev.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var n=cc(e),i=cc(t),a=0,o=1;o=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function v0(e){return new ya(e,.5)}function h0(e){return new ya(e,0)}function p0(e){return new ya(e,1)}function yr(e,t){if((o=e.length)>1)for(var r=1,n,i,a=e[t[0]],o,u=a.length;r=0;)r[t]=t;return r}function m0(e,t){return e[t]}function y0(e){const t=[];return t.key=e,t}function g0(){var e=ue([]),t=Lo,r=yr,n=m0;function i(a){var o=Array.from(e.apply(this,arguments),y0),u,l=o.length,c=-1,s;for(const f of a)for(u=0,++c;u0){for(var r,n,i=0,a=e[0].length,o;i0){for(var r=0,n=e[t[0]],i,a=n.length;r0)||!((a=(i=e[t[0]]).length)>0))){for(var r=0,n=1,i,a,o;n"radius"in e&&"startAngle"in e&&"endAngle"in e,Cu=(e,t)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var r=e;if(h.isValidElement(e)&&(r=e.props),typeof r!="object"&&typeof r!="function")return null;var n={};return Object.keys(r).forEach(i=>{Ou(i)&&typeof r[i]=="function"&&(n[i]=(a=>r[i](r,a)))}),n},A0=(e,t,r)=>n=>(e(t,r,n),null),ku=(e,t,r)=>{if(e===null||typeof e!="object"&&typeof e!="function")return null;var n=null;return Object.keys(e).forEach(i=>{var a=e[i];Ou(i)&&typeof a=="function"&&(n||(n={}),n[i]=A0(a,t,r))}),n};function sc(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function O0(e){for(var t=1;t(o[u]===void 0&&n[u]!==void 0&&(o[u]=n[u]),o),r);return a}function I0(e,t){const r=new Map;for(let n=0;nObject.prototype.propertyIsEnumerable.call(e,t))}function En(e){return e==null?e===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}const Cv="[object RegExp]",Tu="[object String]",Mu="[object Number]",ju="[object Boolean]",kv="[object Arguments]",Tv="[object Symbol]",Mv="[object Date]",jv="[object Map]",Dv="[object Set]",$v="[object Array]",T0="[object Function]",Nv="[object ArrayBuffer]",Ai="[object Object]",M0="[object Error]",Rv="[object DataView]",Lv="[object Uint8Array]",Bv="[object Uint8ClampedArray]",zv="[object Uint16Array]",Fv="[object Uint32Array]",j0="[object BigUint64Array]",Wv="[object Int8Array]",Uv="[object Int16Array]",Kv="[object Int32Array]",D0="[object BigInt64Array]",Hv="[object Float32Array]",Yv="[object Float64Array]",fc=typeof globalThis=="object"&&globalThis||typeof window=="object"&&window||typeof self=="object"&&self||typeof global=="object"&&global||(function(){return this})();function Fo(e){return typeof fc.Buffer<"u"&&fc.Buffer.isBuffer(e)}function $0(e,t){return cr(e,void 0,e,new Map,t)}function cr(e,t,r,n=new Map,i=void 0){const a=i==null?void 0:i(e,t,r,n);if(a!==void 0)return a;if(Bo(e))return e;if(n.has(e))return n.get(e);if(Array.isArray(e)){const o=new Array(e.length);n.set(e,o);for(let u=0;u{}):Wo(e,t,function n(i,a,o,u,l,c){const s=r(i,a,o,u,l,c);return s!==void 0?!!s:Wo(i,a,n,c,!1)},new Map,!0)}function Wo(e,t,r,n,i=!1){if(t===e)return!0;switch(typeof t){case"object":return L0(e,t,r,n);case"function":return Object.keys(t).length>0?Wo(e,{...t},r,n,i):wn(e,t);default:return Vv(e)&&i?typeof t=="string"?t==="":!0:wn(e,t)}}function L0(e,t,r,n){if(t==null)return!0;if(Array.isArray(t))return Xv(e,t,r,n);if(t instanceof Map)return B0(e,t,r,n);if(t instanceof Set)return z0(e,t,r,n);const i=Object.keys(t);if(e==null||Bo(e))return i.length===0;if(i.length===0)return!0;if(n!=null&&n.has(t))return n.get(t)===e;n==null||n.set(t,e);try{for(let a=0;a{})}function F0(e){return e=R0(e),t=>Gv(t,e)}function W0(e,t){return $0(e,(r,n,i,a)=>{if(typeof e=="object"){if(En(e)==="[object Object]"&&typeof e.constructor!="function"){const o={};return a.set(e,o),it(o,e,i,a),o}switch(Object.prototype.toString.call(e)){case Mu:case Tu:case ju:{const o=new e.constructor(e==null?void 0:e.valueOf());return it(o,e),o}case kv:{const o={};return it(o,e),o.length=e.length,o[Symbol.iterator]=e[Symbol.iterator],o}default:return}}})}function U0(e){return W0(e)}const K0=/^(?:0|[1-9]\d*)$/;function Zv(e,t=Number.MAX_SAFE_INTEGER){switch(typeof e){case"number":return Number.isInteger(e)&&e>=0&&e=0}function Qv(e){return e!=null&&typeof e!="function"&&X0(e.length)}function G0(e){return typeof e=="object"&&e!==null}function Z0(e){return G0(e)&&Qv(e)}function dc(e,t=_v){return Z0(e)?I0(Array.from(e),_0(q0(t),1)):[]}function Q0(e,t,r){return t===!0?dc(e,r):typeof t=="function"?dc(e,t):e}var to={exports:{}},ro={};/** * @license React * use-sync-external-store-shim/with-selector.production.js * diff --git a/src/gateway/static/dashboard/assets/tableSelection-CLDlIlLU.js b/src/gateway/static/dashboard/assets/tableSelection-CLDlIlLU.js new file mode 100644 index 00000000..0407d058 --- /dev/null +++ b/src/gateway/static/dashboard/assets/tableSelection-CLDlIlLU.js @@ -0,0 +1 @@ +import{j as a}from"./tanstack-query-1t81HyiD.js";import{B as u}from"./heroui-DZj66Arc.js";import{r as l}from"./react-dgEcD0HR.js";function x({selectedCount:t,allMatching:e,matchingTotal:s,canSelectAllMatching:r,onSelectAllMatching:n,onClear:o,children:i}){const c=e?`All ${(s??t).toLocaleString()} matching rows selected`:`${t.toLocaleString()} selected`;return a.jsxs("div",{className:"flex flex-wrap items-center gap-3 rounded-xl border border-[var(--otari-brand)] bg-[var(--otari-brand-tint)] px-4 py-2.5",children:[a.jsx("span",{className:"text-sm font-medium text-[var(--otari-brand-dark)]",children:c}),!e&&r&&s!=null?a.jsxs(u,{size:"sm",variant:"ghost",onPress:n,children:["Select all ",s.toLocaleString()," matching this filter"]}):null,a.jsxs("div",{className:"ml-auto flex flex-wrap items-center gap-2",children:[i,a.jsx(u,{size:"sm",variant:"ghost",onPress:o,children:"Clear"})]})]})}function p(){const[t,e]=l.useState(()=>new Set),[s,r]=l.useState(!1),n=l.useCallback(c=>{e(c),r(!1)},[]),o=l.useCallback(()=>{e(new Set),r(!1)},[]),i=l.useCallback(()=>r(!0),[]);return{selectedKeys:t,onSelectionChange:n,allMatching:s,enableAllMatching:i,clear:o}}function h(t,e){return t==="all"?e:e.filter(s=>t.has(s))}export{x as B,h as r,p as u}; diff --git a/src/gateway/static/dashboard/index.html b/src/gateway/static/dashboard/index.html index d505ef45..79274226 100644 --- a/src/gateway/static/dashboard/index.html +++ b/src/gateway/static/dashboard/index.html @@ -6,11 +6,11 @@ Otari Dashboard - + - - + +
diff --git a/tests/integration/test_model_discovery.py b/tests/integration/test_model_discovery.py index bb661c75..b2a9ce35 100644 --- a/tests/integration/test_model_discovery.py +++ b/tests/integration/test_model_discovery.py @@ -138,17 +138,17 @@ def test_list_models_with_discovery( assert "openai:gpt-4o-mini" in ids -def test_list_models_includes_env_only_provider( +def test_list_models_excludes_env_only_provider( postgres_url: str, discovery_master_header: dict[str, str], monkeypatch: pytest.MonkeyPatch, ) -> None: - """A provider callable via its env var alone appears in GET /v1/models (issue #221). + """A provider with only a credential env var (not configured) is NOT listed. - Setting only ANTHROPIC_API_KEY makes ``anthropic:`` callable for - completions (get_provider_kwargs returns {} and any-llm reads the env var), - so discovery must list it too even though ``anthropic`` is not in - ``config.providers``. + Discovery is scoped to the configured provider instances: a provider only + sources models once an operator configures it (config.yml or the Providers + page). An empty ``providers`` block therefore lists nothing even when a + provider's credential env var (here ANTHROPIC_API_KEY) is present. """ from any_llm.types.model import Model @@ -186,7 +186,7 @@ async def fake_alist(provider: Any, **kwargs: Any) -> list[Model]: assert resp.status_code == 200 ids = [m["id"] for m in resp.json()["data"]] - assert "anthropic:claude-3-5-sonnet" in ids + assert "anthropic:claude-3-5-sonnet" not in ids def test_list_models_discovery_disabled( diff --git a/tests/integration/test_usage_admin.py b/tests/integration/test_usage_admin.py new file mode 100644 index 00000000..79087360 --- /dev/null +++ b/tests/integration/test_usage_admin.py @@ -0,0 +1,395 @@ +"""Integration tests for the operator usage mutations: bulk delete and set-price. + +Both endpoints must touch only imported rows (``counts_toward_budget = False``); +enforced gateway rows and ``users.spend`` are never affected. +""" + +from __future__ import annotations + +from datetime import UTC, datetime + +import pytest +from fastapi.testclient import TestClient +from sqlalchemy.orm import Session + +from gateway.models.entities import UsageLog, User + +DELETE_PATH = "/v1/usage" +SET_PRICE_PATH = "/v1/usage/set-price" +COUNT_PATH = "/v1/usage/count" + +_TS = datetime(2026, 7, 1, 12, 0, tzinfo=UTC) + + +def _ensure_user(db: Session, user_id: str) -> None: + if db.query(User).filter(User.user_id == user_id).first() is None: + db.add(User(user_id=user_id, alias=user_id, spend=0.0, blocked=False)) + db.flush() + + +def _make_log( + db: Session, + *, + log_id: str, + counts_toward_budget: bool, + user_id: str = "u", + source: str = "claude_code", + model: str = "openai/gpt-4", + prompt_tokens: int | None = 1000, + completion_tokens: int | None = 500, + cache_read_tokens: int | None = None, + cache_write_tokens: int | None = None, + cost: float | None = None, + status: str = "success", + timestamp: datetime = _TS, +) -> UsageLog: + _ensure_user(db, user_id) + log = UsageLog( + id=log_id, + user_id=user_id, + timestamp=timestamp, + model=model, + provider="openai", + endpoint="external" if not counts_toward_budget else "/v1/chat/completions", + source=source, + # Imported rows carry a unique source_event_id (idempotency); gateway rows leave it NULL. + source_event_id=log_id if not counts_toward_budget else None, + counts_toward_budget=counts_toward_budget, + prompt_tokens=prompt_tokens, + completion_tokens=completion_tokens, + total_tokens=(prompt_tokens or 0) + (completion_tokens or 0), + cache_read_tokens=cache_read_tokens, + cache_write_tokens=cache_write_tokens, + cost=cost, + status=status, + ) + db.add(log) + return log + + +def _get(db: Session, log_id: str) -> UsageLog | None: + return db.query(UsageLog).filter(UsageLog.id == log_id).first() + + +# --------------------------------------------------------------------------- delete + + +def test_delete_by_ids_removes_only_imported( + client: TestClient, master_key_header: dict[str, str], db_session: Session +) -> None: + _make_log(db_session, log_id="imp-1", counts_toward_budget=False) + _make_log(db_session, log_id="imp-2", counts_toward_budget=False) + _make_log(db_session, log_id="gw-1", counts_toward_budget=True) + db_session.commit() + + # The request names an imported row *and* an enforced gateway row; only the + # imported one may be removed. + resp = client.request( + "DELETE", DELETE_PATH, json={"ids": ["imp-1", "gw-1"]}, headers=master_key_header + ) + assert resp.status_code == 200 + assert resp.json() == {"deleted": 1} + + db_session.expire_all() + assert _get(db_session, "imp-1") is None + assert _get(db_session, "imp-2") is not None + assert _get(db_session, "gw-1") is not None + + +def test_delete_by_filter_source( + client: TestClient, master_key_header: dict[str, str], db_session: Session +) -> None: + _make_log(db_session, log_id="cc-1", counts_toward_budget=False, source="claude_code") + _make_log(db_session, log_id="cc-2", counts_toward_budget=False, source="claude_code") + _make_log(db_session, log_id="other-1", counts_toward_budget=False, source="codex") + db_session.commit() + + resp = client.request( + "DELETE", DELETE_PATH, json={"by_filter": True, "source": "claude_code"}, headers=master_key_header + ) + assert resp.status_code == 200 + assert resp.json() == {"deleted": 2} + + db_session.expire_all() + assert _get(db_session, "cc-1") is None + assert _get(db_session, "cc-2") is None + assert _get(db_session, "other-1") is not None + + +def test_delete_by_filter_unpriced_only( + client: TestClient, master_key_header: dict[str, str], db_session: Session +) -> None: + _make_log(db_session, log_id="unpriced", counts_toward_budget=False, cost=None) + _make_log(db_session, log_id="priced", counts_toward_budget=False, cost=0.02) + db_session.commit() + + resp = client.request( + "DELETE", DELETE_PATH, json={"by_filter": True, "priced": False}, headers=master_key_header + ) + assert resp.status_code == 200 + assert resp.json() == {"deleted": 1} + + db_session.expire_all() + assert _get(db_session, "unpriced") is None + assert _get(db_session, "priced") is not None + + +def test_delete_by_filter_never_touches_gateway_rows( + client: TestClient, master_key_header: dict[str, str], db_session: Session +) -> None: + # An unfiltered by_filter delete targets every imported row, but must still + # leave enforced gateway rows in place. + _make_log(db_session, log_id="imp-1", counts_toward_budget=False) + _make_log(db_session, log_id="gw-1", counts_toward_budget=True) + db_session.commit() + + resp = client.request("DELETE", DELETE_PATH, json={"by_filter": True}, headers=master_key_header) + assert resp.status_code == 200 + assert resp.json() == {"deleted": 1} + + db_session.expire_all() + assert _get(db_session, "imp-1") is None + assert _get(db_session, "gw-1") is not None + + +def test_delete_by_filter_api_key( + client: TestClient, master_key_header: dict[str, str], db_session: Session +) -> None: + _make_log(db_session, log_id="k1-a", counts_toward_budget=False) + _make_log(db_session, log_id="k1-b", counts_toward_budget=False) + db_session.query(UsageLog).filter(UsageLog.id.in_(["k1-a", "k1-b"])).update( + {UsageLog.api_key_id: None}, synchronize_session=False + ) + db_session.commit() + + # No key set on these rows; filtering to a specific key matches nothing. + resp = client.request( + "DELETE", DELETE_PATH, json={"by_filter": True, "api_key_id": "does-not-exist"}, headers=master_key_header + ) + assert resp.status_code == 200 + assert resp.json() == {"deleted": 0} + + +def test_ops_skip_budget_exempt_gateway_rows( + client: TestClient, master_key_header: dict[str, str], db_session: Session +) -> None: + # A gateway row from a budget-exempt key is counts_toward_budget=False but is NOT + # imported (source="gateway"); delete and set-price must never touch it. + _make_log(db_session, log_id="imp", counts_toward_budget=False, source="claude_code", cost=None) + _make_log(db_session, log_id="gw-exempt", counts_toward_budget=False, source="gateway", cost=0.5) + db_session.commit() + + # Delete-all-imported by filter removes only the imported row. + resp = client.request("DELETE", DELETE_PATH, json={"by_filter": True}, headers=master_key_header) + assert resp.json() == {"deleted": 1} + db_session.expire_all() + assert _get(db_session, "imp") is None + assert _get(db_session, "gw-exempt") is not None + + # Set-price by filter must not reprice the surviving gateway-exempt row. + resp = client.post( + SET_PRICE_PATH, + json={"by_filter": True, "input_price_per_million": 3.0, "output_price_per_million": 15.0}, + headers=master_key_header, + ) + assert resp.json() == {"matched": 0, "updated": 0, "unchanged": 0} + db_session.expire_all() + assert _get(db_session, "gw-exempt").cost == 0.5 # type: ignore[union-attr] + + +def test_delete_requires_master_key(client: TestClient) -> None: + resp = client.request("DELETE", DELETE_PATH, json={"ids": ["x"]}) + assert resp.status_code == 401 + + +def test_delete_empty_selection_is_rejected( + client: TestClient, master_key_header: dict[str, str] +) -> None: + # Neither ids nor by_filter: a 422, so an empty body can never match every row. + resp = client.request("DELETE", DELETE_PATH, json={}, headers=master_key_header) + assert resp.status_code == 422 + + +def test_delete_both_modes_is_rejected( + client: TestClient, master_key_header: dict[str, str] +) -> None: + resp = client.request( + "DELETE", DELETE_PATH, json={"ids": ["x"], "by_filter": True}, headers=master_key_header + ) + assert resp.status_code == 422 + + +# ------------------------------------------------------------------------- set-price + + +def test_set_price_by_ids_recomputes_cost( + client: TestClient, master_key_header: dict[str, str], db_session: Session +) -> None: + _make_log( + db_session, + log_id="imp-1", + counts_toward_budget=False, + prompt_tokens=1000, + completion_tokens=500, + cost=None, + ) + db_session.commit() + + resp = client.post( + SET_PRICE_PATH, + json={ + "ids": ["imp-1"], + "input_price_per_million": 3.0, + "output_price_per_million": 15.0, + }, + headers=master_key_header, + ) + assert resp.status_code == 200 + assert resp.json() == {"matched": 1, "updated": 1, "unchanged": 0} + + db_session.expire_all() + row = _get(db_session, "imp-1") + assert row is not None + # 1000 input @ $3/1M + 500 output @ $15/1M = 0.003 + 0.0075 + assert row.cost == pytest.approx(0.0105) + assert row.billing_meters is not None + assert row.billing_meters["fresh_input_tokens"] == 1000 + assert row.billing_meters["completion_tokens"] == 500 + assert row.pricing_breakdown is not None + meters = {line["meter"]: line for line in row.pricing_breakdown} + assert meters["input"]["units"] == 1000 + assert meters["output"]["units"] == 500 + + +def test_set_price_with_cache_rates( + client: TestClient, master_key_header: dict[str, str], db_session: Session +) -> None: + _make_log( + db_session, + log_id="imp-cache", + counts_toward_budget=False, + prompt_tokens=1000, + completion_tokens=200, + cache_read_tokens=500, + cost=None, + ) + db_session.commit() + + resp = client.post( + SET_PRICE_PATH, + json={ + "ids": ["imp-cache"], + "input_price_per_million": 3.0, + "output_price_per_million": 15.0, + "cache_read_price_per_million": 0.3, + }, + headers=master_key_header, + ) + assert resp.status_code == 200 + db_session.expire_all() + row = _get(db_session, "imp-cache") + assert row is not None + # Additive shape: total input = 1000 + 500 cache read. Fresh input = 1000. + # 1000 * 3/1M + 200 * 15/1M + 500 * 0.3/1M = 0.003 + 0.003 + 0.00015 + assert row.cost == pytest.approx(0.00615) + + +def test_set_price_only_touches_imported( + client: TestClient, master_key_header: dict[str, str], db_session: Session +) -> None: + _make_log(db_session, log_id="gw-1", counts_toward_budget=True, cost=0.99) + db_session.commit() + + resp = client.post( + SET_PRICE_PATH, + json={ + "ids": ["gw-1"], + "input_price_per_million": 3.0, + "output_price_per_million": 15.0, + }, + headers=master_key_header, + ) + assert resp.status_code == 200 + assert resp.json() == {"matched": 0, "updated": 0, "unchanged": 0} + + db_session.expire_all() + row = _get(db_session, "gw-1") + assert row is not None + assert row.cost == 0.99 # untouched + + +def test_set_price_reports_unchanged_on_second_run( + client: TestClient, master_key_header: dict[str, str], db_session: Session +) -> None: + _make_log(db_session, log_id="imp-1", counts_toward_budget=False, cost=None) + db_session.commit() + body = { + "ids": ["imp-1"], + "input_price_per_million": 3.0, + "output_price_per_million": 15.0, + } + first = client.post(SET_PRICE_PATH, json=body, headers=master_key_header) + assert first.json()["updated"] == 1 + + second = client.post(SET_PRICE_PATH, json=body, headers=master_key_header) + assert second.json() == {"matched": 1, "updated": 0, "unchanged": 1} + + +def test_set_price_by_filter_model( + client: TestClient, master_key_header: dict[str, str], db_session: Session +) -> None: + _make_log(db_session, log_id="a", counts_toward_budget=False, model="openai/gpt-4", cost=None) + _make_log(db_session, log_id="b", counts_toward_budget=False, model="anthropic/claude", cost=None) + db_session.commit() + + resp = client.post( + SET_PRICE_PATH, + json={ + "by_filter": True, + "model": "openai/gpt-4", + "input_price_per_million": 1.0, + "output_price_per_million": 1.0, + }, + headers=master_key_header, + ) + assert resp.status_code == 200 + assert resp.json()["matched"] == 1 + + db_session.expire_all() + assert _get(db_session, "a").cost is not None # type: ignore[union-attr] + assert _get(db_session, "b").cost is None # type: ignore[union-attr] + + +def test_set_price_requires_master_key(client: TestClient) -> None: + resp = client.post( + SET_PRICE_PATH, + json={"ids": ["x"], "input_price_per_million": 1.0, "output_price_per_million": 1.0}, + ) + assert resp.status_code == 401 + + +def test_set_price_rejects_negative_rate( + client: TestClient, master_key_header: dict[str, str] +) -> None: + resp = client.post( + SET_PRICE_PATH, + json={"ids": ["x"], "input_price_per_million": -1.0, "output_price_per_million": 1.0}, + headers=master_key_header, + ) + assert resp.status_code == 422 + + +# --------------------------------------------------------- count for select-all affordance + + +def test_count_scopes_to_imported_rows( + client: TestClient, master_key_header: dict[str, str], db_session: Session +) -> None: + _make_log(db_session, log_id="imp-1", counts_toward_budget=False) + _make_log(db_session, log_id="imp-2", counts_toward_budget=False) + _make_log(db_session, log_id="gw-1", counts_toward_budget=True) + db_session.commit() + + resp = client.get(COUNT_PATH, params={"counts_toward_budget": "false"}, headers=master_key_header) + assert resp.status_code == 200 + assert resp.json()["total"] == 2 diff --git a/tests/unit/test_gateway_model_discovery.py b/tests/unit/test_gateway_model_discovery.py index 6543a05a..d8380f20 100644 --- a/tests/unit/test_gateway_model_discovery.py +++ b/tests/unit/test_gateway_model_discovery.py @@ -21,23 +21,6 @@ ) -@pytest.fixture(autouse=True) -def _no_env_providers() -> Any: - """Pin these tests to configured-provider discovery only. - - Discovery now also picks up any-llm providers made callable by an env var - alone. The runner's ambient environment (e.g. a real ``OPENAI_API_KEY``) - would otherwise leak extra instances into these configured-provider - assertions. Env-based detection is covered in - ``test_model_discovery_env_providers``. - """ - with patch( - "gateway.services.model_discovery_service._env_provider_instances", - return_value=[], - ): - yield - - def _make_model(model_id: str, owned_by: str = "openai", created: int = 1700000000) -> Model: """Create a minimal Model instance for testing.""" return Model(id=model_id, object="model", created=created, owned_by=owned_by) diff --git a/tests/unit/test_model_discovery_env_providers.py b/tests/unit/test_model_discovery_env_providers.py deleted file mode 100644 index 44bbbbb0..00000000 --- a/tests/unit/test_model_discovery_env_providers.py +++ /dev/null @@ -1,182 +0,0 @@ -"""Unit tests for env-var-based provider discovery. - -Regression coverage for the discovery vs. completion-routing disagreement -(issue #221): a provider is callable for completions the moment its native -credential env var is set (``get_provider_kwargs`` returns ``{}`` and any-llm -reads the env var), but GET /v1/models used to only see ``config.providers``. -Discovery now also picks up providers made callable by an env var alone. -""" - -from typing import Any -from unittest.mock import AsyncMock, patch - -import pytest -from any_llm.types.model import Model - -from gateway.core.config import GatewayConfig -from gateway.services.model_discovery_service import ( - ModelCache, - _discoverable_instances, - _env_provider_instances, - discover_all_models, - discover_models_with_status, -) - - -def _make_model(model_id: str, owned_by: str, created: int = 1700000000) -> Model: - return Model(id=model_id, object="model", created=created, owned_by=owned_by) - - -class TestEnvProviderInstances: - def test_detects_provider_with_credential_env_var(self, monkeypatch: pytest.MonkeyPatch) -> None: - monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-ant-test") - assert "anthropic" in _env_provider_instances(configured_impls=set()) - - def test_absent_env_var_is_not_detected(self, monkeypatch: pytest.MonkeyPatch) -> None: - monkeypatch.delenv("ANTHROPIC_API_KEY", raising=False) - assert "anthropic" not in _env_provider_instances(configured_impls=set()) - - def test_blank_env_var_is_treated_as_unset(self, monkeypatch: pytest.MonkeyPatch) -> None: - # A blank credential (common from container templating) would only fail to - # authenticate, so it must not add the provider. - monkeypatch.setenv("ANTHROPIC_API_KEY", "") - assert "anthropic" not in _env_provider_instances(configured_impls=set()) - - def test_whitespace_only_env_var_is_treated_as_unset(self, monkeypatch: pytest.MonkeyPatch) -> None: - # A whitespace-only value is as unusable as a blank one and must not add - # the provider. - monkeypatch.setenv("ANTHROPIC_API_KEY", " ") - assert "anthropic" not in _env_provider_instances(configured_impls=set()) - - def test_already_configured_implementation_is_not_duplicated(self, monkeypatch: pytest.MonkeyPatch) -> None: - monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-ant-test") - assert "anthropic" not in _env_provider_instances(configured_impls={"anthropic"}) - - def test_accepts_any_of_slash_separated_alternatives(self, monkeypatch: pytest.MonkeyPatch) -> None: - # gemini's ENV_API_KEY_NAME is "GEMINI_API_KEY/GOOGLE_API_KEY"; either works. - monkeypatch.delenv("GEMINI_API_KEY", raising=False) - monkeypatch.setenv("GOOGLE_API_KEY", "goog-test") - assert "gemini" in _env_provider_instances(configured_impls=set()) - - def test_registry_failure_falls_back_to_no_env_providers(self, monkeypatch: pytest.MonkeyPatch) -> None: - # A metadata-registry hiccup must not raise (it would 500 GET /v1/models); - # env detection degrades to configured-only discovery. - monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-ant-test") - with patch( - "gateway.services.model_discovery_service.AnyLLM.get_all_provider_metadata", - side_effect=RuntimeError("registry down"), - ): - assert _env_provider_instances(configured_impls=set()) == [] - - -class TestDiscoverableInstances: - def test_configured_come_first_then_env_detected(self, monkeypatch: pytest.MonkeyPatch) -> None: - monkeypatch.delenv("OPENAI_API_KEY", raising=False) - monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-ant-test") - config = GatewayConfig(providers={"home_lab": {"provider_type": "openai", "api_key": "x"}}) - - instances = _discoverable_instances(config) - - assert instances[0] == "home_lab" - assert "anthropic" in instances - - def test_custom_instance_of_same_impl_suppresses_env_duplicate( - self, monkeypatch: pytest.MonkeyPatch - ) -> None: - # A custom-named anthropic instance plus ANTHROPIC_API_KEY must not also - # yield a bare "anthropic": that would dial the same credential twice and - # list the same models under two keys. - monkeypatch.delenv("OPENAI_API_KEY", raising=False) - monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-ant-test") - config = GatewayConfig(providers={"my-anthropic": {"provider_type": "anthropic", "api_key": "x"}}) - - instances = _discoverable_instances(config) - - assert instances == ["my-anthropic"] - assert "anthropic" not in instances - - def test_env_detection_can_be_stubbed_out(self, monkeypatch: pytest.MonkeyPatch) -> None: - monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-ant-test") - config = GatewayConfig(providers={"openai": {"api_key": "x"}}) - with patch( - "gateway.services.model_discovery_service._env_provider_instances", - return_value=[], - ): - assert _discoverable_instances(config) == ["openai"] - - -class TestEnvProviderDiscovery: - """The bug: an env-only provider is callable but missing from the catalog.""" - - def _config(self, providers: dict[str, Any] | None = None) -> GatewayConfig: - return GatewayConfig( - providers=providers or {}, - model_discovery=True, - model_cache_ttl_seconds=300, - ) - - @pytest.mark.asyncio - async def test_env_only_provider_appears_in_discovery(self, monkeypatch: pytest.MonkeyPatch) -> None: - # Only ANTHROPIC_API_KEY is set; anthropic is NOT in config.providers. - monkeypatch.delenv("OPENAI_API_KEY", raising=False) - monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-ant-test") - config = self._config(providers={}) - - async def fake_alist(provider: Any, **kwargs: Any) -> list[Model]: - if provider.value == "anthropic": - return [_make_model("claude-3-5-sonnet", owned_by="anthropic")] - return [] - - with ( - patch("gateway.services.model_discovery_service.get_model_cache", return_value=ModelCache()), - patch("gateway.services.model_discovery_service._supports_list_models", return_value=True), - patch("gateway.services.model_discovery_service.alist_models", side_effect=fake_alist), - patch("gateway.services.model_discovery_service.get_provider_kwargs", return_value={}), - ): - result = await discover_all_models(config) - - assert ("anthropic", result[0][1]) == result[0] - assert result[0][1].id == "claude-3-5-sonnet" - - @pytest.mark.asyncio - async def test_env_only_provider_honored_by_filter(self, monkeypatch: pytest.MonkeyPatch) -> None: - monkeypatch.delenv("OPENAI_API_KEY", raising=False) - monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-ant-test") - config = self._config(providers={}) - - with ( - patch("gateway.services.model_discovery_service.get_model_cache", return_value=ModelCache()), - patch("gateway.services.model_discovery_service._supports_list_models", return_value=True), - patch( - "gateway.services.model_discovery_service.alist_models", - new_callable=AsyncMock, - return_value=[_make_model("claude-3-5-sonnet", owned_by="anthropic")], - ), - patch("gateway.services.model_discovery_service.get_provider_kwargs", return_value={}), - ): - result = await discover_all_models(config, provider_filter="anthropic") - - assert [name for name, _ in result] == ["anthropic"] - - @pytest.mark.asyncio - async def test_env_only_provider_appears_in_operator_status(self, monkeypatch: pytest.MonkeyPatch) -> None: - monkeypatch.delenv("OPENAI_API_KEY", raising=False) - monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-ant-test") - config = self._config(providers={}) - - with ( - patch("gateway.services.model_discovery_service.get_model_cache", return_value=ModelCache()), - patch("gateway.services.model_discovery_service._supports_list_models", return_value=True), - patch( - "gateway.services.model_discovery_service.alist_models", - new_callable=AsyncMock, - return_value=[_make_model("claude-3-5-sonnet", owned_by="anthropic")], - ), - patch("gateway.services.model_discovery_service.get_provider_kwargs", return_value={}), - ): - statuses = await discover_models_with_status(config) - - by_provider = {d.provider: d for d in statuses} - assert "anthropic" in by_provider - assert by_provider["anthropic"].error is None - assert [m.id for m in by_provider["anthropic"].models] == ["claude-3-5-sonnet"] diff --git a/web/e2e/dashboard.spec.ts b/web/e2e/dashboard.spec.ts index faee4ff8..c938ecaa 100644 --- a/web/e2e/dashboard.spec.ts +++ b/web/e2e/dashboard.spec.ts @@ -62,7 +62,8 @@ test.describe("dashboard core flows", () => { await page.getByLabel("Spending limit (USD)").fill("100"); await page.getByRole("button", { name: "Create budget" }).click(); - await expect(page.getByRole("cell", { name: "$100.00" })).toBeVisible(); + // The shared table renders on react-aria, so non-row-header cells are gridcells. + await expect(page.getByRole("gridcell", { name: "$100.00" })).toBeVisible(); await expect(page.getByText("e2e-budget")).toBeVisible(); await expect(page.getByText("No budgets yet")).toBeHidden(); }); @@ -117,6 +118,7 @@ test.describe("dashboard core flows", () => { await page.keyboard.press("Escape"); await page.getByRole("button", { name: "Create alias" }).click(); - await expect(page.getByRole("cell", { name: "fast" })).toBeVisible(); + // The alias name is the table's row-header cell (react-aria rowheader). + await expect(page.getByRole("rowheader", { name: "fast" })).toBeVisible(); }); }); diff --git a/web/package-lock.json b/web/package-lock.json index 81cb774a..dc3cbf57 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -13,6 +13,7 @@ "@tanstack/react-query": "^5.62.7", "clsx": "2.1.1", "react": "^19.0.0", + "react-aria-components": "^1.18.0", "react-dom": "^19.0.0", "react-router-dom": "^7.18.1", "recharts": "^3.10.0" diff --git a/web/package.json b/web/package.json index d2522b8f..6cb0909f 100644 --- a/web/package.json +++ b/web/package.json @@ -20,6 +20,7 @@ "@tanstack/react-query": "^5.62.7", "clsx": "2.1.1", "react": "^19.0.0", + "react-aria-components": "^1.18.0", "react-dom": "^19.0.0", "react-router-dom": "^7.18.1", "recharts": "^3.10.0" diff --git a/web/src/api/hooks.ts b/web/src/api/hooks.ts index 21bb3f27..35b73041 100644 --- a/web/src/api/hooks.ts +++ b/web/src/api/hooks.ts @@ -37,8 +37,12 @@ import type { UpdateUserRequest, UsageBucket, UsageCount, + UsageDeleteResult, UsageEntry, UsageFilters, + UsageMutationSelection, + UsageSetPriceRequest, + UsageSetPriceResult, UsageSummary, User, CreateUserRequest, @@ -641,6 +645,11 @@ function usageParams(filters: UsageFilters): URLSearchParams { if (filters.endpoint) params.set("endpoint", filters.endpoint); if (filters.user_id) params.set("user_id", filters.user_id); if (filters.api_key_id) params.set("api_key_id", filters.api_key_id); + if (filters.source) params.set("source", filters.source); + if (filters.priced !== undefined) params.set("priced", String(filters.priced)); + if (filters.counts_toward_budget !== undefined) { + params.set("counts_toward_budget", String(filters.counts_toward_budget)); + } return params; } @@ -664,15 +673,42 @@ export function useUsageLogs(filters: UsageFilters, page: number, pageSize: numb // Total rows matching the same filters, for the paginator's "N of M". A separate // request so /v1/usage stays a bare array; run alongside the list. -export function useUsageCount(filters: UsageFilters) { +export function useUsageCount(filters: UsageFilters, enabled = true) { return useQuery({ queryKey: [USAGE, "count", filters], queryFn: () => apiFetch(`/v1/usage/count?${usageParams(filters).toString()}`), + enabled, placeholderData: keepPreviousData, staleTime: 10_000, }); } +// Delete imported usage rows by selection (ids or by_filter). Only rows the +// server treats as imported (counts_toward_budget = false) are removed; every +// usage view is invalidated so the list, count, and analytics refresh. +export function useDeleteUsage() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (body: UsageMutationSelection) => + apiFetch("/v1/usage", { method: "DELETE", body: JSON.stringify(body) }), + onSuccess: () => { + void queryClient.invalidateQueries({ queryKey: [USAGE] }); + }, + }); +} + +// Set the cost of imported usage rows from manual per-1M rates. +export function useSetUsagePrice() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (body: UsageSetPriceRequest) => + apiFetch("/v1/usage/set-price", { method: "POST", body: JSON.stringify(body) }), + onSuccess: () => { + void queryClient.invalidateQueries({ queryKey: [USAGE] }); + }, + }); +} + // ---------- usage analytics summary ---------- // Aggregated spend/tokens/requests for the Usage page. Shares the activity diff --git a/web/src/api/types.ts b/web/src/api/types.ts index de1d808b..3b1f54f5 100644 --- a/web/src/api/types.ts +++ b/web/src/api/types.ts @@ -418,6 +418,11 @@ export interface UsageFilters { endpoint?: string; user_id?: string; api_key_id?: string; + source?: string; + // Pricing state: true = only priced rows, false = only unpriced (cost null). + priced?: boolean; + // Budget participation: false scopes to imported rows (the bulk-op target set). + counts_toward_budget?: boolean; } // Total matching rows for a set of filters (from /v1/usage/count). Kept separate @@ -426,6 +431,39 @@ export interface UsageCount { total: number; } +// Selection for a bulk usage mutation: either an explicit `ids` list (the current +// page selection) or `by_filter: true` plus filter fields (everything matching). +// Only imported rows (counts_toward_budget = false) are ever affected server-side. +export interface UsageMutationSelection { + ids?: string[]; + by_filter?: boolean; + source?: string; + model?: string; + user_id?: string; + api_key_id?: string; + status?: string; + start_date?: string; + end_date?: string; + priced?: boolean; +} + +export interface UsageDeleteResult { + deleted: number; +} + +export interface UsageSetPriceRequest extends UsageMutationSelection { + input_price_per_million: number; + output_price_per_million: number; + cache_read_price_per_million?: number; + cache_write_price_per_million?: number; +} + +export interface UsageSetPriceResult { + matched: number; + updated: number; + unchanged: number; +} + // Time-series granularity for the analytics summary. export type UsageBucket = "hour" | "day"; diff --git a/web/src/components/BulkActionBar.test.tsx b/web/src/components/BulkActionBar.test.tsx new file mode 100644 index 00000000..83f68bcd --- /dev/null +++ b/web/src/components/BulkActionBar.test.tsx @@ -0,0 +1,62 @@ +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { Button } from "@heroui/react"; +import { describe, expect, it, vi } from "vitest"; + +import { BulkActionBar } from "./BulkActionBar"; + +describe("BulkActionBar", () => { + it("shows the page selection count and actions", () => { + render( + + + , + ); + expect(screen.getByText("3 selected")).toBeInTheDocument(); + expect(screen.getByRole("button", { name: "Delete" })).toBeInTheDocument(); + }); + + it("offers select-all-matching when the page is full and more match", async () => { + const user = userEvent.setup(); + const onSelectAllMatching = vi.fn(); + render( + + + , + ); + await user.click(screen.getByRole("button", { name: /Select all 4,231 matching/ })); + expect(onSelectAllMatching).toHaveBeenCalled(); + }); + + it("reads the whole-filter selection when all matching", () => { + render( + + + , + ); + expect(screen.getByText("All 4,231 matching rows selected")).toBeInTheDocument(); + // The affordance is gone once all-matching is active. + expect(screen.queryByRole("button", { name: /Select all/ })).not.toBeInTheDocument(); + }); +}); diff --git a/web/src/components/BulkActionBar.tsx b/web/src/components/BulkActionBar.tsx new file mode 100644 index 00000000..f9310854 --- /dev/null +++ b/web/src/components/BulkActionBar.tsx @@ -0,0 +1,53 @@ +import { Button } from "@heroui/react"; +import type { ReactNode } from "react"; + +// Contextual bar shown when a table has a selection. Reads "{n} selected" with a +// Clear, the action buttons the page supplies, and, when the whole visible page +// is selected and more rows match the filter, a "Select all N matching this +// filter" affordance so a bulk op can target the full filtered set. + +export interface BulkActionBarProps { + /** Rows selected on the current page (expanded "all" sentinel). */ + selectedCount: number; + /** True once the operator opted into "all matching this filter". */ + allMatching: boolean; + /** Total rows matching the filter, for the select-all affordance and label. */ + matchingTotal: number | null; + /** Show the "select all N matching" prompt (page fully selected and more exist). */ + canSelectAllMatching: boolean; + onSelectAllMatching: () => void; + onClear: () => void; + /** Action buttons (Delete, Set price, …). */ + children: ReactNode; +} + +export function BulkActionBar({ + selectedCount, + allMatching, + matchingTotal, + canSelectAllMatching, + onSelectAllMatching, + onClear, + children, +}: BulkActionBarProps) { + const label = allMatching + ? `All ${(matchingTotal ?? selectedCount).toLocaleString()} matching rows selected` + : `${selectedCount.toLocaleString()} selected`; + + return ( +
+ {label} + {!allMatching && canSelectAllMatching && matchingTotal != null ? ( + + ) : null} +
+ {children} + +
+
+ ); +} diff --git a/web/src/components/ConfirmDialog.test.tsx b/web/src/components/ConfirmDialog.test.tsx new file mode 100644 index 00000000..60eddb0e --- /dev/null +++ b/web/src/components/ConfirmDialog.test.tsx @@ -0,0 +1,57 @@ +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { describe, expect, it, vi } from "vitest"; + +import { ConfirmDialog } from "./ConfirmDialog"; + +const base = { + heading: "Delete rows", + body: "This cannot be undone.", + confirmLabel: "Delete", + isPending: false, + onConfirm: vi.fn(), + onOpenChange: vi.fn(), +}; + +describe("ConfirmDialog", () => { + it("renders nothing while closed", () => { + render(); + expect(screen.queryByRole("alertdialog")).not.toBeInTheDocument(); + }); + + it("shows the heading, body, and confirm label when open", () => { + render(); + const dialog = screen.getByRole("alertdialog"); + expect(dialog).toHaveTextContent("Delete rows"); + expect(dialog).toHaveTextContent("This cannot be undone."); + expect(screen.getByRole("button", { name: "Delete" })).toBeInTheDocument(); + }); + + it("fires onConfirm when the confirm button is pressed", async () => { + const onConfirm = vi.fn(); + const user = userEvent.setup(); + render(); + await user.click(screen.getByRole("button", { name: "Delete" })); + expect(onConfirm).toHaveBeenCalledTimes(1); + }); + + it("cancels via onOpenChange(false) and does not confirm", async () => { + const onConfirm = vi.fn(); + const onOpenChange = vi.fn(); + const user = userEvent.setup(); + render(); + await user.click(screen.getByRole("button", { name: "Cancel" })); + expect(onOpenChange).toHaveBeenCalledWith(false); + expect(onConfirm).not.toHaveBeenCalled(); + }); + + it("renders a mutation error", () => { + render(); + expect(screen.getByRole("alertdialog")).toHaveTextContent("boom"); + }); + + it("disables Cancel while pending so the op can't be abandoned mid-flight", () => { + render(); + expect(screen.getByRole("button", { name: "Cancel" })).toBeDisabled(); + }); +}); diff --git a/web/src/components/ConfirmDialog.tsx b/web/src/components/ConfirmDialog.tsx new file mode 100644 index 00000000..27ffb53f --- /dev/null +++ b/web/src/components/ConfirmDialog.tsx @@ -0,0 +1,59 @@ +import { AlertDialog, Button } from "@heroui/react"; +import type { ReactNode } from "react"; + +import { ErrorBanner } from "@/components/ui"; + +// A controlled confirm dialog for destructive bulk actions (delete a set of +// rows, etc.). Controlled via `isOpen` so a page can open it from a bulk-action +// button rather than a Trigger element. +export interface ConfirmDialogProps { + isOpen: boolean; + onOpenChange: (open: boolean) => void; + heading: string; + body: ReactNode; + confirmLabel: string; + confirmVariant?: "danger" | "primary"; + isPending: boolean; + error?: unknown; + onConfirm: () => void; +} + +export function ConfirmDialog({ + isOpen, + onOpenChange, + heading, + body, + confirmLabel, + confirmVariant = "danger", + isPending, + error, + onConfirm, +}: ConfirmDialogProps) { + return ( + + {isOpen ? ( + + + + + {heading} + + +
{body}
+ +
+ + + + +
+
+
+ ) : null} +
+ ); +} diff --git a/web/src/components/DataTable.test.tsx b/web/src/components/DataTable.test.tsx new file mode 100644 index 00000000..3c16af9d --- /dev/null +++ b/web/src/components/DataTable.test.tsx @@ -0,0 +1,118 @@ +import { render, screen, within } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { useState } from "react"; +import type { Selection, SortDescriptor } from "react-aria-components"; +import { describe, expect, it, vi } from "vitest"; + +import { DataTable, type DataTableColumn } from "./DataTable"; + +interface Row { + id: string; + name: string; + cost: number; +} + +const ROWS: Row[] = [ + { id: "a", name: "Alpha", cost: 3 }, + { id: "b", name: "Bravo", cost: 1 }, + { id: "c", name: "Charlie", cost: 2 }, +]; + +const COLUMNS: DataTableColumn[] = [ + { id: "name", header: "Name", cell: (r) => r.name, isRowHeader: true }, + { id: "cost", header: "Cost", cell: (r) => r.cost, align: "end", allowsSorting: true }, +]; + +function base(props: T) { + return { ariaLabel: "Test table", columns: COLUMNS, rows: ROWS, getRowKey: (r: Row) => r.id, ...props }; +} + +describe("DataTable", () => { + it("renders headers and cell content", () => { + render(); + expect(screen.getByRole("columnheader", { name: "Name" })).toBeInTheDocument(); + expect(screen.getByRole("row", { name: /Alpha/ })).toBeInTheDocument(); + expect(screen.getByText("Charlie")).toBeInTheDocument(); + }); + + it("shows a loading state with no rows", () => { + render(); + expect(screen.getByText("Loading…")).toBeInTheDocument(); + }); + + it("shows the empty state when there are no rows and not loading", () => { + render(); + expect(screen.getByText("Nothing here")).toBeInTheDocument(); + }); + + it("fires onRowAction with the row key when a row is activated", async () => { + const user = userEvent.setup(); + const onRowAction = vi.fn(); + render(); + await user.click(screen.getByRole("row", { name: /Bravo/ })); + expect(onRowAction).toHaveBeenCalledWith("b"); + }); + + it("selects rows via checkboxes and reports the selected keys", async () => { + const user = userEvent.setup(); + + function Harness() { + const [selected, setSelected] = useState(new Set()); + return ( + <> + {selected === "all" ? "all" : selected.size} + + + ); + } + + render(); + const alphaRow = screen.getByRole("row", { name: /Alpha/ }); + await user.click(within(alphaRow).getByRole("checkbox")); + expect(screen.getByTestId("count")).toHaveTextContent("1"); + }); + + it("does not select a disabled row", async () => { + const user = userEvent.setup(); + + function Harness() { + const [selected, setSelected] = useState(new Set()); + return ( + <> + {selected === "all" ? "all" : selected.size} + + + ); + } + + render(); + const bravoRow = screen.getByRole("row", { name: /Bravo/ }); + await user.click(within(bravoRow).getByRole("checkbox")); + expect(screen.getByTestId("count")).toHaveTextContent("0"); + }); + + it("reports sort changes from a sortable column header", async () => { + const user = userEvent.setup(); + + function Harness() { + const [sort, setSort] = useState(undefined); + return ( + <> + {sort ? `${String(sort.column)}:${sort.direction}` : "none"} + + + ); + } + + render(); + await user.click(screen.getByRole("columnheader", { name: "Cost" })); + expect(screen.getByTestId("sort")).toHaveTextContent("cost:ascending"); + }); +}); diff --git a/web/src/components/DataTable.tsx b/web/src/components/DataTable.tsx new file mode 100644 index 00000000..30b48f61 --- /dev/null +++ b/web/src/components/DataTable.tsx @@ -0,0 +1,196 @@ +import { Spinner, Table } from "@heroui/react"; +import type { ReactNode } from "react"; +import { Checkbox as AriaCheckbox } from "react-aria-components"; +import type { Key, Selection, SortDescriptor } from "react-aria-components"; + +// react-aria's own Checkbox drives table row/all selection through +// `slot="selection"`. HeroUI's Checkbox splits the control across subcomponents +// and does not cleanly forward the selection slot, so the selection box is a +// small styled react-aria Checkbox that matches the --otari tokens. +function SelectionCheckbox({ ariaLabel }: { ariaLabel: string }) { + return ( + + {({ isSelected, isIndeterminate }) => ( + + {isIndeterminate ? ( + + + + ) : isSelected ? ( + + + + ) : null} + + )} + + ); +} + +// Shared data table for the dashboard, built on HeroUI v3's compound Table +// (a thin wrapper over react-aria-components). Selection, keyboard grid +// navigation, sort, and column resizing all come from the library, so pages +// declare columns + rows and opt into the behaviors they need rather than +// hand-rolling a
. Replaces the previous bespoke table and its custom +// column-resize code. + +export interface DataTableColumn { + /** Stable column id; also the `SortDescriptor.column` value when sortable. */ + id: string; + header: ReactNode; + cell: (row: Row) => ReactNode; + /** Right-align numeric columns (header and cells). */ + align?: "start" | "end"; + /** Marks the column react-aria announces as the row's header (usually the name). */ + isRowHeader?: boolean; + allowsSorting?: boolean; + /** Fixed/initial pixel width; only meaningful when the table is `resizable`. */ + width?: number; + minWidth?: number; +} + +export interface DataTableProps { + /** Accessible name for the grid (required by react-aria). */ + ariaLabel: string; + columns: DataTableColumn[]; + rows: Row[]; + getRowKey: (row: Row) => string; + /** Shows a spinner in place of the body while the first page loads. */ + isLoading?: boolean; + emptyContent?: ReactNode; + selectionMode?: "none" | "multiple"; + selectedKeys?: Selection; + onSelectionChange?: (keys: Selection) => void; + /** + * Rows that cannot be selected (e.g. enforced usage rows that bulk delete must + * never touch). `disabledBehavior` is fixed to "selection", so a disabled row + * still opens its detail on click; only its checkbox is inert. + */ + disabledKeys?: Iterable; + sortDescriptor?: SortDescriptor; + onSortChange?: (descriptor: SortDescriptor) => void; + /** Fired when a row body is activated (click / Enter), for detail drill-in. */ + onRowAction?: (key: string) => void; + rowClassName?: (row: Row) => string | undefined; + /** Enables draggable column resize handles. */ + resizable?: boolean; +} + +const SELECTION_COLUMN_WIDTH = 44; + +// HeroUI's Table.Root is itself a card. Rather than wrap it in a second card +// (which left two mismatched radii and an inset gap), the `.otari-table` class +// owns the whole container's styling in globals.css: our surface + border + +// single 12px radius, the brand-tint header, and no column separators. The root's +// `overflow: hidden` (also in globals.css) clips the header and last row to that +// one radius, so the header meets the card corner exactly. + +export function DataTable({ + ariaLabel, + columns, + rows, + getRowKey, + isLoading = false, + emptyContent = "No rows.", + selectionMode = "none", + selectedKeys, + onSelectionChange, + disabledKeys, + sortDescriptor, + onSortChange, + onRowAction, + rowClassName, + resizable = false, +}: DataTableProps) { + const showSelection = selectionMode === "multiple"; + const Container = resizable ? Table.ResizableContainer : Table.ScrollContainer; + + return ( + + + onRowAction(String(key)) : undefined} + > + + {showSelection ? ( + + + + ) : null} + {columns.map((col) => ( + + {({ sortDirection }) => ( +
+ {col.allowsSorting ? ( + + {col.header} + + ) : ( + {col.header} + )} + {resizable ? : null} +
+ )} +
+ ))} +
+ ( +
+ {isLoading ? ( + + Loading… + + ) : ( + emptyContent + )} +
+ )} + > + {(isLoading && rows.length === 0 ? [] : rows).map((row) => { + const key = getRowKey(row); + return ( + + {showSelection ? ( + + + + ) : null} + {columns.map((col) => ( + + {col.cell(row)} + + ))} + + ); + })} +
+
+
+
+ ); +} diff --git a/web/src/components/SetPriceDialog.tsx b/web/src/components/SetPriceDialog.tsx new file mode 100644 index 00000000..3f8c9456 --- /dev/null +++ b/web/src/components/SetPriceDialog.tsx @@ -0,0 +1,154 @@ +import { AlertDialog, Button, Input, Label, TextField } from "@heroui/react"; +import { useEffect, useState } from "react"; + +import { ErrorBanner, InfoBanner } from "@/components/ui"; + +// Per-1M rates entered by an operator to reprice imported usage rows. Input and +// output are required; the cache rates are optional (blank folds those tokens +// into the fresh-input charge, matching how unset cache pricing behaves). +export interface ManualRates { + input_price_per_million: number; + output_price_per_million: number; + cache_read_price_per_million?: number; + cache_write_price_per_million?: number; +} + +interface RateFieldProps { + label: string; + value: string; + onChange: (value: string) => void; + isRequired?: boolean; + autoFocus?: boolean; +} + +function RateField({ label, value, onChange, isRequired, autoFocus }: RateFieldProps) { + return ( + + + + + ); +} + +function parseRate(value: string): number | null { + const trimmed = value.trim(); + if (trimmed === "") return null; + const parsed = Number(trimmed); + return Number.isFinite(parsed) && parsed >= 0 ? parsed : Number.NaN; +} + +export interface SetPriceDialogProps { + isOpen: boolean; + onOpenChange: (open: boolean) => void; + /** How many rows the price will be applied to, for the dialog copy. */ + targetCount: number; + isPending: boolean; + error: unknown; + onSubmit: (rates: ManualRates) => void; + /** Dialog heading; defaults to "Set price". */ + title?: string; + /** Body copy explaining what the rates apply to; a sensible usage default is used when omitted. */ + description?: (count: number) => string; +} + +const defaultDescription = (count: number): string => + `Recompute cost for ${count.toLocaleString()} imported ${ + count === 1 ? "row" : "rows" + } from each row's own token counts at these per-1M rates. Enforced gateway rows are never affected.`; + +export function SetPriceDialog({ + isOpen, + onOpenChange, + targetCount, + isPending, + error, + onSubmit, + title = "Set price", + description = defaultDescription, +}: SetPriceDialogProps) { + const [input, setInput] = useState(""); + const [output, setOutput] = useState(""); + const [cacheRead, setCacheRead] = useState(""); + const [cacheWrite, setCacheWrite] = useState(""); + + // The dialog stays mounted across close/reopen, so clear the rate fields each time + // it opens: reopening for a different selection must not inherit the last rates + // (a real footgun when the values set money). + useEffect(() => { + if (isOpen) { + setInput(""); + setOutput(""); + setCacheRead(""); + setCacheWrite(""); + } + }, [isOpen]); + + const inputRate = parseRate(input); + const outputRate = parseRate(output); + const cacheReadRate = parseRate(cacheRead); + const cacheWriteRate = parseRate(cacheWrite); + + const invalid = + inputRate === null || + Number.isNaN(inputRate) || + outputRate === null || + Number.isNaN(outputRate) || + Number.isNaN(cacheReadRate ?? 0) || + Number.isNaN(cacheWriteRate ?? 0); + + const submit = () => { + if (invalid || inputRate === null || outputRate === null) return; + onSubmit({ + input_price_per_million: inputRate, + output_price_per_million: outputRate, + ...(cacheReadRate !== null && !Number.isNaN(cacheReadRate) + ? { cache_read_price_per_million: cacheReadRate } + : {}), + ...(cacheWriteRate !== null && !Number.isNaN(cacheWriteRate) + ? { cache_write_price_per_million: cacheWriteRate } + : {}), + }); + }; + + return ( + + {isOpen ? ( + + + + + {title} + + +

{description(targetCount)}

+
+ + + + +
+ + Leave a cache rate blank to bill those tokens at the input rate. + + +
+ + + + +
+
+
+ ) : null} +
+ ); +} diff --git a/web/src/components/Table.test.tsx b/web/src/components/Table.test.tsx deleted file mode 100644 index 7443385e..00000000 --- a/web/src/components/Table.test.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { fireEvent, render, screen } from "@testing-library/react"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; - -import { Table, Td, Th, THead, Tr } from "@/components/Table"; - -// A two-column table with a body row, the minimal shape every page renders. -function renderTable() { - return render( -
- - - - - - - - - - - - -
AlphaBeta
12
, - ); -} - -// jsdom doesn't implement pointer capture, so stub it; the handlers gate their -// work on hasPointerCapture, which we make report the drag as captured. -function stubPointerCapture(el: HTMLElement) { - el.setPointerCapture = vi.fn(); - el.releasePointerCapture = vi.fn(); - el.hasPointerCapture = vi.fn(() => true); -} - -// jsdom's synthetic PointerEvent drops clientX, so dispatch a MouseEvent (which -// carries clientX) under the pointer event name, with pointerId attached for the -// capture checks. React fires its onPointer* handlers for the matching type. -function firePointer(el: HTMLElement, type: string, props: { clientX?: number; pointerId?: number }) { - const event = new MouseEvent(type, { bubbles: true, cancelable: true, clientX: props.clientX ?? 0 }); - Object.defineProperty(event, "pointerId", { value: props.pointerId ?? 1 }); - fireEvent(el, event); -} - -describe("Table resizable columns", () => { - beforeEach(() => { - // jsdom has no layout, so header cells report zero width. Pin a width so a - // resize snapshots a deterministic starting point. - vi.spyOn(HTMLElement.prototype, "getBoundingClientRect").mockReturnValue({ - width: 120, - height: 0, - top: 0, - left: 0, - right: 120, - bottom: 0, - x: 0, - y: 0, - toJSON: () => ({}), - }); - }); - afterEach(() => vi.restoreAllMocks()); - - it("renders a resize handle per column and stays auto-sized until used", () => { - const { container } = renderTable(); - - expect(screen.getAllByTitle("Drag to resize")).toHaveLength(2); - // Untouched: no fixed layout, no explicit column widths. - expect(container.querySelector("colgroup")).toBeNull(); - expect(container.querySelector("table")).toHaveClass("w-full"); - }); - - it("widens a column on drag and pins the others", () => { - const { container } = renderTable(); - const [firstHandle] = screen.getAllByTitle("Drag to resize"); - stubPointerCapture(firstHandle); - - firePointer(firstHandle, "pointerdown", { pointerId: 1, clientX: 100 }); - firePointer(firstHandle, "pointermove", { pointerId: 1, clientX: 140 }); - firePointer(firstHandle, "pointerup", { pointerId: 1 }); - - const table = container.querySelector("table"); - expect(table).toHaveClass("table-fixed"); - const cols = container.querySelectorAll("col"); - // First column grew by the drag delta (120 + 40); the second stayed pinned. - expect(cols[0]).toHaveStyle({ width: "160px" }); - expect(cols[1]).toHaveStyle({ width: "120px" }); - }); - - it("stops resizing when the pointer is canceled", () => { - const { container } = renderTable(); - const [firstHandle] = screen.getAllByTitle("Drag to resize"); - stubPointerCapture(firstHandle); - - firePointer(firstHandle, "pointerdown", { pointerId: 1, clientX: 100 }); - firePointer(firstHandle, "pointermove", { pointerId: 1, clientX: 140 }); - firePointer(firstHandle, "pointercancel", { pointerId: 1 }); - // A move after cancel must be ignored: the drag state was cleared. - firePointer(firstHandle, "pointermove", { pointerId: 1, clientX: 400 }); - - expect(container.querySelectorAll("col")[0]).toHaveStyle({ width: "160px" }); - }); -}); diff --git a/web/src/components/Table.tsx b/web/src/components/Table.tsx deleted file mode 100644 index 4f2bdd81..00000000 --- a/web/src/components/Table.tsx +++ /dev/null @@ -1,237 +0,0 @@ -import { Spinner } from "@heroui/react"; -import { - createContext, - type PointerEvent as ReactPointerEvent, - type ReactNode, - useCallback, - useContext, - useRef, - useState, -} from "react"; - -// Lightweight semantic table primitives. HeroUI v3 ships a full react-aria -// Table, but the dashboard's tables are read-mostly and don't need selection or -// keyboard grid navigation, so a styled keeps the markup simple. - -// Columns are resizable by dragging the handle on a header's right edge. Widths -// stay in memory (per mounted table) rather than persisted: the goal is to let an -// operator widen a cramped column while they work, not to remember a layout. -const MIN_COLUMN_WIDTH = 60; - -interface ColumnResize { - // Per-column pixel widths once the table has switched to a fixed layout, or - // null while it is still auto-sized (its original, content-driven behavior). - widths: number[] | null; - // Pin every header cell to its current rendered width, so switching to a fixed - // layout does not reflow the columns before one is dragged. A no-op once pinned. - pinWidths: (headerRow: HTMLTableRowElement) => void; - setColumnWidth: (index: number, width: number) => void; -} - -const ColumnResizeContext = createContext(null); - -export function Table({ children }: { children: ReactNode }) { - const [widths, setWidths] = useState(null); - - const pinWidths = useCallback((headerRow: HTMLTableRowElement) => { - setWidths((current) => { - if (current) { - return current; - } - return Array.from(headerRow.cells, (cell) => Math.max(MIN_COLUMN_WIDTH, Math.round(cell.getBoundingClientRect().width))); - }); - }, []); - - const setColumnWidth = useCallback((index: number, width: number) => { - setWidths((current) => { - if (!current) { - return current; - } - const next = current.slice(); - next[index] = Math.max(MIN_COLUMN_WIDTH, Math.round(width)); - return next; - }); - }, []); - - const resize: ColumnResize = { widths, pinWidths, setColumnWidth }; - // Once fixed, the table sizes to the exact sum of its columns so shrinking one - // never redistributes slack into the others; the wrapper scrolls if that - // overflows. Before the first resize it is width-full and auto-sized, so an - // untouched table renders exactly as before. - const totalWidth = widths ? widths.reduce((sum, width) => sum + width, 0) : null; - - return ( - -
-
- {widths ? ( - - {widths.map((width, index) => ( - // Columns are positional and never reorder, so the index is a stable key. - - ))} - - ) : null} - {children} -
- - - ); -} - -export function THead({ children }: { children: ReactNode }) { - return ( - - {children} - - ); -} - -// The drag handle on a header cell's right edge. Resolves its column from the DOM -// (the parent cell's position in its row) so it needs no per-column wiring. -// Pointer-only and aria-hidden on purpose: column resizing is a visual -// convenience, and a focusable "separator" per column would add a tab stop to -// every header while exposing an incomplete widget to assistive tech (a column -// width has no bounded range to announce via aria-valuemin/now/max). -function ColumnResizeHandle({ resize }: { resize: ColumnResize }) { - const ref = useRef(null); - const drag = useRef<{ index: number; startX: number; startWidth: number } | null>(null); - - const startResize = (event: ReactPointerEvent) => { - const cell = ref.current?.closest("th"); - const row = cell?.parentElement; - if (!cell || !(row instanceof HTMLTableRowElement)) { - return; - } - // Keep the drag off the header's sort button and the row's click handler. - event.preventDefault(); - event.stopPropagation(); - resize.pinWidths(row); - ref.current?.setPointerCapture(event.pointerId); - drag.current = { index: cell.cellIndex, startX: event.clientX, startWidth: cell.getBoundingClientRect().width }; - }; - - const moveResize = (event: ReactPointerEvent) => { - const state = drag.current; - if (!state || !ref.current?.hasPointerCapture(event.pointerId)) { - return; - } - resize.setColumnWidth(state.index, state.startWidth + (event.clientX - state.startX)); - }; - - // Runs on pointer up and on pointer cancel: a browser gesture or OS - // interruption can end the drag without a pointerup, so the drag state must be - // cleared either way rather than lingering and resizing on the next move. - const endResize = (event: ReactPointerEvent) => { - if (ref.current?.hasPointerCapture(event.pointerId)) { - ref.current.releasePointerCapture(event.pointerId); - } - drag.current = null; - }; - - return ( - - {/* Always-visible divider so the grab point is discoverable; it brightens - to the brand color and thickens on hover. */} - - - ); -} - -export function Th({ - children, - className = "", - ariaSort, -}: { - children: ReactNode; - className?: string; - // Announces sort state to assistive tech on a sortable column header. - ariaSort?: "ascending" | "descending" | "none"; -}) { - const resize = useContext(ColumnResizeContext); - return ( - - {children} - {resize ? : null} - - ); -} - -export function Td({ children, className = "" }: { children: ReactNode; className?: string }) { - return {children}; -} - -export function Tr({ - children, - className = "", - onClick, - selected, -}: { - children: ReactNode; - className?: string; - // When set, the row is clickable (used for row-selection tables). - onClick?: () => void; - selected?: boolean; -}) { - return ( - { - if (event.key === "Enter" || event.key === " ") { - event.preventDefault(); - onClick(); - } - } - : undefined - } - tabIndex={onClick ? 0 : undefined} - aria-selected={selected} - className={`border-b border-[var(--otari-line)] last:border-b-0 ${ - onClick - ? "cursor-pointer focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-[var(--otari-brand)]" - : "" - } ${selected ? "bg-[var(--otari-brand-tint)]" : "hover:bg-[var(--otari-bg)]"} ${className}`} - > - {children} - - ); -} - -export function TableMessage({ colSpan, children }: { colSpan: number; children: ReactNode }) { - return ( - - - {children} - - - ); -} - -export function LoadingRow({ colSpan }: { colSpan: number }) { - return ( - - - Loading… - - - ); -} diff --git a/web/src/components/TablePagination.test.tsx b/web/src/components/TablePagination.test.tsx new file mode 100644 index 00000000..4e0bce2f --- /dev/null +++ b/web/src/components/TablePagination.test.tsx @@ -0,0 +1,75 @@ +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { describe, expect, it, vi } from "vitest"; + +import { TablePagination } from "./TablePagination"; + +function setup(overrides: Partial[0]> = {}) { + const onPageChange = vi.fn(); + const onPageSizeChange = vi.fn(); + render( + , + ); + return { onPageChange, onPageSizeChange }; +} + +describe("TablePagination", () => { + it("shows a truthful range-of-total summary", () => { + setup(); + expect(screen.getByText("1–100 of 4,231")).toBeInTheDocument(); + expect(screen.getByText("/ 43")).toBeInTheDocument(); + }); + + it("disables first/prev on the first page", () => { + setup(); + expect(screen.getByRole("button", { name: "First page" })).toBeDisabled(); + expect(screen.getByRole("button", { name: "Previous page" })).toBeDisabled(); + expect(screen.getByRole("button", { name: "Next page" })).toBeEnabled(); + expect(screen.getByRole("button", { name: "Last page" })).toBeEnabled(); + }); + + it("jumps to the last page", async () => { + const user = userEvent.setup(); + const { onPageChange } = setup(); + await user.click(screen.getByRole("button", { name: "Last page" })); + expect(onPageChange).toHaveBeenCalledWith(42); // ceil(4231/100) - 1 + }); + + it("commits a typed page, clamped to the page count", async () => { + const user = userEvent.setup(); + const { onPageChange } = setup(); + const box = screen.getByRole("textbox", { name: "Page number" }); + await user.clear(box); + await user.type(box, "999{enter}"); + expect(onPageChange).toHaveBeenCalledWith(42); // clamped to last page + }); + + it("changes rows per page", async () => { + const user = userEvent.setup(); + const { onPageSizeChange } = setup(); + await user.selectOptions(screen.getByRole("combobox", { name: "Rows per page" }), "250"); + expect(onPageSizeChange).toHaveBeenCalledWith(250); + }); + + it("with an unknown total, hides last and uses the next fallback", () => { + setup({ total: null, hasNextFallback: true, rowsOnPage: 100 }); + expect(screen.getByText("1–100")).toBeInTheDocument(); + expect(screen.queryByText(/\/ /)).not.toBeInTheDocument(); + expect(screen.getByRole("button", { name: "Last page" })).toBeDisabled(); + expect(screen.getByRole("button", { name: "Next page" })).toBeEnabled(); + }); + + it("with an unknown total and a short page, disables next", () => { + setup({ total: null, hasNextFallback: false, rowsOnPage: 40, page: 2 }); + expect(screen.getByRole("button", { name: "Next page" })).toBeDisabled(); + expect(screen.getByRole("button", { name: "Previous page" })).toBeEnabled(); + }); +}); diff --git a/web/src/components/TablePagination.tsx b/web/src/components/TablePagination.tsx new file mode 100644 index 00000000..30dc76f6 --- /dev/null +++ b/web/src/components/TablePagination.tsx @@ -0,0 +1,151 @@ +import { Button, Spinner } from "@heroui/react"; +import { useEffect, useId, useState } from "react"; + +import { FilterSelect } from "@/components/ui"; + +// Shared pager for the dashboard tables: rows-per-page on the left, a truthful +// "range of total" summary in the middle, and first / prev / type-a-page / next +// / last controls on the right. Pages are 0-based in props; the type-a-page box +// shows 1-based numbers to the operator. + +export const PAGE_SIZE_OPTIONS = [25, 50, 100, 250, 500]; + +export interface TablePaginationProps { + /** 0-based current page. */ + page: number; + pageSize: number; + /** + * Exact total row count, or null when it is not known (e.g. the count request + * failed). When null the "last" jump is disabled and next falls back to + * `hasNextFallback`. + */ + total: number | null; + /** Rows currently on screen, so the range end stays truthful without an exact total. */ + rowsOnPage: number; + onPageChange: (page: number) => void; + onPageSizeChange: (size: number) => void; + pageSizeOptions?: number[]; + isFetching?: boolean; + /** With an unknown total, whether a next page is assumed to exist (usually rowsOnPage === pageSize). */ + hasNextFallback?: boolean; +} + +export function TablePagination({ + page, + pageSize, + total, + rowsOnPage, + onPageChange, + onPageSizeChange, + pageSizeOptions = PAGE_SIZE_OPTIONS, + isFetching = false, + hasNextFallback = false, +}: TablePaginationProps) { + const sizeSelectId = useId(); + const pageCount = total != null ? Math.max(1, Math.ceil(total / pageSize)) : null; + const isFirst = page === 0; + const isLast = pageCount != null ? page >= pageCount - 1 : !hasNextFallback; + + const rangeStart = rowsOnPage > 0 ? page * pageSize + 1 : 0; + const rangeEnd = page * pageSize + rowsOnPage; + const summary = + total != null + ? total === 0 + ? "0 of 0" + : `${rangeStart.toLocaleString()}–${rangeEnd.toLocaleString()} of ${total.toLocaleString()}` + : rowsOnPage > 0 + ? `${rangeStart.toLocaleString()}–${rangeEnd.toLocaleString()}` + : "0"; + + // Local, editable page box synced to `page`; commits on Enter or blur so + // intermediate keystrokes do not refetch on every digit. + const [pageText, setPageText] = useState(String(page + 1)); + useEffect(() => { + setPageText(String(page + 1)); + }, [page]); + + const commitPage = () => { + const parsed = Number.parseInt(pageText, 10); + if (Number.isNaN(parsed)) { + setPageText(String(page + 1)); + return; + } + const upper = pageCount ?? Number.MAX_SAFE_INTEGER; + const clamped = Math.min(Math.max(parsed, 1), upper); + if (clamped - 1 !== page) { + onPageChange(clamped - 1); + } else { + setPageText(String(page + 1)); + } + }; + + return ( +
+
+ + onPageSizeChange(Number.parseInt(value, 10))} + options={pageSizeOptions.map((size) => ({ value: String(size), label: String(size) }))} + /> + {isFetching ? : null} +
+ +
+ {summary} +
+ + + + setPageText(event.target.value.replace(/[^0-9]/g, ""))} + onKeyDown={(event) => { + if (event.key === "Enter") { + event.currentTarget.blur(); + } + }} + onBlur={commitPage} + className="w-12 rounded-lg border border-[var(--otari-line)] bg-[var(--otari-bg)] px-2 py-1 text-center text-sm text-[var(--otari-ink)] tabular-nums focus:border-[var(--otari-brand)] focus:outline-none" + /> + {pageCount != null ? / {pageCount.toLocaleString()} : null} + + + +
+
+
+ ); +} diff --git a/web/src/lib/tableSelection.test.ts b/web/src/lib/tableSelection.test.ts new file mode 100644 index 00000000..0fc7e758 --- /dev/null +++ b/web/src/lib/tableSelection.test.ts @@ -0,0 +1,49 @@ +import { act, renderHook } from "@testing-library/react"; +import { describe, expect, it } from "vitest"; + +import { resolveSelectedIds, selectionCount, useTableSelection } from "./tableSelection"; + +describe("resolveSelectedIds", () => { + it("expands the 'all' sentinel to the page's selectable keys", () => { + expect(resolveSelectedIds("all", ["a", "b", "c"])).toEqual(["a", "b", "c"]); + }); + + it("keeps only selected keys, in page order", () => { + expect(resolveSelectedIds(new Set(["c", "a"]), ["a", "b", "c"])).toEqual(["a", "c"]); + }); + + it("drops stale keys not on the current page", () => { + expect(resolveSelectedIds(new Set(["a", "gone"]), ["a", "b"])).toEqual(["a"]); + }); +}); + +describe("selectionCount", () => { + it("counts an explicit selection", () => { + expect(selectionCount(new Set(["a", "b"]), ["a", "b", "c"])).toBe(2); + }); + it("counts 'all' as every selectable key", () => { + expect(selectionCount("all", ["a", "b", "c"])).toBe(3); + }); +}); + +describe("useTableSelection", () => { + it("drops all-matching when the selection changes manually", () => { + const { result } = renderHook(() => useTableSelection()); + + act(() => result.current.enableAllMatching()); + expect(result.current.allMatching).toBe(true); + + act(() => result.current.onSelectionChange(new Set(["a"]))); + expect(result.current.allMatching).toBe(false); + expect(result.current.selectedKeys).toEqual(new Set(["a"])); + }); + + it("clear resets both the selection and all-matching", () => { + const { result } = renderHook(() => useTableSelection()); + act(() => result.current.onSelectionChange(new Set(["a", "b"]))); + act(() => result.current.enableAllMatching()); + act(() => result.current.clear()); + expect(result.current.allMatching).toBe(false); + expect(result.current.selectedKeys).toEqual(new Set()); + }); +}); diff --git a/web/src/lib/tableSelection.ts b/web/src/lib/tableSelection.ts new file mode 100644 index 00000000..64a7ee95 --- /dev/null +++ b/web/src/lib/tableSelection.ts @@ -0,0 +1,53 @@ +import { useCallback, useState } from "react"; +import type { Selection } from "react-aria-components"; + +// Row selection for the shared tables. react-aria owns the per-page selection +// (a Set of row keys, or the sentinel "all" meaning every selectable row on the +// page). On top of that we track `allMatching`: the operator's intent to act on +// every row matching the current filter, not just the page, so a bulk op can be +// set-scoped (by filter) instead of id-scoped. Any manual selection change drops +// `allMatching`, so the two never drift. + +export interface TableSelection { + selectedKeys: Selection; + onSelectionChange: (keys: Selection) => void; + allMatching: boolean; + enableAllMatching: () => void; + clear: () => void; +} + +export function useTableSelection(): TableSelection { + const [selectedKeys, setSelectedKeys] = useState(() => new Set()); + const [allMatching, setAllMatching] = useState(false); + + const onSelectionChange = useCallback((keys: Selection) => { + setSelectedKeys(keys); + setAllMatching(false); + }, []); + + const clear = useCallback(() => { + setSelectedKeys(new Set()); + setAllMatching(false); + }, []); + + const enableAllMatching = useCallback(() => setAllMatching(true), []); + + return { selectedKeys, onSelectionChange, allMatching, enableAllMatching, clear }; +} + +/** + * The selected row ids on the current page. `selectableKeys` is the page's list + * of selectable row keys, in order, used both to expand the "all" sentinel and + * to keep the result ordered and free of stale/disabled keys. + */ +export function resolveSelectedIds(selection: Selection, selectableKeys: string[]): string[] { + if (selection === "all") { + return selectableKeys; + } + return selectableKeys.filter((key) => selection.has(key)); +} + +/** How many rows the page selection covers (expanding the "all" sentinel). */ +export function selectionCount(selection: Selection, selectableKeys: string[]): number { + return resolveSelectedIds(selection, selectableKeys).length; +} diff --git a/web/src/lib/urlState.test.tsx b/web/src/lib/urlState.test.tsx new file mode 100644 index 00000000..7b4f0bc1 --- /dev/null +++ b/web/src/lib/urlState.test.tsx @@ -0,0 +1,39 @@ +import { renderHook } from "@testing-library/react"; +import type { ReactNode } from "react"; +import { MemoryRouter } from "react-router-dom"; +import { describe, expect, it } from "vitest"; + +import { useUrlState } from "./urlState"; + +const DEFAULTS = { page: "0", size: "50", status: "" } as const; + +function wrapperFor(url: string) { + return ({ children }: { children: ReactNode }) => {children}; +} + +describe("useUrlState.getNumber", () => { + it("reads a numeric param", () => { + const { result } = renderHook(() => useUrlState(DEFAULTS), { wrapper: wrapperFor("/?size=250") }); + expect(result.current.getNumber("size")).toBe(250); + }); + + it("falls back to the key's default when the param is absent", () => { + const { result } = renderHook(() => useUrlState(DEFAULTS), { wrapper: wrapperFor("/") }); + expect(result.current.getNumber("size")).toBe(50); + expect(result.current.getNumber("page")).toBe(0); + }); + + it("falls back to the default (not 0) when the param is present but non-numeric", () => { + // A hand-edited `?size=abc` must not become pageSize=0 (which would send limit=0 → 422). + const { result } = renderHook(() => useUrlState(DEFAULTS), { wrapper: wrapperFor("/?size=abc") }); + expect(result.current.getNumber("size")).toBe(50); + }); +}); + +describe("useUrlState.get", () => { + it("returns the param value or the default", () => { + const { result } = renderHook(() => useUrlState(DEFAULTS), { wrapper: wrapperFor("/?status=error") }); + expect(result.current.get("status")).toBe("error"); + expect(result.current.get("size")).toBe("50"); + }); +}); diff --git a/web/src/lib/urlState.ts b/web/src/lib/urlState.ts new file mode 100644 index 00000000..d76cb178 --- /dev/null +++ b/web/src/lib/urlState.ts @@ -0,0 +1,82 @@ +import { useCallback } from "react"; +import { useSearchParams } from "react-router-dom"; + +// Keep table filter/pagination state in the URL query string, so a filtered view +// is shareable and survives the back button. Values equal to their default are +// removed to keep the URL clean, and every update is a single `setSearchParams` +// call: react-router's functional updater is based on the current location, so +// several separate calls in one tick would clobber each other rather than +// compose. `patch` therefore takes all the keys to change at once. + +export function useUrlParam(key: string, defaultValue = ""): [string, (value: string) => void] { + const [params, setParams] = useSearchParams(); + const value = params.get(key) ?? defaultValue; + const setValue = useCallback( + (next: string) => { + setParams( + (prev) => { + const updated = new URLSearchParams(prev); + if (!next || next === defaultValue) { + updated.delete(key); + } else { + updated.set(key, next); + } + return updated; + }, + { replace: true }, + ); + }, + [key, defaultValue, setParams], + ); + return [value, setValue]; +} + +export interface UrlState { + get: (key: K) => string; + getNumber: (key: K) => number; + /** Apply several key changes in one history entry; "" or the default drops a key. */ + patch: (updates: Partial>) => void; +} + +export function useUrlState(defaults: Record): UrlState { + const [params, setParams] = useSearchParams(); + + const get = useCallback((key: K) => params.get(key) ?? defaults[key], [params, defaults]); + + const getNumber = useCallback( + (key: K) => { + // A present but non-numeric param (e.g. a hand-edited `?size=abc`) must fall + // back to the key's default, not 0: a 0 page size would send `limit=0` and 422. + const parsed = Number.parseInt(params.get(key) ?? "", 10); + if (!Number.isNaN(parsed)) { + return parsed; + } + const fallback = Number.parseInt(defaults[key], 10); + return Number.isNaN(fallback) ? 0 : fallback; + }, + [params, defaults], + ); + + const patch = useCallback( + (updates: Partial>) => { + setParams( + (prev) => { + const next = new URLSearchParams(prev); + for (const [key, raw] of Object.entries(updates)) { + const value = String(raw); + if (value === "" || value === defaults[key as K]) { + next.delete(key); + } else { + next.set(key, value); + } + } + return next; + }, + { replace: true }, + ); + }, + [setParams, defaults], + ); + + return { get, getNumber, patch }; +} diff --git a/web/src/pages/ActivityPage.test.tsx b/web/src/pages/ActivityPage.test.tsx index 5ed70fc1..39498ea2 100644 --- a/web/src/pages/ActivityPage.test.tsx +++ b/web/src/pages/ActivityPage.test.tsx @@ -22,6 +22,9 @@ function entry(overrides: Partial = {}): UsageEntry { total_tokens: 1500, cache_read_tokens: null, cache_write_tokens: null, + cache_write_1h_tokens: null, + billing_meters: null, + pricing_breakdown: null, cost: 0.0123, status: "success", error_message: null, @@ -37,19 +40,34 @@ function jsonResponse(body: unknown, status = 200): Response { return new Response(JSON.stringify(body), { status, headers: { "Content-Type": "application/json" } }); } -// Mock fetch for /v1/usage (list), /v1/usage/count, and /v1/users. Records every -// list URL so tests can assert the query params the filters produced. +interface FetchCall { + url: string; + method: string; + body: string | undefined; +} + +// Mock fetch for the usage list/count/summary reads plus the delete and +// set-price mutations. Records every call so tests can assert URLs and bodies. function mockApi(opts: { rows?: UsageEntry[]; total?: number } = {}) { const rows = opts.rows ?? []; const total = opts.total ?? rows.length; + const calls: FetchCall[] = []; - return vi.spyOn(globalThis, "fetch").mockImplementation(async (input) => { + const mock = vi.spyOn(globalThis, "fetch").mockImplementation(async (input, init) => { const url = String(input); + const method = (init?.method ?? "GET").toUpperCase(); + calls.push({ url, method, body: typeof init?.body === "string" ? init.body : undefined }); + + if (url.endsWith("/v1/usage") && method === "DELETE") { + return jsonResponse({ deleted: 1 }); + } + if (url.includes("/v1/usage/set-price")) { + return jsonResponse({ matched: 1, updated: 1, unchanged: 0 }); + } if (url.includes("/v1/usage/count")) { return jsonResponse({ total }); } if (url.includes("/v1/usage/summary")) { - // Model-suggestion query: distinct models drawn from the mocked rows. const models = Array.from(new Set(rows.map((r) => r.model))); return jsonResponse({ start_date: "", @@ -75,11 +93,13 @@ function mockApi(opts: { rows?: UsageEntry[]; total?: number } = {}) { if (url.includes("/v1/usage")) { return jsonResponse(rows); } - if (url.includes("/v1/users")) { + if (url.includes("/v1/users") || url.includes("/v1/keys")) { return jsonResponse([]); } return jsonResponse([]); }); + + return { mock, calls }; } function renderPage(ui: ReactElement, route = "/activity") { @@ -91,12 +111,19 @@ function renderPage(ui: ReactElement, route = "/activity") { ); } -// Only the list requests (not /count, not the /summary model-suggestion query) -// carry the pagination + filter params. -function listCalls(fetchMock: ReturnType): string[] { - return fetchMock.mock.calls - .map(([u]) => String(u)) - .filter((u) => u.includes("/v1/usage") && !u.includes("/count") && !u.includes("/summary")); +// Only the list requests (not /count, /summary, or mutations) carry the +// pagination + filter params. +function listCalls(calls: FetchCall[]): string[] { + return calls + .filter( + (c) => + c.method === "GET" && + c.url.includes("/v1/usage") && + !c.url.includes("/count") && + !c.url.includes("/summary") && + !c.url.includes("/set-price"), + ) + .map((c) => c.url); } describe("ActivityPage", () => { @@ -125,16 +152,15 @@ describe("ActivityPage", () => { renderPage(); const importedRow = (await screen.findByText("imported-model")).closest("tr")!; - // Null api_key_id (master-key / historical) renders as an em-dash. expect(within(importedRow).getByText("—")).toBeInTheDocument(); }); it("sends the api key filter to the API", async () => { - const fetchMock = mockApi({ rows: [entry({ api_key_id: "key-1" })] }); + const { calls } = mockApi({ rows: [entry({ api_key_id: "key-1" })] }); renderPage(, "/activity?api_key_id=key-1"); await screen.findByText("gpt-4o"); - expect(listCalls(fetchMock).some((url) => url.includes("api_key_id=key-1"))).toBe(true); + expect(listCalls(calls).some((url) => url.includes("api_key_id=key-1"))).toBe(true); }); it("renders latency over a second as seconds and null latency as an em-dash", async () => { @@ -152,7 +178,7 @@ describe("ActivityPage", () => { expect(within(batch).getByText("—")).toBeInTheDocument(); }); - it("expands an error row without exposing provider diagnostics", async () => { + it("opens an error row's detail without exposing provider diagnostics", async () => { const user = userEvent.setup(); mockApi({ rows: [entry({ status: "error", error_message: "provider exploded: quota exceeded" })] }); renderPage(); @@ -163,13 +189,11 @@ describe("ActivityPage", () => { await user.click(row); expect(screen.getByText("The provider returned an error. Inspect gateway logs for details.")).toBeInTheDocument(); expect(screen.queryByText("provider exploded: quota exceeded")).not.toBeInTheDocument(); - expect(screen.queryByRole("button", { name: "Copy" })).not.toBeInTheDocument(); }); it("reports copying only after the clipboard write succeeds", async () => { const writeText = vi.fn().mockResolvedValue(undefined); const copied = await copyToClipboard("provider exploded", { writeText }); - expect(writeText).toHaveBeenCalledWith("provider exploded"); expect(copied).toBe(true); }); @@ -177,22 +201,30 @@ describe("ActivityPage", () => { it("does not report success when the clipboard write fails", async () => { const writeText = vi.fn().mockRejectedValue(new Error("clipboard denied")); const copied = await copyToClipboard("provider exploded", { writeText }); - expect(writeText).toHaveBeenCalledWith("provider exploded"); expect(copied).toBe(false); }); it("sends the status filter to the API", async () => { - const fetchMock = mockApi({ rows: [entry()] }); + const { calls } = mockApi({ rows: [entry()] }); const user = userEvent.setup(); renderPage(); await screen.findByText("gpt-4o"); await user.selectOptions(screen.getByLabelText("Status"), "error"); - // The most recent list request must carry status=error. - const calls = listCalls(fetchMock); - expect(calls.at(-1)).toContain("status=error"); + await waitFor(() => expect(listCalls(calls).at(-1)).toContain("status=error")); + }); + + it("sends the priced filter to the API", async () => { + const { calls } = mockApi({ rows: [entry()] }); + const user = userEvent.setup(); + renderPage(); + + await screen.findByText("gpt-4o"); + await user.selectOptions(screen.getByLabelText("Priced?"), "false"); + + await waitFor(() => expect(listCalls(calls).at(-1)).toContain("priced=false")); }); it("distinguishes filtered-empty from never-used", async () => { @@ -200,34 +232,22 @@ describe("ActivityPage", () => { mockApi({ rows: [], total: 0 }); renderPage(); - // Default 24h window counts as a filter, so an empty result reads as filtered. + // The default 24h window bounds the query, so an empty result reads as filtered. expect(await screen.findByText("No requests match these filters.")).toBeInTheDocument(); - // Clearing all filters (including the time window) shows the true-empty copy. await user.click(screen.getByRole("button", { name: "Clear filters" })); expect(await screen.findByText("No requests recorded yet.")).toBeInTheDocument(); }); - it("filters by API key, not by endpoint or source", async () => { - // The Activity log scopes by API key; the endpoint and source selects were - // removed. (Source is still shown per-row in the expanded detail.) - mockApi({ rows: [entry()] }); - renderPage(); - - await screen.findByText("gpt-4o"); - expect(screen.getByRole("combobox", { name: "API key" })).toBeInTheDocument(); - expect(screen.queryByLabelText("Endpoint")).not.toBeInTheDocument(); - expect(screen.queryByLabelText("Source")).not.toBeInTheDocument(); - }); - it("keeps Next reachable when the count request fails", async () => { - // A failed /count must not strand the operator on page 1 with a full page of - // rows they cannot page past. vi.spyOn(globalThis, "fetch").mockImplementation(async (input) => { const url = String(input); if (url.includes("/v1/usage/count")) { return jsonResponse({ detail: "boom" }, 500); } + if (url.includes("/v1/usage/summary")) { + return jsonResponse({ by_model: [], by_user: [], by_api_key: [], series: [] }); + } if (url.includes("/v1/usage")) { return jsonResponse(Array.from({ length: 50 }, (_, i) => entry({ id: `r${i}` }))); } @@ -236,37 +256,17 @@ describe("ActivityPage", () => { renderPage(); await screen.findAllByText("gpt-4o"); - expect(screen.getByRole("button", { name: "Next" })).toBeEnabled(); - // The range must reflect the rows on screen rather than reading "0 of 0", - // which would contradict the 50 visible rows. + expect(screen.getByRole("button", { name: "Next page" })).toBeEnabled(); expect(screen.getByText("1–50")).toBeInTheDocument(); expect(screen.queryByText("0 of 0")).not.toBeInTheDocument(); }); - it("suggests in-window models in the picker and commits the picked one", async () => { - const fetchMock = mockApi({ - rows: [entry({ model: "gpt-4o" }), entry({ id: "b", model: "claude-sonnet-5" })], - }); - const user = userEvent.setup(); - renderPage(); - await screen.findAllByText("gpt-4o"); - - const modelInput = screen.getByRole("combobox", { name: "Model" }); - await user.click(modelInput); - await user.type(modelInput, "claude"); - // The suggestion comes from the window's usage, not a free-text guess. - await user.click(await screen.findByRole("option", { name: "claude-sonnet-5" })); - - await waitFor(() => expect(listCalls(fetchMock).at(-1)).toContain("model=claude-sonnet-5")); - }); - it("seeds filters from the drill-down query string", async () => { - // A row click on the Usage page navigates here with the dimension + window. - const fetchMock = mockApi({ rows: [entry()] }); + const { calls } = mockApi({ rows: [entry()] }); renderPage(, "/activity?model=gpt-4o&user_id=alice&status=error"); await screen.findByText("gpt-4o"); - const latest = listCalls(fetchMock).at(-1)!; + const latest = listCalls(calls).at(-1)!; expect(latest).toContain("model=gpt-4o"); expect(latest).toContain("user_id=alice"); expect(latest).toContain("status=error"); @@ -277,8 +277,75 @@ describe("ActivityPage", () => { renderPage(); expect(await screen.findByText("1–50 of 120")).toBeInTheDocument(); - expect(screen.getByRole("button", { name: "Previous" })).toBeDisabled(); - expect(screen.getByRole("button", { name: "Next" })).toBeEnabled(); + expect(screen.getByRole("button", { name: "Previous page" })).toBeDisabled(); + expect(screen.getByRole("button", { name: "Next page" })).toBeEnabled(); + }); + + it("only lets imported rows be selected", async () => { + mockApi({ + rows: [ + entry({ id: "gw", model: "gateway-model", counts_toward_budget: true }), + entry({ id: "imp", model: "imported-model", counts_toward_budget: false }), + ], + }); + renderPage(); + + const gatewayRow = (await screen.findByText("gateway-model")).closest("tr")!; + const importedRow = screen.getByText("imported-model").closest("tr")!; + expect(within(gatewayRow).getByRole("checkbox")).toBeDisabled(); + expect(within(importedRow).getByRole("checkbox")).toBeEnabled(); + }); + + it("deletes the selected imported rows by id", async () => { + const user = userEvent.setup(); + const { calls } = mockApi({ + rows: [entry({ id: "imp-1", model: "imported-model", counts_toward_budget: false })], + total: 1, + }); + renderPage(); + + const row = (await screen.findByText("imported-model")).closest("tr")!; + await user.click(within(row).getByRole("checkbox")); + + // Bulk bar appears with the page selection count. + expect(await screen.findByText("1 selected")).toBeInTheDocument(); + await user.click(screen.getByRole("button", { name: "Delete" })); + + // Confirm in the dialog. + const dialog = await screen.findByRole("alertdialog"); + await user.click(within(dialog).getByRole("button", { name: "Delete" })); + + await waitFor(() => { + const del = calls.find((c) => c.url.endsWith("/v1/usage") && c.method === "DELETE"); + expect(del).toBeTruthy(); + expect(del!.body).toContain("imp-1"); + }); + }); + + it("sets a manual price on the selected imported rows", async () => { + const user = userEvent.setup(); + const { calls } = mockApi({ + rows: [entry({ id: "imp-1", model: "imported-model", counts_toward_budget: false })], + total: 1, + }); + renderPage(); + + const row = (await screen.findByText("imported-model")).closest("tr")!; + await user.click(within(row).getByRole("checkbox")); + await user.click(screen.getByRole("button", { name: "Set price" })); + + const dialog = await screen.findByRole("alertdialog"); + await user.type(within(dialog).getByLabelText("Input $ / 1M"), "3"); + await user.type(within(dialog).getByLabelText("Output $ / 1M"), "15"); + await user.click(within(dialog).getByRole("button", { name: "Set price" })); + + await waitFor(() => { + const priceCall = calls.find((c) => c.url.includes("/v1/usage/set-price") && c.method === "POST"); + expect(priceCall).toBeTruthy(); + expect(priceCall!.body).toContain("imp-1"); + expect(priceCall!.body).toContain("\"input_price_per_million\":3"); + expect(priceCall!.body).toContain("\"output_price_per_million\":15"); + }); }); it("collapses the filter controls behind a mobile toggle that expands them", async () => { diff --git a/web/src/pages/ActivityPage.tsx b/web/src/pages/ActivityPage.tsx index 43a63077..b2a2f192 100644 --- a/web/src/pages/ActivityPage.tsx +++ b/web/src/pages/ActivityPage.tsx @@ -1,13 +1,26 @@ -import { Button, Spinner } from "@heroui/react"; -import { clsx } from "clsx"; -import { Fragment, useEffect, useMemo, useState } from "react"; +import { Button, Card } from "@heroui/react"; +import clsx from "clsx"; +import { useEffect, useMemo, useRef, useState } from "react"; import type { ReactNode } from "react"; -import { useSearchParams } from "react-router-dom"; -import { useKeys, useUsageCount, useUsageLogs, useUsageSummary, useUsers } from "@/api/hooks"; -import type { UsageEntry, UsageFilters } from "@/api/types"; -import { LoadingRow, Table, TableMessage, Td, Th, THead, Tr } from "@/components/Table"; +import { + useDeleteUsage, + useKeys, + useSetUsagePrice, + useUsageCount, + useUsageLogs, + useUsageSummary, + useUsers, +} from "@/api/hooks"; +import type { UsageEntry, UsageFilters, UsageMutationSelection } from "@/api/types"; +import { BulkActionBar } from "@/components/BulkActionBar"; +import { ConfirmDialog } from "@/components/ConfirmDialog"; +import { DataTable, type DataTableColumn } from "@/components/DataTable"; +import { SetPriceDialog, type ManualRates } from "@/components/SetPriceDialog"; +import { TablePagination } from "@/components/TablePagination"; import { ErrorBanner, FilterComboBox, FilterSelect, PageHeader } from "@/components/ui"; +import { resolveSelectedIds, useTableSelection } from "@/lib/tableSelection"; +import { useUrlState } from "@/lib/urlState"; // ---------- formatting ---------- @@ -53,25 +66,63 @@ function timeAgo(iso: string): string { const HOUR_S = 3_600; const DAY_S = 86_400; -const TIME_PRESETS: { label: string; seconds: number | null }[] = [ - { label: "Last hour", seconds: HOUR_S }, - { label: "24h", seconds: DAY_S }, - { label: "7d", seconds: 7 * DAY_S }, - { label: "All", seconds: null }, +const RANGE_PRESETS: { key: string; label: string; seconds: number | null }[] = [ + { key: "1h", label: "1h", seconds: HOUR_S }, + { key: "24h", label: "24h", seconds: DAY_S }, + { key: "7d", label: "7d", seconds: 7 * DAY_S }, + { key: "30d", label: "30d", seconds: 30 * DAY_S }, + { key: "all", label: "All", seconds: null }, ]; +const DEFAULT_RANGE = "24h"; + const STATUS_OPTIONS: { label: string; value: string }[] = [ { label: "All", value: "" }, { label: "Success", value: "success" }, { label: "Error", value: "error" }, ]; -const PAGE_SIZE = 50; +const PRICED_OPTIONS: { label: string; value: string }[] = [ + { label: "All", value: "" }, + { label: "Priced", value: "true" }, + { label: "Unpriced", value: "false" }, +]; + +const DEFAULT_PAGE_SIZE = 50; + +// All filter + pagination state, with defaults, kept in the URL. +const URL_DEFAULTS = { + range: DEFAULT_RANGE, + start_date: "", + end_date: "", + status: "", + model: "", + user_id: "", + api_key_id: "", + priced: "", + page: "0", + size: String(DEFAULT_PAGE_SIZE), +} as const; function isoAgo(seconds: number): string { return new Date(Date.now() - seconds * 1000).toISOString(); } +// Resolve the query window. Explicit start_date/end_date bounds (a custom range, +// or a drill-down from the Usage page) take precedence; otherwise a preset anchors +// `start` to "now minus N", and "all" (or an empty custom range) leaves it open. +function resolveWindow(range: string, start: string, end: string): { start?: string; end?: string } { + if (start || end) { + return { start: start || undefined, end: end || undefined }; + } + if (range === "custom") { + return {}; + } + const preset = RANGE_PRESETS.find((p) => p.key === range) ?? RANGE_PRESETS.find((p) => p.key === DEFAULT_RANGE); + const seconds = preset?.seconds ?? null; + return { start: seconds == null ? undefined : isoAgo(seconds), end: undefined }; +} + // ---------- small presentational pieces ---------- // Status as a pill, failure-forward: errors use the shared red status surface so @@ -117,18 +168,14 @@ function DetailField({ label, children }: { label: string; children: ReactNode } ); } -// The expandable detail panel for one request: a safe error summary plus the -// metadata that does not fit the row. Provider diagnostics stay server-side. +// The detail panel for one request: a safe error summary plus the metadata that +// does not fit the row. Provider diagnostics stay server-side. function RequestDetail({ entry }: { entry: UsageEntry }) { return (
{entry.error_message ? (
-
- - Error - -
+ Error
             The provider returned an error. Inspect gateway logs for details.
           
@@ -153,7 +200,9 @@ function RequestDetail({ entry }: { entry: UsageEntry }) {
{entry.pricing_breakdown?.length ? (
- Billed meters + + Billed meters +
{entry.pricing_breakdown.map((line) => ( @@ -169,139 +218,205 @@ function RequestDetail({ entry }: { entry: UsageEntry }) { // ---------- page ---------- -const COLS = 8; - export function ActivityPage() { const users = useUsers(); const keys = useKeys(); - // Map an api_key_id to a human label (the key's name, else a short id). Imported - // usage carries the importing key; a null id is a master-key or historical row. const keyLabels = useMemo(() => { const map = new Map(); for (const k of keys.data ?? []) map.set(k.id, k.key_name ?? `${k.id.slice(0, 8)}…`); return map; }, [keys.data]); const apiKeyLabel = (id: string | null): string => (id === null ? "—" : (keyLabels.get(id) ?? `${id.slice(0, 8)}…`)); - // Drill-down from the Usage page arrives with model / user_id / start_date / - // status in the query string; seed the initial filter state from it (once, on - // mount) so the log opens pre-filtered on what the operator clicked. - const [searchParams] = useSearchParams(); - const initialStart = searchParams.get("start_date") ?? undefined; - - const [rangeSeconds, setRangeSeconds] = useState(initialStart ? null : DAY_S); - // Snapshotted when a range is picked (and on refresh), so the query key is - // stable across renders instead of recomputing "now" every render. - const [startDate, setStartDate] = useState(() => initialStart ?? isoAgo(DAY_S)); - const [statusFilter, setStatusFilter] = useState(() => searchParams.get("status") ?? ""); - const [modelFilter, setModelFilter] = useState(() => searchParams.get("model") ?? ""); - const [userFilter, setUserFilter] = useState(() => searchParams.get("user_id") ?? ""); - const [apiKeyFilter, setApiKeyFilter] = useState(() => searchParams.get("api_key_id") ?? ""); - const [page, setPage] = useState(0); - const [expanded, setExpanded] = useState(null); - // On mobile the status/key/user/model controls collapse behind a "Filters" - // toggle so they do not push the request table far down the page; desktop shows - // them inline. The time-range presets stay visible either way. - const [filtersOpen, setFiltersOpen] = useState(false); + + // Filter + pagination state lives in the URL, so a filtered view is shareable + // and survives the back button. `patch` batches related changes into one entry. + const url = useUrlState(URL_DEFAULTS); + const range = url.get("range"); + const startParam = url.get("start_date"); + const endParam = url.get("end_date"); + const statusFilter = url.get("status"); + const modelFilter = url.get("model"); + const userFilter = url.get("user_id"); + const apiKeyFilter = url.get("api_key_id"); + const pricedFilter = url.get("priced"); + const page = url.getNumber("page"); + const pageSize = url.getNumber("size"); + + // Snapshot the window so a rolling preset does not recompute "now" every render + // (which would churn the query key). Re-anchored when the range changes or on refresh. + const [win, setWin] = useState(() => resolveWindow(range, startParam, endParam)); + useEffect(() => { + setWin(resolveWindow(range, startParam, endParam)); + }, [range, startParam, endParam]); + + // A custom range is active whenever explicit bounds are set (including a + // drill-down), otherwise the URL's preset drives the highlight. + const activeRange = startParam || endParam ? "custom" : range; + const hasWindow = Boolean(win.start || win.end); + + const priced = pricedFilter === "true" ? true : pricedFilter === "false" ? false : undefined; const filters: UsageFilters = useMemo( () => ({ - start_date: startDate, + start_date: win.start, + end_date: win.end, status: statusFilter || undefined, model: modelFilter.trim() || undefined, user_id: userFilter || undefined, api_key_id: apiKeyFilter || undefined, + priced, }), - [startDate, statusFilter, modelFilter, userFilter, apiKeyFilter], + [win, statusFilter, modelFilter, userFilter, apiKeyFilter, priced], ); - // Any change to the filter set returns to the first page. + const selection = useTableSelection(); + + // Any change to the filter set returns to the first page and drops the + // selection, but not on mount, so a shared URL keeps its page. + const filtersKey = JSON.stringify(filters); + const prevFiltersKey = useRef(filtersKey); useEffect(() => { - setPage(0); - }, [filters]); + if (prevFiltersKey.current !== filtersKey) { + prevFiltersKey.current = filtersKey; + url.patch({ page: 0 }); + selection.clear(); + } + }, [filtersKey, url, selection]); - const usage = useUsageLogs(filters, page, PAGE_SIZE); + const usage = useUsageLogs(filters, page, pageSize); const count = useUsageCount(filters); - // Model suggestions: models with usage in the current window (the other filters - // applied, the model filter itself omitted so the full list stays offered). The - // picker still accepts any typed model, so one outside this window is reachable. + // Model suggestions: models with usage in the window (other filters applied, the + // model filter omitted so the full list stays offered). const modelSuggestFilters: UsageFilters = useMemo( () => ({ - start_date: startDate, + start_date: win.start, + end_date: win.end, status: statusFilter || undefined, user_id: userFilter || undefined, api_key_id: apiKeyFilter || undefined, }), - [startDate, statusFilter, userFilter, apiKeyFilter], + [win, statusFilter, userFilter, apiKeyFilter], ); const modelSummary = useUsageSummary(modelSuggestFilters, "day"); - // Derived from query data, not mirrored into state. modelSuggestFilters omits - // the model filter, so the list is always the full set of in-window models. const modelOptions = modelSummary.data?.by_model?.filter((r) => !r.is_other && r.key !== null).map((r) => r.key as string) ?? []; - // API-key options for the filter: every key's human name (or a short id), so an - // operator can scope the log to one key. Imported OTLP usage carries its - // importer key, so this reaches those rows too. - const keyOptions = (keys.data ?? []).map((k) => ({ - value: k.id, - label: k.key_name ?? `${k.id.slice(0, 8)}…`, - })); + const keyOptions = (keys.data ?? []).map((k) => ({ value: k.id, label: k.key_name ?? `${k.id.slice(0, 8)}…` })); const rows = usage.data ?? []; - const total = count.data?.total ?? 0; + const totalIsExact = count.isSuccess && !count.isPlaceholderData; + const total = totalIsExact ? (count.data?.total ?? 0) : null; const anyFilter = Boolean( - statusFilter || modelFilter.trim() || userFilter || apiKeyFilter || rangeSeconds !== null, + statusFilter || modelFilter.trim() || userFilter || apiKeyFilter || pricedFilter || hasWindow, ); - // Count only the collapsible controls (not the always-visible time range) so - // the mobile toggle can advertise how many are active while hidden. - const activeFilterCount = [statusFilter, modelFilter.trim(), userFilter, apiKeyFilter].filter(Boolean).length; + // On mobile the status/priced/key/user/model controls collapse behind a + // "Filters" toggle (labelled with the active count) so the request table sits + // near the top; desktop shows them inline. + const [filtersOpen, setFiltersOpen] = useState(false); + const activeFilterCount = [statusFilter, pricedFilter, apiKeyFilter, userFilter, modelFilter.trim()].filter( + Boolean, + ).length; + + // Selection targets imported rows only; enforced gateway rows are disabled so + // bulk delete / set-price can never reach them. + const selectableKeys = useMemo(() => rows.filter((r) => !r.counts_toward_budget).map((r) => r.id), [rows]); + const disabledKeys = useMemo(() => rows.filter((r) => r.counts_toward_budget).map((r) => r.id), [rows]); + const selectedIds = resolveSelectedIds(selection.selectedKeys, selectableKeys); + const pageSelectedCount = selectedIds.length; + const hasSelection = selection.allMatching || pageSelectedCount > 0; + + // Total imported rows matching the filter, for the "select all N" affordance + // and the bulk-op copy; only fetched once there is a selection. + const importedFilters = useMemo(() => ({ ...filters, counts_toward_budget: false }), [filters]); + const importedCount = useUsageCount(importedFilters, hasSelection); + const matchingTotal = importedCount.isSuccess ? (importedCount.data?.total ?? null) : null; + const allPageSelected = selectableKeys.length > 0 && pageSelectedCount === selectableKeys.length; + const canSelectAllMatching = allPageSelected && matchingTotal != null && matchingTotal > pageSelectedCount; + const effectiveCount = selection.allMatching ? (matchingTotal ?? pageSelectedCount) : pageSelectedCount; + + const deleteUsage = useDeleteUsage(); + const setPrice = useSetUsagePrice(); + const [deleteOpen, setDeleteOpen] = useState(false); + const [priceOpen, setPriceOpen] = useState(false); + const [expandedId, setExpandedId] = useState(null); + const expanded = rows.find((r) => r.id === expandedId) ?? null; + + // A bulk op targets either the current page selection (ids) or, once the operator + // opted into "all matching", the filter itself (by_filter). The server scopes + // either to imported rows. + const selectionBody = (): UsageMutationSelection => + selection.allMatching + ? { + by_filter: true, + model: filters.model, + user_id: filters.user_id, + api_key_id: filters.api_key_id, + status: filters.status, + start_date: filters.start_date, + end_date: filters.end_date, + priced: filters.priced, + } + : { ids: selectedIds }; + + const onDeleteConfirm = () => { + deleteUsage.mutate(selectionBody(), { + onSuccess: () => { + setDeleteOpen(false); + selection.clear(); + }, + }); + }; - const pickRange = (seconds: number | null) => { - setRangeSeconds(seconds); - setStartDate(seconds === null ? undefined : isoAgo(seconds)); + const onSetPrice = (rates: ManualRates) => { + setPrice.mutate( + { ...selectionBody(), ...rates }, + { + onSuccess: () => { + setPriceOpen(false); + selection.clear(); + }, + }, + ); }; const clearFilters = () => { - setRangeSeconds(null); - setStartDate(undefined); - setStatusFilter(""); - setModelFilter(""); - setUserFilter(""); - setApiKeyFilter(""); + // "All" time plus no filters is the true-empty baseline. + url.patch({ + range: "all", + start_date: "", + end_date: "", + status: "", + model: "", + user_id: "", + api_key_id: "", + priced: "", + }); }; const refresh = () => { - // Re-anchor a rolling window to "now" before refetching. - if (rangeSeconds !== null) { - setStartDate(isoAgo(rangeSeconds)); - } + setWin(resolveWindow(range, startParam, endParam)); void usage.refetch(); void count.refetch(); }; - // Anchored on the rows actually on screen, not the total, so the range stays - // truthful when the count request failed and `total` is therefore 0. - const hasRows = rows.length > 0; - const rangeStart = hasRows ? page * PAGE_SIZE + 1 : 0; - const rangeEnd = page * PAGE_SIZE + rows.length; - // The total is only exact when the newest count for *these* filters succeeded. - // `count.data` alone is not that test: TanStack keeps the last successful data - // when a refetch errors, and keepPreviousData serves the previous filters' - // total while a new one loads. Either would drive the pager off a stale number. - const totalIsExact = count.isSuccess && !count.isPlaceholderData; - // Without an exact total, show just the visible range: "0 of 0" would - // contradict the rows on screen. - const pagerLabel = !totalIsExact - ? hasRows - ? `${rangeStart}–${rangeEnd}` - : "0" - : total === 0 - ? "0 of 0" - : `${rangeStart}–${rangeEnd} of ${total.toLocaleString()}`; - // Fall back to "a full page came back, so there is probably more" when the - // total is not exact. Otherwise a failed count would strand the operator on - // page 1 with rows they cannot reach. - const hasNext = totalIsExact ? (page + 1) * PAGE_SIZE < total : rows.length === PAGE_SIZE; + const columns: DataTableColumn[] = [ + { + id: "time", + header: "Time", + cell: (e) => ( + + {timeAgo(e.timestamp)} + + ), + }, + { id: "user", header: "User", cell: (e) => e.user_id ?? "—" }, + { id: "model", header: "Model", isRowHeader: true, cell: (e) => e.model }, + { id: "api_key", header: "API key", cell: (e) => {apiKeyLabel(e.api_key_id)} }, + { id: "tokens", header: "Tokens", align: "end", cell: (e) => formatTokens(e.total_tokens) }, + { id: "cost", header: "Cost", align: "end", cell: (e) => formatUSD(e.cost) }, + { id: "latency", header: "Total time", align: "end", cell: (e) => formatLatency(e.latency_ms) }, + { id: "status", header: "Status", cell: (e) => }, + ]; return (
@@ -317,23 +432,48 @@ export function ActivityPage() { - {/* Filters. The time-range presets share a row with the filter boxes when the - window is wide enough, and wrap onto their own line when it is not. On - mobile the boxes collapse behind the "Filters" toggle to keep the table - near the top. */}
- {TIME_PRESETS.map((preset) => ( + {RANGE_PRESETS.map((preset) => ( ))} +
+ {activeRange === "custom" ? ( +
+ + +
+ ) : null}
- - - - - - - - - - - - - - - {usage.isLoading ? ( - - ) : rows.length === 0 ? ( - - {anyFilter ? "No requests match these filters." : "No requests recorded yet."} - - ) : ( - rows.map((entry) => { - const isError = entry.status === "error"; - const isOpen = expanded === entry.id; - return ( - - setExpanded((current) => (current === entry.id ? null : entry.id))} - > - - - - - - - - - - {isOpen ? ( - - - - ) : null} - - ); - }) - )} - -
TimeUserModelAPI keyTokensCostTotal timeStatus
- {timeAgo(entry.timestamp)} - {entry.user_id ?? "—"}{entry.model}{apiKeyLabel(entry.api_key_id)}{formatTokens(entry.total_tokens)}{formatUSD(entry.cost)}{formatLatency(entry.latency_ms)} - -
- -
- - {/* Pager */} -
- - {pagerLabel} - {usage.isFetching ? : null} - - - - - -
+ + ) : null} + + e.id} + isLoading={usage.isLoading} + emptyContent={anyFilter ? "No requests match these filters." : "No requests recorded yet."} + selectionMode="multiple" + selectedKeys={selection.selectedKeys} + onSelectionChange={selection.onSelectionChange} + disabledKeys={disabledKeys} + onRowAction={(key) => setExpandedId((current) => (current === key ? null : key))} + rowClassName={(e) => (e.status === "error" ? "bg-red-50" : undefined)} + /> + + {expanded ? ( + + +
+ Request detail + +
+ +
+
+ ) : null} + + url.patch({ page: next })} + onPageSizeChange={(size) => url.patch({ size, page: 0 })} + isFetching={usage.isFetching} + hasNextFallback={rows.length === pageSize} + /> + + + +
); } diff --git a/web/src/pages/AliasesPage.test.tsx b/web/src/pages/AliasesPage.test.tsx index 56241a0b..77846a8f 100644 --- a/web/src/pages/AliasesPage.test.tsx +++ b/web/src/pages/AliasesPage.test.tsx @@ -152,4 +152,30 @@ describe("AliasesPage", () => { expect(screen.getByText(/cannot contain/)).toBeInTheDocument(); expect(screen.getByRole("button", { name: /create alias/i })).toBeDisabled(); }); + + it("only lets stored aliases be selected, and bulk-deletes them", async () => { + const fetchMock = mockApi(); + const user = userEvent.setup(); + renderPage(); + + const configRow = (await screen.findByText("fast-model")).closest("tr")!; + const storedRow = screen.getByText("smart").closest("tr")!; + // config alias is read-only, so its checkbox is disabled. + expect(within(configRow).getByRole("checkbox")).toBeDisabled(); + await user.click(within(storedRow).getByRole("checkbox")); + + const bar = (await screen.findByText("1 selected")).closest("div")!; + await user.click(within(bar).getByRole("button", { name: "Delete" })); + + const dialog = await screen.findByRole("alertdialog"); + await user.click(within(dialog).getByRole("button", { name: "Delete" })); + + await vi.waitFor(() => { + const del = fetchMock.mock.calls.find( + ([u, init]) => String(u).includes("/v1/aliases/") && (init?.method ?? "").toUpperCase() === "DELETE", + ); + expect(del).toBeTruthy(); + expect(String(del![0])).toContain("smart"); + }); + }); }); diff --git a/web/src/pages/AliasesPage.tsx b/web/src/pages/AliasesPage.tsx index 108a8db0..48ee6af5 100644 --- a/web/src/pages/AliasesPage.tsx +++ b/web/src/pages/AliasesPage.tsx @@ -4,10 +4,13 @@ import { useSearchParams } from "react-router-dom"; import type { AliasResponse } from "@/api/types"; import { useAliases, useCreateAlias, useDeleteAlias } from "@/api/hooks"; +import { BulkActionBar } from "@/components/BulkActionBar"; +import { ConfirmDialog } from "@/components/ConfirmDialog"; +import { DataTable, type DataTableColumn } from "@/components/DataTable"; import { Field } from "@/components/Field"; import { ModelComboBox } from "@/components/ModelComboBox"; -import { LoadingRow, Table, TableMessage, Td, Th, THead, Tr } from "@/components/Table"; -import { ConfirmButton, ErrorBanner, errorMessage, PageHeader } from "@/components/ui"; +import { ConfirmButton, ErrorBanner, PageHeader } from "@/components/ui"; +import { resolveSelectedIds, useTableSelection } from "@/lib/tableSelection"; // Edit an existing stored alias's target. The name is the lookup key and is shown // read-only; the backend POST /v1/aliases upserts by name, so the same hook serves both. @@ -124,8 +127,82 @@ export function AliasesPage() { const initialTarget = searchParams.get("target") ?? ""; const [adding, setAdding] = useState(initialTarget !== ""); const [editing, setEditing] = useState(null); + const selection = useTableSelection(); + const [bulkDeleteOpen, setBulkDeleteOpen] = useState(false); + const [bulkError, setBulkError] = useState(undefined); + const [bulkPending, setBulkPending] = useState(false); const rows = [...(aliases.data ?? [])].sort((a, b) => a.name.localeCompare(b.name)); + // Only stored aliases can be deleted; config.yml aliases are read-only. + const selectableKeys = rows.filter((a) => a.source === "stored").map((a) => a.name); + const disabledKeys = rows.filter((a) => a.source !== "stored").map((a) => a.name); + const selectedNames = resolveSelectedIds(selection.selectedKeys, selectableKeys); + + const onBulkDelete = async () => { + setBulkPending(true); + setBulkError(undefined); + try { + // No bulk endpoint for aliases; delete sequentially so one failure surfaces + // without firing the rest in parallel against the same small list. + for (const name of selectedNames) { + await deleteAlias.mutateAsync(name); + } + selection.clear(); + setBulkDeleteOpen(false); + } catch (error) { + setBulkError(error); + } finally { + setBulkPending(false); + } + }; + + const columns: DataTableColumn[] = [ + { + id: "alias", + header: "Alias", + isRowHeader: true, + cell: (a) => {a.name}, + }, + { id: "target", header: "Target", cell: (a) => {a.target} }, + { + id: "source", + header: "Source", + cell: (a) => ( + + {a.source} + + ), + }, + { + id: "actions", + header: "Actions", + align: "end", + cell: (a) => + a.source === "stored" ? ( + + + deleteAlias.mutate(a.name)} + > + Delete + + + ) : ( + set in config.yml + ), + }, + ]; return (
@@ -152,63 +229,48 @@ export function AliasesPage() { {adding ? setAdding(false)} /> : null} {editing ? setEditing(null)} /> : null} - - - - - - - - - - - {aliases.isLoading ? ( - - ) : rows.length === 0 ? ( - No aliases yet. Create one to give a model a friendly name. - ) : ( - rows.map((alias) => ( - - - - - - - )) - )} - -
AliasTargetSourceActions
{alias.name}{alias.target} - - {alias.source} - - - {alias.source === "stored" ? ( - - - deleteAlias.mutate(alias.name)} - > - Delete - - {deleteAlias.error ? ( - {errorMessage(deleteAlias.error)} - ) : null} - - ) : ( - set in config.yml - )} -
+ {deleteAlias.error ? : null} + + {selectedNames.length > 0 ? ( + {}} + onClear={selection.clear} + > + + + ) : null} + + a.name} + isLoading={aliases.isLoading} + emptyContent="No aliases yet. Create one to give a model a friendly name." + selectionMode="multiple" + selectedKeys={selection.selectedKeys} + onSelectionChange={selection.onSelectionChange} + disabledKeys={disabledKeys} + /> + +
); } diff --git a/web/src/pages/BudgetsPage.test.tsx b/web/src/pages/BudgetsPage.test.tsx index e4ab8429..e626ab6c 100644 --- a/web/src/pages/BudgetsPage.test.tsx +++ b/web/src/pages/BudgetsPage.test.tsx @@ -314,7 +314,8 @@ describe("BudgetsPage", () => { const user = userEvent.setup(); renderPage(); - await user.click(await screen.findByText("11111111")); + const row = (await screen.findByText("11111111")).closest("tr")!; + await user.click(within(row).getByRole("button", { name: "Edit" })); const field = await screen.findByLabelText("Every N days"); expect(field).toHaveValue("14"); @@ -343,12 +344,13 @@ describe("BudgetsPage", () => { expect(JSON.parse(String(post?.[1]?.body))).toEqual({ name: null, max_budget: null, budget_duration_sec: null }); }); - it("opens the edit form seeded from the row when a budget is clicked", async () => { + it("opens the edit form seeded from the row's Edit action", async () => { mockApi({ budgets: [budget({ max_budget: 42, budget_duration_sec: 86_400 })] }); const user = userEvent.setup(); renderPage(); - await user.click(await screen.findByText("11111111")); + const row = (await screen.findByText("11111111")).closest("tr")!; + await user.click(within(row).getByRole("button", { name: "Edit" })); expect(await screen.findByRole("button", { name: "Save changes" })).toBeInTheDocument(); expect(screen.getByLabelText("Spending limit (USD)")).toHaveValue("42"); @@ -394,4 +396,31 @@ describe("BudgetsPage", () => { expect(del).toBeDefined(); expect(screen.queryByText("11111111")).not.toBeInTheDocument(); }); + + it("bulk-deletes the selected budgets after a confirm", async () => { + const fetchMock = mockApi({ + budgets: [ + budget({ budget_id: "b1", name: "Team monthly" }), + budget({ budget_id: "b2", name: "Trial cap" }), + ], + }); + const user = userEvent.setup(); + renderPage(); + + const row = (await screen.findByText("Team monthly")).closest("tr")!; + await user.click(within(row).getByRole("checkbox")); + + const bar = (await screen.findByText("1 selected")).closest("div")!; + await user.click(within(bar).getByRole("button", { name: "Delete" })); + + const dialog = await screen.findByRole("alertdialog"); + await user.click(within(dialog).getByRole("button", { name: "Delete" })); + + await vi.waitFor(() => { + const del = fetchMock.mock.calls.find( + ([u, init]) => String(u).includes("/v1/budgets/b1") && (init?.method ?? "").toUpperCase() === "DELETE", + ); + expect(del).toBeTruthy(); + }); + }); }); diff --git a/web/src/pages/BudgetsPage.tsx b/web/src/pages/BudgetsPage.tsx index 21296fd9..1779b2fc 100644 --- a/web/src/pages/BudgetsPage.tsx +++ b/web/src/pages/BudgetsPage.tsx @@ -1,5 +1,5 @@ import { Button, Card, Spinner } from "@heroui/react"; -import { Fragment, useEffect, useState } from "react"; +import { useEffect, useState } from "react"; import { useBudgetResetLogs, @@ -11,10 +11,13 @@ import { useUsers, } from "@/api/hooks"; import type { Budget, BudgetResetLog, CreateBudgetRequest, User } from "@/api/types"; +import { BulkActionBar } from "@/components/BulkActionBar"; +import { ConfirmDialog } from "@/components/ConfirmDialog"; +import { DataTable, type DataTableColumn } from "@/components/DataTable"; import { Field } from "@/components/Field"; -import { LoadingRow, Table, TableMessage, Td, Th, THead, Tr } from "@/components/Table"; import { ErrorBanner, InfoBanner, PageHeader } from "@/components/ui"; import { UserMultiSelect } from "@/components/UserMultiSelect"; +import { resolveSelectedIds, useTableSelection } from "@/lib/tableSelection"; // ---------- formatting ---------- @@ -418,11 +421,92 @@ export function BudgetsPage() { const [assignmentError, setAssignmentError] = useState(null); const [pendingAssignments, setPendingAssignments] = useState<{ budgetId: string; userIds: string[] } | null>(null); const [assigningUsers, setAssigningUsers] = useState(false); + const selection = useTableSelection(); + const [bulkDeleteOpen, setBulkDeleteOpen] = useState(false); + const [bulkError, setBulkError] = useState(undefined); + const [bulkPending, setBulkPending] = useState(false); const rows = budgets.data ?? []; const loading = budgets.isLoading; const editingBudget = rows.find((b) => b.budget_id === editing) ?? null; + const historyBudget = rows.find((b) => b.budget_id === historyOpen) ?? null; const showOnboarding = !loading && rows.length === 0 && !addOpen; + const selectableKeys = rows.map((b) => b.budget_id); + const selectedIds = resolveSelectedIds(selection.selectedKeys, selectableKeys); + + const onBulkDelete = async () => { + setBulkPending(true); + setBulkError(undefined); + try { + for (const id of selectedIds) { + await deleteBudget.mutateAsync(id); + } + selection.clear(); + setBulkDeleteOpen(false); + } catch (error) { + setBulkError(error); + } finally { + setBulkPending(false); + } + }; + + const columns: DataTableColumn[] = [ + { + id: "budget", + header: "Budget", + isRowHeader: true, + cell: (b) => ( +
+ + {b.name ?? (unnamed)} + + + {shortId(b.budget_id)} + +
+ ), + }, + { + id: "limit", + header: "Limit (per user)", + cell: (b) => + b.max_budget === null ? Unlimited : formatUSD(b.max_budget), + }, + { id: "reset", header: "Reset", cell: (b) => {formatDuration(b.budget_duration_sec)} }, + { id: "users", header: "Users", cell: (b) => {b.user_count} }, + { id: "usage", header: "Usage", cell: (b) => }, + { + id: "actions", + header: "Actions", + align: "end", + cell: (b) => ( +
+ + + deleteBudget.mutate(b.budget_id)} + /> +
+ ), + }, + ]; const assignUsers = async (budgetId: string, userIds: string[]) => { setAssigningUsers(true); @@ -543,89 +627,61 @@ export function BudgetsPage() { /> ) : null} - - - - - - - - - - - - - {loading ? ( - - ) : rows.length === 0 ? ( - No budgets yet. Create one to cap spending. - ) : ( - rows.map((b) => ( - - { - setAddOpen(false); - setEditing(b.budget_id); - }} - > - - - - - - - - {historyOpen === b.budget_id ? ( - - - - ) : null} - - )) - )} - -
BudgetLimit (per user)ResetUsersUsageActions
-
- {b.name ?? (unnamed)} - - {shortId(b.budget_id)} - -
-
{b.max_budget === null ? Unlimited : formatUSD(b.max_budget)}{formatDuration(b.budget_duration_sec)}{b.user_count} - - - {/* Row click opens Edit; the action buttons stop propagation so - they fire their own handler instead of also opening Edit. */} -
e.stopPropagation()}> - - - deleteBudget.mutate(b.budget_id)} - /> -
-
- -
+ {selectedIds.length > 0 ? ( + {}} + onClear={selection.clear} + > + + + ) : null} + + b.budget_id} + isLoading={loading} + emptyContent="No budgets yet. Create one to cap spending." + selectionMode="multiple" + selectedKeys={selection.selectedKeys} + onSelectionChange={selection.onSelectionChange} + /> + + {historyBudget ? ( + + +
+ + Reset history — {budgetLabel(historyBudget)} + + +
+ +
+
+ ) : null} + +
); } diff --git a/web/src/pages/KeysPage.test.tsx b/web/src/pages/KeysPage.test.tsx index f0475a2f..d9e5cd07 100644 --- a/web/src/pages/KeysPage.test.tsx +++ b/web/src/pages/KeysPage.test.tsx @@ -409,12 +409,13 @@ describe("KeysPage", () => { expect(screen.getByText(/starts unrestricted/)).toBeInTheDocument(); }); - it("opens the edit form when a key row is clicked", async () => { + it("opens the edit form from a key row's Edit action", async () => { mockApi({ keys: [apiKey({ id: "key-1", key_name: "ci-bot" })] }); const user = userEvent.setup(); renderPage(); - await user.click(await screen.findByText("ci-bot")); + const row = (await screen.findByText("ci-bot")).closest("tr")!; + await user.click(within(row).getByRole("button", { name: "Edit" })); // The inline edit card appears (its Save button is unique to edit mode). expect(await screen.findByRole("button", { name: "Save changes" })).toBeInTheDocument(); @@ -425,7 +426,8 @@ describe("KeysPage", () => { const user = userEvent.setup(); renderPage(); - await user.click(await screen.findByText("ci-bot")); + const row = (await screen.findByText("ci-bot")).closest("tr")!; + await user.click(within(row).getByRole("button", { name: "Edit" })); await user.click(await screen.findByLabelText("Exempt this key from budget")); await user.click(screen.getByRole("button", { name: "Save changes" })); @@ -442,12 +444,14 @@ describe("KeysPage", () => { const user = userEvent.setup(); renderPage(); - await user.click(await screen.findByText("alpha")); + const alphaRow = (await screen.findByText("alpha")).closest("tr")!; + await user.click(within(alphaRow).getByRole("button", { name: "Edit" })); expect(await screen.findByLabelText("Name")).toHaveValue("alpha"); // Switching to another key must remount the form; without a keyed remount it // would keep "alpha" and PATCH the wrong key. - await user.click(screen.getByText("bravo")); + const bravoRow = screen.getByText("bravo").closest("tr")!; + await user.click(within(bravoRow).getByRole("button", { name: "Edit" })); expect(await screen.findByLabelText("Name")).toHaveValue("bravo"); }); diff --git a/web/src/pages/KeysPage.tsx b/web/src/pages/KeysPage.tsx index 0ff3436a..79e020da 100644 --- a/web/src/pages/KeysPage.tsx +++ b/web/src/pages/KeysPage.tsx @@ -3,11 +3,14 @@ import { type KeyboardEvent as ReactKeyboardEvent, type ReactNode, useEffect, us import { useCreateKey, useDeleteKey, useKeys, useRotateKey, useUpdateKey, useUsers } from "@/api/hooks"; import type { ApiKey, CreateKeyRequest, CreateKeyResponse, User } from "@/api/types"; +import { BulkActionBar } from "@/components/BulkActionBar"; +import { ConfirmDialog } from "@/components/ConfirmDialog"; +import { DataTable, type DataTableColumn } from "@/components/DataTable"; import { Field } from "@/components/Field"; import { accessLabel, ModelScopeControl } from "@/components/ModelScopeControl"; import { UserComboBox } from "@/components/UserComboBox"; -import { LoadingRow, Table, TableMessage, Td, Th, THead, Tr } from "@/components/Table"; import { ErrorBanner, InfoBanner, PageHeader } from "@/components/ui"; +import { resolveSelectedIds, useTableSelection } from "@/lib/tableSelection"; // ---------- helpers ---------- @@ -577,6 +580,14 @@ export function KeysPage() { const loading = keys.isLoading; const editingKey = rows.find((k) => k.id === editing) ?? null; const showOnboarding = !loading && rows.length === 0 && !addOpen; + const selection = useTableSelection(); + const [bulkDeleteOpen, setBulkDeleteOpen] = useState(false); + const [bulkError, setBulkError] = useState(undefined); + const [bulkPending, setBulkPending] = useState(false); + + const selectableKeys = rows.map((k) => k.id); + const selectedIds = resolveSelectedIds(selection.selectedKeys, selectableKeys); + const selectedKeys = rows.filter((k) => selectedIds.includes(k.id)); const label = (k: ApiKey) => k.key_name ?? k.id; @@ -587,6 +598,135 @@ export function KeysPage() { onSuccess: (result) => setRevealed({ title: `New secret for ${label(k)}`, result }), }); + const runBulk = async (targets: ApiKey[], action: (k: ApiKey) => Promise, onDone?: () => void) => { + setBulkPending(true); + setBulkError(undefined); + try { + for (const key of targets) { + await action(key); + } + selection.clear(); + onDone?.(); + } catch (error) { + setBulkError(error); + } finally { + setBulkPending(false); + } + }; + + const columns: DataTableColumn[] = [ + { + id: "name", + header: "Name", + isRowHeader: true, + cell: (k) => ( +
+ + {k.key_name ?? (unnamed)} + +
+ + {k.exclude_from_budget ? ( + + Budget-exempt + + ) : null} +
+
+ ), + }, + { id: "status", header: "Status", cell: (k) => }, + { + id: "owner", + header: "Owner", + cell: (k) => + isVirtualUser(k.user_id) ? ( + + virtual + + ) : ( + {k.user_id ?? "—"} + ), + }, + { + id: "key", + header: "Key", + cell: (k) => {k.key_prefix ? `${k.key_prefix}…` : "—"}, + }, + { id: "created", header: "Created", cell: (k) => {absolute(k.created_at)} }, + { + id: "last_used", + header: "Last used", + cell: (k) => {relative(k.last_used_at) ?? "never"}, + }, + { + id: "expires", + header: "Expires", + cell: (k) => ( + + {k.expires_at ? absolute(k.expires_at) : "never"} + + ), + }, + { + id: "actions", + header: "Actions", + align: "end", + cell: (k) => ( +
+ + + + Regenerate the secret for {label(k)}? The current secret stops working immediately, with + no grace period. + + } + onConfirm={() => regenerate(k)} + /> + {/* Permanent delete is only offered once a key is disabled, so a live + caller can't be broken (and its audit trail erased) in one click. */} + {k.is_active ? null : ( + + Permanently delete {label(k)}? This removes the key and unlinks its usage history. + Cannot be undone. + + } + onConfirm={() => deleteKey.mutate(k.id)} + /> + )} +
+ ), + }, + ]; + + // Bulk delete targets only already-disabled keys, mirroring the per-row rule + // that a live key must be disabled before it can be permanently deleted. + const deletableSelected = selectedKeys.filter((k) => !k.is_active); + return (
setEditing(null)} /> : null} - - - - - - - - - - - - - - - {loading ? ( - - ) : rows.length === 0 ? ( - No API keys yet. Create one to authenticate a caller. - ) : ( - rows.map((k) => ( - { - setAddOpen(false); - setEditing(k.id); - }} - > - - - - - - - - - - )) - )} - -
NameStatusOwnerKeyCreatedLast usedExpiresActions
-
- {k.key_name ?? (unnamed)} -
- - {k.exclude_from_budget ? ( - - Budget-exempt - - ) : null} -
-
-
- - - {isVirtualUser(k.user_id) ? ( - - - virtual - - - ) : ( - {k.user_id ?? "—"} - )} - - {k.key_prefix ? `${k.key_prefix}…` : "—"} - {absolute(k.created_at)}{relative(k.last_used_at) ?? "never"} - - {k.expires_at ? absolute(k.expires_at) : "never"} - - - {/* Row click opens Edit; the action buttons stop propagation so - they fire their own handler instead of also opening Edit. */} -
e.stopPropagation()}> - {k.is_active ? ( - - ) : ( - - )} - - - Regenerate the secret for {label(k)}? The current secret stops working - immediately, with no grace period. - - } - onConfirm={() => regenerate(k)} - /> - {/* Permanent delete is only offered once a key is disabled, so a - live caller can't be broken (and its audit trail erased) in one - click. Disable is the reversible revoke. */} - {k.is_active ? null : ( - - Permanently delete {label(k)}? This removes the key and unlinks its usage - history. Cannot be undone. - - } - onConfirm={() => deleteKey.mutate(k.id)} - /> - )} -
-
+ {selectedIds.length > 0 ? ( + {}} + onClear={selection.clear} + > + + + + + ) : null} + + k.id} + isLoading={loading} + emptyContent="No API keys yet. Create one to authenticate a caller." + selectionMode="multiple" + selectedKeys={selection.selectedKeys} + onSelectionChange={selection.onSelectionChange} + /> + + void runBulk(deletableSelected, (k) => deleteKey.mutateAsync(k.id), () => setBulkDeleteOpen(false))} + /> {revealed ? ( { renderWithClient(); await screen.findByText("openai:gpt-4o"); - await user.click(screen.getByRole("button", { name: /Base in \/ out \$ \/ 1M/ })); + await user.click(screen.getByRole("columnheader", { name: /Base in \/ out \$ \/ 1M/ })); const order = modelOrder(); const miniIndex = order.findIndex((text) => text.includes("gpt-4o-mini")); @@ -496,7 +497,7 @@ describe("ModelsPage", () => { await screen.findByText("openai:gpt-4o"); // Flip the Model column to Z→A and confirm it is persisted. - await user.click(screen.getByRole("button", { name: /^Model/ })); + await user.click(screen.getByRole("columnheader", { name: /^Model/ })); expect(JSON.parse(window.localStorage.getItem("otari.dashboard.modelsSort") ?? "{}")).toEqual({ col: "model", dir: "desc", @@ -537,7 +538,7 @@ describe("ModelsPage", () => { expect(within(table()).getByText("openai:m24")).toBeInTheDocument(); expect(within(table()).queryByText("openai:m25")).not.toBeInTheDocument(); - await user.click(screen.getByRole("button", { name: "Next" })); + await user.click(screen.getByRole("button", { name: "Next page" })); expect(within(table()).getByText("openai:m25")).toBeInTheDocument(); expect(within(table()).queryByText("openai:m00")).not.toBeInTheDocument(); }); @@ -753,4 +754,34 @@ describe("ModelsPage", () => { expect(screen.queryByRole("button", { name: /backfill/i })).not.toBeInTheDocument(); }); + it("bulk-sets pricing on the selected models", async () => { + const fetchMock = mockApi(); + const user = userEvent.setup(); + + renderWithClient(); + await screen.findByText("openai:gpt-4o"); + + const row = tableRow("openai:gpt-4o"); + await user.click(within(row).getByRole("checkbox")); + + const bar = (await screen.findByText("1 selected")).closest("div")!; + await user.click(within(bar).getByRole("button", { name: "Set pricing" })); + + const dialog = await screen.findByRole("alertdialog"); + await user.type(within(dialog).getByLabelText("Input $ / 1M"), "5"); + await user.type(within(dialog).getByLabelText("Output $ / 1M"), "12"); + await user.click(within(dialog).getByRole("button", { name: "Set price" })); + + await vi.waitFor(() => { + const call = fetchMock.mock.calls.find( + ([u, init]) => String(u).includes("/v1/pricing") && (init?.method ?? "").toUpperCase() === "POST", + ); + expect(call).toBeTruthy(); + expect(JSON.parse(String(call![1]!.body))).toMatchObject({ + model_key: "openai:gpt-4o", + input_price_per_million: 5, + output_price_per_million: 12, + }); + }); + }); }); diff --git a/web/src/pages/ModelsPage.tsx b/web/src/pages/ModelsPage.tsx index dac647cf..027118bb 100644 --- a/web/src/pages/ModelsPage.tsx +++ b/web/src/pages/ModelsPage.tsx @@ -1,6 +1,7 @@ import { Button, Card, Chip } from "@heroui/react"; -import { Fragment, type ReactNode, useEffect, useId, useMemo, useState } from "react"; +import { type ReactNode, useEffect, useId, useMemo, useState } from "react"; import { useNavigate, useSearchParams } from "react-router-dom"; +import type { Selection, SortDescriptor } from "react-aria-components"; import { useDeletePricing, @@ -12,10 +13,14 @@ import { useSettings, } from "@/api/hooks"; import type { ModelMetadata, PricingTier } from "@/api/types"; -import { LoadingRow, Table, TableMessage, Td, Th, THead, Tr } from "@/components/Table"; +import { BulkActionBar } from "@/components/BulkActionBar"; +import { DataTable, type DataTableColumn } from "@/components/DataTable"; +import { SetPriceDialog, type ManualRates } from "@/components/SetPriceDialog"; +import { TablePagination } from "@/components/TablePagination"; import { ConfirmButton, ErrorBanner, errorMessage, FilterSelect, InfoBanner, PageHeader } from "@/components/ui"; -import { formatContext, formatCost, formatNumber, formatReleaseDate } from "@/lib/format"; +import { formatContext, formatCost, formatReleaseDate } from "@/lib/format"; import { currentPricing, providerFromModelKey } from "@/lib/pricing"; +import { resolveSelectedIds, useTableSelection } from "@/lib/tableSelection"; // `owned_by` the gateway stamps on a configured alias (ALIAS_OWNED_BY in // src/gateway/api/routes/models.py). Aliases are display names declared in @@ -647,12 +652,6 @@ function ModelDetailPanel({ } const DEFAULT_PAGE_SIZE = 15; -const PAGE_SIZE_OPTIONS = [ - { value: "15", label: "15 per page" }, - { value: "25", label: "25 per page" }, - { value: "50", label: "50 per page" }, -]; - function SearchInput({ value, onChange, placeholder }: { value: string; onChange: (value: string) => void; placeholder: string }) { return ( void; - onPageSize: (pageSize: number) => void; -}) { - return ( -
- - {pageCount > 1 ? `Page ${page + 1} of ${pageCount} · ` : ""} - {formatNumber(total)} model{total === 1 ? "" : "s"} - - - onPageSize(Number(value))} - options={PAGE_SIZE_OPTIONS} - /> - {pageCount > 1 ? ( - <> - - - - ) : null} - -
- ); -} - type SortCol = "model" | "released" | "input" | "output"; type SortDir = "asc" | "desc"; type Sort = { col: SortCol; dir: SortDir }; @@ -733,44 +689,6 @@ function readStoredSort(): Sort { return DEFAULT_SORT; } -function SortableTh({ - label, - col, - sort, - onSort, - align = "left", - info, -}: { - label: string; - col: SortCol; - sort: { col: SortCol; dir: SortDir }; - onSort: (col: SortCol) => void; - align?: "left" | "right"; - info?: ReactNode; -}) { - const active = sort.col === col; - return ( - - - - {info} - - - ); -} - // Compact inline price editor shown in a sub-row under a model, so you can // price it without leaving the list. function InlinePriceForm({ row, onClose }: { row: ModelRow; onClose: () => void }) { @@ -950,91 +868,97 @@ function ModelTable({ rows, isLoading, empty, - sort, - onSort, + sortDescriptor, + onSortChange, selectedKey, onSelect, - pricingKey, - onSetPricingKey, + onEditPricing, comparisonContextTokens, + selectedKeys, + onSelectionChange, }: { rows: ModelRow[]; isLoading: boolean; empty: ReactNode; - sort: { col: SortCol; dir: SortDir }; - onSort: (col: SortCol) => void; + sortDescriptor: SortDescriptor; + onSortChange: (descriptor: SortDescriptor) => void; selectedKey: string | null; onSelect: (key: string) => void; - pricingKey: string | null; - onSetPricingKey: (key: string | null) => void; + onEditPricing: (key: string) => void; comparisonContextTokens: number | null; + selectedKeys: Selection; + onSelectionChange: (keys: Selection) => void; }) { const comparisonLabel = comparisonContextTokens == null ? "Base" : `at ${formatContext(comparisonContextTokens)}`; - return ( - - - - - - } + const columns: DataTableColumn[] = [ + { + id: "model", + header: "Model", + isRowHeader: true, + allowsSorting: true, + cell: (row) => ( + + {row.model} + {row.key} + + ), + }, + { id: "provider", header: "Provider", cell: (row) => {row.provider} }, + { + id: "input", + header: ( + + {`${comparisonLabel} in / out $ / 1M`} + + + ), + align: "end", + allowsSorting: true, + cell: (row) => { + const rates = effectiveRatesAtContext(row, comparisonContextTokens); + return ( + onEditPricing(row.key)} /> - - - - - - {isLoading ? ( - - ) : rows.length > 0 ? ( - rows.map((row) => { - const edit = () => onSetPricingKey(pricingKey === row.key ? null : row.key); - const rates = effectiveRatesAtContext(row, comparisonContextTokens); - return ( - - onSelect(row.key)} selected={row.key === selectedKey}> - - - - - - - {pricingKey === row.key ? ( - - - - ) : null} - - ); - }) - ) : ( - {empty} - )} - -
ProviderCaching {comparisonContextTokens == null ? "policy" : comparisonLabel}Pricing policy
- {row.model} - {row.key} - {row.provider} - - - - - -
- onSetPricingKey(null)} /> -
+ ); + }, + }, + { + id: "caching", + header: `Caching ${comparisonContextTokens == null ? "policy" : comparisonLabel}`, + align: "end", + cell: (row) => ( + onEditPricing(row.key)} /> + ), + }, + { + id: "policy", + header: "Pricing policy", + align: "end", + cell: (row) => onEditPricing(row.key)} />, + }, + ]; + return ( + row.key} + isLoading={isLoading} + emptyContent={empty} + selectionMode="multiple" + selectedKeys={selectedKeys} + onSelectionChange={onSelectionChange} + sortDescriptor={sortDescriptor} + onSortChange={onSortChange} + onRowAction={onSelect} + rowClassName={(row) => (row.key === selectedKey ? "bg-[var(--otari-brand-tint)]" : undefined)} + /> ); } @@ -1058,12 +982,17 @@ export function ModelsPage() { const discoverable = useDiscoverableModels(); const metadata = useModelMetadata(); + const setPricing = useSetPricing(); const [search, setSearch] = useState(""); const [page, setPage] = useState(0); const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE); const [pricingKey, setPricingKey] = useState(null); const [selectedKey, setSelectedKey] = useState(null); const [sort, setSort] = useState(readStoredSort); + const selection = useTableSelection(); + const [bulkPriceOpen, setBulkPriceOpen] = useState(false); + const [bulkPending, setBulkPending] = useState(false); + const [bulkError, setBulkError] = useState(undefined); useEffect(() => { try { @@ -1102,14 +1031,6 @@ export function ModelsPage() { setter(value); setPage(0); }; - const onSort = (col: SortCol) => { - setSort((current) => - current.col === col - ? { col, dir: current.dir === "asc" ? "desc" : "asc" } - : { col, dir: col === "released" ? "desc" : "asc" }, - ); - setPage(0); - }; const rows = useMemo(() => { const configured = new Map(currentPricing(pricing.data ?? []).map((row) => [row.model_key, row])); @@ -1333,6 +1254,52 @@ export function ModelsPage() { const start = clampedPage * pageSize; const pageModels = filteredModels.slice(start, start + pageSize); + const sortDescriptor: SortDescriptor = { + column: sort.col, + direction: sort.dir === "asc" ? "ascending" : "descending", + }; + const onSortChange = (descriptor: SortDescriptor) => { + setSort({ col: String(descriptor.column) as SortCol, dir: descriptor.direction === "ascending" ? "asc" : "desc" }); + setPage(0); + }; + const onEditPricing = (key: string) => setPricingKey((current) => (current === key ? null : key)); + + // Selection targets the visible page; "select all matching" expands to every + // filtered model so a bulk price can be applied to the whole result set. + const selectableKeys = pageModels.map((row) => row.key); + const selectedModelKeys = resolveSelectedIds(selection.selectedKeys, selectableKeys); + const allPageSelected = selectableKeys.length > 0 && selectedModelKeys.length === selectableKeys.length; + const canSelectAllMatching = allPageSelected && total > selectedModelKeys.length; + const bulkTargetKeys = selection.allMatching ? filteredModels.map((row) => row.key) : selectedModelKeys; + const bulkCount = selection.allMatching ? total : selectedModelKeys.length; + const pricingRow = pricingKey + ? (filteredModels.find((row) => row.key === pricingKey) ?? rowsByKey.get(pricingKey) ?? null) + : null; + + const runBulkPricing = async (rates: ManualRates) => { + setBulkPending(true); + setBulkError(undefined); + try { + for (const key of bulkTargetKeys) { + await setPricing.mutateAsync({ + model_key: key, + input_price_per_million: rates.input_price_per_million, + output_price_per_million: rates.output_price_per_million, + cache_read_price_per_million: rates.cache_read_price_per_million ?? null, + cache_write_price_per_million: rates.cache_write_price_per_million ?? null, + cache_write_1h_price_per_million: null, + pricing_tiers: [], + }); + } + selection.clear(); + setBulkPriceOpen(false); + } catch (error) { + setBulkError(error); + } finally { + setBulkPending(false); + } + }; + const modelsLoading = models.isLoading || pricing.isLoading || discoverable.isLoading; const hasActiveFilters = query !== "" || @@ -1436,32 +1403,61 @@ export function ModelsPage() { + {selectedModelKeys.length > 0 ? ( + + + + ) : null} + -
- { - setPageSize(size); - setPage(0); - }} - /> -
+ {pricingRow ? ( + + +
+ Edit pricing + +
+ setPricingKey(null)} /> +
+
+ ) : null} + + { + setPageSize(size); + setPage(0); + }} + pageSizeOptions={[15, 25, 50]} + />
{selectedRow ? ( @@ -1476,6 +1472,21 @@ export function ModelsPage() { ) : null}
+ + + `Apply these per-1M rates to ${count.toLocaleString()} selected ${ + count === 1 ? "model" : "models" + }. This replaces each model's price; pricing tiers and the 1h cache rate are cleared. Edit a single model for tiers.` + } + /> ); } diff --git a/web/src/pages/OverviewPage.tsx b/web/src/pages/OverviewPage.tsx index d17c2bd2..95bc2730 100644 --- a/web/src/pages/OverviewPage.tsx +++ b/web/src/pages/OverviewPage.tsx @@ -13,7 +13,7 @@ import { } from "@/api/hooks"; import type { UsageEntry } from "@/api/types"; import { Sparkline } from "@/components/charts"; -import { LoadingRow, Table, TableMessage, Td, Th, THead, Tr } from "@/components/Table"; +import { DataTable, type DataTableColumn } from "@/components/DataTable"; import { DeltaHint, ErrorBanner, PageHeader, StatCard } from "@/components/ui"; import { deltaFraction, formatNumber, formatPct, formatRelative, formatUsd } from "@/lib/format"; import { budgetHealth, errorRateHealth, providerHealthStatus, toStatStatus } from "@/lib/overview"; @@ -313,6 +313,35 @@ function statusWord(status: string): string { // Newest few requests, as an at-a-glance preview. Rows are read-only; a single // "View all" link opens the full Activity log. Cost is nullable per row. function RecentActivity({ entries, loading, error }: { entries: UsageEntry[]; loading: boolean; error: unknown }) { + const columns: DataTableColumn[] = [ + { + id: "time", + header: "Time", + cell: (entry) => ( + + {formatRelative(entry.timestamp)} + + ), + }, + { id: "model", header: "Model", isRowHeader: true, cell: (entry) => {entry.model} }, + { id: "cost", header: "Cost", align: "end", cell: (entry) => (entry.cost === null ? "—" : formatUsd(entry.cost)) }, + { + id: "status", + header: "Status", + cell: (entry) => ( + + {statusWord(entry.status)} + + ), + }, + ]; + return (
@@ -322,44 +351,14 @@ function RecentActivity({ entries, loading, error }: { entries: UsageEntry[]; lo
- - - - - - - - - - - {loading ? ( - - ) : entries.length === 0 ? ( - No requests yet. Once the gateway serves traffic, it appears here. - ) : ( - entries.map((entry) => ( - - - - - - - )) - )} - -
TimeModelCostStatus
- {formatRelative(entry.timestamp)} - {entry.model}{entry.cost === null ? "—" : formatUsd(entry.cost)} - - {statusWord(entry.status)} - -
+ entry.id} + isLoading={loading} + emptyContent="No requests yet. Once the gateway serves traffic, it appears here." + />
); } diff --git a/web/src/pages/ProvidersPage.tsx b/web/src/pages/ProvidersPage.tsx index 3eedf5b2..381200e3 100644 --- a/web/src/pages/ProvidersPage.tsx +++ b/web/src/pages/ProvidersPage.tsx @@ -26,7 +26,7 @@ import type { UpdateStoredProviderRequest, } from "@/api/types"; import { Field } from "@/components/Field"; -import { LoadingRow, Table, TableMessage, Td, Th, THead, Tr } from "@/components/Table"; +import { DataTable, type DataTableColumn } from "@/components/DataTable"; import { ConfirmButton, ErrorBanner, errorMessage, InfoBanner, PageHeader } from "@/components/ui"; import { formatRelative } from "@/lib/format"; @@ -749,6 +749,108 @@ export function ProvidersPage() { }); }; + const columns: DataTableColumn[] = [ + { + id: "provider", + header: "Provider", + isRowHeader: true, + cell: (row) => ( + + {row.instance} + + ), + }, + { + id: "type", + header: "Type", + cell: (row) => ( + + {row.meta?.provider_type ?? row.stored?.provider_type ?? row.instance} + + ), + }, + { + id: "source", + header: "Source", + cell: (row) => ( + + {row.source === "stored" ? "stored" : "config"} + + ), + }, + { + id: "api_key", + header: "API key", + cell: (row) => ( + + {row.source === "stored" ? ( + row.stored && !row.stored.decryptable ? ( + + ⚠ key unreadable + + ) : ( + {row.stored?.last4 ? `••••${row.stored.last4}` : "none set"} + ) + ) : row.meta?.env_key ? ( + + via {row.meta.env_key} + + ) : ( + "config.yml" + )} + + ), + }, + { id: "status", header: "Status", cell: (row) => }, + { + id: "actions", + header: "Actions", + align: "end", + cell: (row) => + row.source === "stored" ? ( +
+
+ + + deleteProvider.mutate(row.instance)} + > + Delete + +
+ +
+ ) : ( + managed in config.yml + ), + }, + ]; + return (
) : null} - - - - - - - - - - - - - {loading ? ( - - ) : rows.length === 0 ? ( - No providers yet. Add your first provider to start serving models. - ) : ( - rows.map((row) => ( - - - - - - - - - )) - )} - -
ProviderTypeSourceAPI keyStatusActions
- - {row.instance} - - - {row.meta?.provider_type ?? row.stored?.provider_type ?? row.instance} - - {row.source === "stored" ? ( - - stored - - ) : ( - - config - - )} - - {row.source === "stored" ? ( - row.stored && !row.stored.decryptable ? ( - - ⚠ key unreadable - - ) : ( - {row.stored?.last4 ? `••••${row.stored.last4}` : "none set"} - ) - ) : row.meta?.env_key ? ( - - via {row.meta.env_key} - - ) : ( - "config.yml" - )} - - - - {row.source === "stored" ? ( -
-
- - - deleteProvider.mutate(row.instance)} - > - Delete - -
- -
- ) : ( - managed in config.yml - )} -
+ row.instance} + isLoading={loading} + emptyContent="No providers yet. Add your first provider to start serving models." + />
); } diff --git a/web/src/pages/UsagePage.test.tsx b/web/src/pages/UsagePage.test.tsx index ea447115..09101680 100644 --- a/web/src/pages/UsagePage.test.tsx +++ b/web/src/pages/UsagePage.test.tsx @@ -1,5 +1,5 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; -import { render, screen } from "@testing-library/react"; +import { fireEvent, render, screen, within } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import type { ReactElement } from "react"; import { MemoryRouter, Route, Routes, useLocation } from "react-router-dom"; @@ -126,6 +126,27 @@ describe("UsagePage", () => { expect(screen.queryByRole("button", { name: "Export CSV" })).not.toBeInTheDocument(); }); + it("queries a custom from/to window when a custom range is set", async () => { + const user = userEvent.setup(); + const fetchMock = mockApi(summary()); + renderPage(); + await screen.findByText("$1,240.50"); + + await user.click(screen.getByRole("button", { name: "Custom…" })); + fetchMock.mockClear(); + fireEvent.change(screen.getByLabelText("From"), { target: { value: "2026-07-01T00:00" } }); + fireEvent.change(screen.getByLabelText("To"), { target: { value: "2026-07-15T00:00" } }); + + await vi.waitFor(() => { + const summaryCalls = fetchMock.mock.calls.map(([u]) => String(u)).filter((u) => u.includes("/v1/usage/summary")); + // The current-window query carries both bounds (a separate call fetches the + // preceding window for deltas, so assert on the set, not just the last call). + expect(summaryCalls.some((u) => u.includes("start_date=2026-07-01") && u.includes("end_date=2026-07-15"))).toBe( + true, + ); + }); + }); + it("shows cache read and write totals as tiles", async () => { const base = summary(); mockApi(summary({ totals: { ...base.totals, cache_read_tokens: 5_100_000, cache_write_tokens: 2_700_000 } })); @@ -316,6 +337,62 @@ describe("UsagePage", () => { expect(await screen.findByText(/No usage yet/)).toBeInTheDocument(); }); + it("bulk-deletes imported rows from the Individual requests list", async () => { + const importedRow = { + id: "imp-1", + user_id: "alice", + api_key_id: null, + timestamp: new Date().toISOString(), + model: "claude-sonnet-5", + provider: "anthropic", + endpoint: "external", + prompt_tokens: 100, + completion_tokens: 50, + total_tokens: 150, + cache_read_tokens: null, + cache_write_tokens: null, + cache_write_1h_tokens: null, + billing_meters: null, + pricing_breakdown: null, + cost: null, + status: "success", + error_message: null, + latency_ms: 120, + source: "claude_code", + source_label: null, + counts_toward_budget: false, + }; + const calls: { url: string; method: string; body: string | undefined }[] = []; + vi.spyOn(globalThis, "fetch").mockImplementation(async (input, init) => { + const url = String(input); + const method = (init?.method ?? "GET").toUpperCase(); + calls.push({ url, method, body: typeof init?.body === "string" ? init.body : undefined }); + if (url.endsWith("/v1/usage") && method === "DELETE") return jsonResponse({ deleted: 1 }); + if (url.includes("/v1/usage/summary")) return jsonResponse(summary()); + if (url.includes("/v1/usage/count")) return jsonResponse({ total: 1 }); + if (url.includes("/v1/users")) return jsonResponse([{ user_id: "alice", alias: "Alice" }]); + if (url.includes("/v1/keys")) return jsonResponse([]); + if (url.includes("/v1/usage")) return jsonResponse([importedRow]); + return jsonResponse([]); + }); + const user = userEvent.setup(); + renderPage(); + + const row = (await screen.findByText("claude-sonnet-5")).closest("tr")!; + await user.click(within(row).getByRole("checkbox")); + + const bar = (await screen.findByText("1 selected")).closest("div")!; + await user.click(within(bar).getByRole("button", { name: "Delete" })); + const dialog = await screen.findByRole("alertdialog"); + await user.click(within(dialog).getByRole("button", { name: "Delete" })); + + await vi.waitFor(() => { + const del = calls.find((c) => c.url.endsWith("/v1/usage") && c.method === "DELETE"); + expect(del).toBeTruthy(); + expect(del!.body).toContain("imp-1"); + }); + }); + it("collapses the filter controls behind a mobile toggle that expands them", async () => { mockApi(summary()); const user = userEvent.setup(); @@ -349,5 +426,4 @@ describe("UsagePage", () => { expect(await screen.findByRole("button", { name: "Filters (1)" })).toBeInTheDocument(); }); - }); diff --git a/web/src/pages/UsagePage.tsx b/web/src/pages/UsagePage.tsx index 935518eb..16ba3469 100644 --- a/web/src/pages/UsagePage.tsx +++ b/web/src/pages/UsagePage.tsx @@ -1,14 +1,34 @@ import { Button, Spinner } from "@heroui/react"; -import { clsx } from "clsx"; -import { useMemo, useState } from "react"; +import clsx from "clsx"; +import { useEffect, useMemo, useRef, useState } from "react"; import { useNavigate } from "react-router-dom"; -import { useKeys, useUsageSummary, useUsers } from "@/api/hooks"; -import type { UsageBucket, UsageFilters, UsageGroupRow, UsageSeriesPoint } from "@/api/types"; +import { + useDeleteUsage, + useKeys, + useSetUsagePrice, + useUsageCount, + useUsageLogs, + useUsageSummary, + useUsers, +} from "@/api/hooks"; +import type { + UsageBucket, + UsageEntry, + UsageFilters, + UsageGroupRow, + UsageMutationSelection, + UsageSeriesPoint, +} from "@/api/types"; +import { BulkActionBar } from "@/components/BulkActionBar"; import { BarTrendChart, Sparkline } from "@/components/charts"; -import { LoadingRow, Table, TableMessage, Td, Th, THead, Tr } from "@/components/Table"; +import { ConfirmDialog } from "@/components/ConfirmDialog"; +import { DataTable, type DataTableColumn } from "@/components/DataTable"; +import { SetPriceDialog, type ManualRates } from "@/components/SetPriceDialog"; +import { TablePagination } from "@/components/TablePagination"; import { DeltaHint, ErrorBanner, FilterComboBox, PageHeader, StatCard } from "@/components/ui"; import { deltaFraction, formatPct, formatTokens, formatUsd } from "@/lib/format"; +import { resolveSelectedIds, useTableSelection } from "@/lib/tableSelection"; // ---------- formatting ---------- @@ -71,6 +91,9 @@ interface BreakdownProps { // share-of-total bar; clicking a named row drills into the Activity log filtered // to that dimension. The synthesized "other" fold row (null key) is shown but not // clickable, so the visible spend still reconciles with the total-spend tile. +const OTHER_KEY = "__other__"; +const UNKNOWN_KEY = "__unknown__"; + function BreakdownTable({ title, rows, @@ -83,63 +106,57 @@ function BreakdownTable({ const visible = showAll ? rows : rows.slice(0, TABLE_TOP_N); const hidden = rows.length - visible.length; + // Fold and deleted-user rows both carry a null key and are not drill targets; + // give them stable sentinel keys so the collection stays unique. + const rowKey = (row: UsageGroupRow) => (row.is_other ? OTHER_KEY : (row.key ?? UNKNOWN_KEY)); + + const columns: DataTableColumn[] = [ + { + id: "name", + header: title.replace("Spend by ", ""), + isRowHeader: true, + cell: (row) => { + const share = totalCost > 0 ? row.cost / totalCost : 0; + return ( +
+ + {row.is_other + ? `Other (${row.requests.toLocaleString()} req)` + : row.key === null + ? "(unknown)" + : row.key} + + + + +
+ ); + }, + }, + { id: "requests", header: "Requests", align: "end", cell: (row) => {formatCount(row.requests)} }, + { id: "spend", header: "Spend", align: "end", cell: (row) => {formatUsd(row.cost)} }, + ]; + return (

{title}

- - - - - - - - - - {loading ? ( - - ) : rows.length === 0 ? ( - {emptyLabel} - ) : ( - visible.map((row, index) => { - const isOther = row.is_other; - // A real group can also have a null key (usage from a since-deleted - // user); it is shown as "(unknown)" and, like the fold, is not a - // drill target because there is no id to filter on. - const drillable = !isOther && row.key !== null; - const share = totalCost > 0 ? row.cost / totalCost : 0; - return ( - onDrill(row.key as string) : undefined} - > - - - - - ); - }) - )} - -
{title.replace("Spend by ", "")}RequestsSpend
-
- - {isOther - ? `Other (${row.requests.toLocaleString()} req)` - : row.key === null - ? "(unknown)" - : row.key} - - {/* Share-of-total bar. Width is data-driven, so it rides an - inline style like the Table's computed column widths. */} - - - -
-
{formatCount(row.requests)}{formatUsd(row.cost)}
+ { + // Only real groups drill; the fold and deleted-user rows have no id to filter on. + if (key !== OTHER_KEY && key !== UNKNOWN_KEY) { + onDrill(key); + } + }} + /> {!loading && hidden > 0 ? ( + + + ) : null} + + e.id} + isLoading={usage.isLoading} + emptyContent={anyFilter ? "No requests match these filters." : "No requests recorded yet."} + selectionMode="multiple" + selectedKeys={selection.selectedKeys} + onSelectionChange={selection.onSelectionChange} + disabledKeys={disabledKeys} + /> + + { + setPageSize(size); + setPage(0); + }} + isFetching={usage.isFetching} + hasNextFallback={rows.length === pageSize} + /> + + + + +
+ ); +} + // ---------- page ---------- export function UsagePage() { @@ -205,28 +418,40 @@ export function UsagePage() { const [startDate, setStartDate] = useState(() => DEFAULT_PRESET.seconds === null ? undefined : isoAgo(DEFAULT_PRESET.seconds), ); + // Custom range: an explicit from/to window (like the Activity page), buckets + // daily. When active it overrides the preset window. + const [customMode, setCustomMode] = useState(false); + const [customFrom, setCustomFrom] = useState(""); + const [customTo, setCustomTo] = useState(""); const [modelFilter, setModelFilter] = useState(""); const [userFilter, setUserFilter] = useState(""); const [apiKeyFilter, setApiKeyFilter] = useState(""); const [metric, setMetric] = useState("cost"); - // On mobile the user/model/key controls collapse behind a "Filters" toggle so - // the stat tiles are not pushed far down the page; desktop shows them inline. - // The time-range presets stay visible either way. - const [filtersOpen, setFiltersOpen] = useState(false); + + const winStart = customMode ? customFrom || undefined : startDate; + const winEnd = customMode ? customTo || undefined : undefined; + const bucket: UsageBucket = customMode ? "day" : preset.bucket; const filters: UsageFilters = useMemo( () => ({ - start_date: startDate, + start_date: winStart, + end_date: winEnd, model: modelFilter.trim() || undefined, user_id: userFilter || undefined, api_key_id: apiKeyFilter || undefined, }), - [startDate, modelFilter, userFilter, apiKeyFilter], + [winStart, winEnd, modelFilter, userFilter, apiKeyFilter], ); // The immediately-preceding window of equal length, for period-over-period // deltas. Only meaningful for a bounded range. const previousFilters: UsageFilters | null = useMemo(() => { + if (customMode) { + if (!winStart || !winEnd) return null; + const span = new Date(winEnd).getTime() - new Date(winStart).getTime(); + if (!(span > 0)) return null; + return { ...filters, start_date: new Date(new Date(winStart).getTime() - span).toISOString(), end_date: winStart }; + } if (preset.seconds === null || !startDate) return null; return { ...filters, @@ -234,10 +459,10 @@ export function UsagePage() { // Cap the previous window at the current window's start. end_date: startDate, }; - }, [filters, preset.seconds, startDate]); + }, [customMode, winStart, winEnd, filters, preset.seconds, startDate]); - const summary = useUsageSummary(filters, preset.bucket); - const previous = useUsageSummary(previousFilters ?? filters, preset.bucket, previousFilters !== null); + const summary = useUsageSummary(filters, bucket); + const previous = useUsageSummary(previousFilters ?? filters, bucket, previousFilters !== null); const data = summary.data; const totals = data?.totals; @@ -248,7 +473,7 @@ export function UsagePage() { // omits the model filter, so the list stays complete when a model is selected, // and derived directly from query data rather than mirrored into state. const modelSuggestFilters: UsageFilters = useMemo(() => ({ ...filters, model: undefined }), [filters]); - const modelSuggest = useUsageSummary(modelSuggestFilters, preset.bucket); + const modelSuggest = useUsageSummary(modelSuggestFilters, bucket); const modelOptions = modelSuggest.data?.by_model?.filter((r) => !r.is_other && r.key !== null).map((r) => r.key as string) ?? []; @@ -266,21 +491,26 @@ export function UsagePage() { modelFilter && !modelOptions.includes(modelFilter) ? [modelFilter, ...modelOptions] : modelOptions ).map((m) => ({ value: m, label: m })); - const anyFilter = Boolean(modelFilter.trim() || userFilter || apiKeyFilter || preset.seconds !== null); - // Count only the collapsible controls (not the always-visible time range) so - // the mobile toggle can advertise how many are active while hidden. + const timeFiltered = customMode ? Boolean(winStart || winEnd) : preset.seconds !== null; + const anyFilter = Boolean(modelFilter.trim() || userFilter || apiKeyFilter || timeFiltered); + // On mobile the user/model/key controls collapse behind a "Filters" toggle so + // the tiles and breakdowns sit near the top; desktop shows them inline. + const [filtersOpen, setFiltersOpen] = useState(false); const activeFilterCount = [modelFilter.trim(), userFilter, apiKeyFilter].filter(Boolean).length; // Distinguish "this gateway has never served a request" from "no rows match // these filters": the first is an onboarding state, the second is a filter hint. const isEmptyEver = Boolean(data && totals && totals.request_count === 0 && !anyFilter); const pickPreset = (next: Preset) => { + setCustomMode(false); setPreset(next); setStartDate(next.seconds === null ? undefined : isoAgo(next.seconds)); }; const clearFilters = () => { pickPreset(TIME_PRESETS[TIME_PRESETS.length - 1]); // All + setCustomFrom(""); + setCustomTo(""); setModelFilter(""); setUserFilter(""); setApiKeyFilter(""); @@ -310,7 +540,7 @@ export function UsagePage() { // single point has no trend to draw, so sparklines only appear with 2+ buckets. const series = data?.series ?? []; const hasTrend = series.length > 1; - const trend = trendData(series, metric, preset.bucket); + const trend = trendData(series, metric, bucket); return (
@@ -326,21 +556,45 @@ export function UsagePage() { - {/* Filters. On mobile the boxes collapse behind the "Filters" toggle so the - stat tiles stay near the top; the time-range presets stay visible. */} + {/* Filters */}
{TIME_PRESETS.map((option) => ( ))} +
+ {customMode ? ( +
+ + +
+ ) : null} + + + + + + ) : null} + + ); +} + // ---------- page ---------- export function UsersPage() { @@ -293,10 +361,118 @@ export function UsersPage() { const showOnboarding = !loading && rows.length === 0 && !addOpen; const budgetById = new Map((budgets.data ?? []).map((b) => [b.budget_id, b])); + const selection = useTableSelection(); + const [bulkDeleteOpen, setBulkDeleteOpen] = useState(false); + const [assignOpen, setAssignOpen] = useState(false); + const [bulkError, setBulkError] = useState(undefined); + const [bulkPending, setBulkPending] = useState(false); + + const selectableKeys = rows.map((u) => u.user_id); + const selectedIds = resolveSelectedIds(selection.selectedKeys, selectableKeys); const setBlocked = (u: User, blocked: boolean) => updateUser.mutate({ id: u.user_id, body: { blocked } }); + const runBulk = async (action: (id: string) => Promise, onDone: () => void) => { + setBulkPending(true); + setBulkError(undefined); + try { + for (const id of selectedIds) { + await action(id); + } + selection.clear(); + onDone(); + } catch (error) { + setBulkError(error); + } finally { + setBulkPending(false); + } + }; + + const columns: DataTableColumn[] = [ + { + id: "user", + header: "User", + isRowHeader: true, + cell: (u) => ( +
+ + {u.user_id} + {isVirtualUser(u.user_id) ? ( + + virtual + + ) : null} + + {u.alias ? {u.alias} : null} +
+ ), + }, + { id: "status", header: "Status", cell: (u) => }, + { + id: "budget", + header: "Budget", + cell: (u) => + u.budget_id ? ( + + {budgetById.get(u.budget_id) ? budgetLabel(budgetById.get(u.budget_id)!) : shortId(u.budget_id)} + + ) : ( + + ), + }, + { + id: "spend", + header: "Spend", + cell: (u) => ( + + {formatUSD(u.spend)} + {u.reserved > 0 ? (+{formatUSD(u.reserved)} held) : null} + + ), + }, + { id: "access", header: "Model access", cell: (u) => }, + { + id: "actions", + header: "Actions", + align: "end", + cell: (u) => ( +
+ + + + Delete {u.user_id}? This deactivates its API keys and hides the user; usage history is + preserved. + + } + onConfirm={() => deleteUser.mutate(u.user_id)} + /> +
+ ), + }, + ]; + return (
setEditing(null)} /> : null} - - - - - - - - - - - - - {loading ? ( - - ) : rows.length === 0 ? ( - No users yet. Create one, or create an API key to auto-create one. - ) : ( - rows.map((u) => { - const budget = u.budget_id ? budgetById.get(u.budget_id) : undefined; - return ( - { - setAddOpen(false); - setEditing(u.user_id); - }} - > - - - - - - - - ); - }) - )} - -
UserStatusBudgetSpendModel accessActions
-
- - {u.user_id} - {isVirtualUser(u.user_id) ? ( - - virtual - - ) : null} - - {u.alias ? {u.alias} : null} -
-
- - - {u.budget_id ? ( - {budget ? budgetLabel(budget) : shortId(u.budget_id)} - ) : ( - "—" - )} - - {formatUSD(u.spend)} - {u.reserved > 0 ? ( - (+{formatUSD(u.reserved)} held) - ) : null} - - - - {/* Row click opens Edit; action buttons stop propagation so - they fire their own handler instead of also opening Edit. */} -
e.stopPropagation()}> - {u.blocked ? ( - - ) : ( - - )} - - - Delete {u.user_id}? This deactivates its API keys and hides the user; - usage history is preserved. - - } - onConfirm={() => deleteUser.mutate(u.user_id)} - /> -
-
+ {selectedIds.length > 0 ? ( + {}} + onClear={selection.clear} + > + + + + ) : null} + + u.user_id} + isLoading={loading} + emptyContent="No users yet. Create one, or create an API key to auto-create one." + selectionMode="multiple" + selectedKeys={selection.selectedKeys} + onSelectionChange={selection.onSelectionChange} + /> + + runBulk((id) => deleteUser.mutateAsync(id), () => setBulkDeleteOpen(false))} + /> + + + runBulk((id) => updateUser.mutateAsync({ id, body: { budget_id: budgetId } }), () => setAssignOpen(false)) + } + />
); } diff --git a/web/src/styles/globals.css b/web/src/styles/globals.css index 3a1ea38c..f4f11f00 100644 --- a/web/src/styles/globals.css +++ b/web/src/styles/globals.css @@ -14,6 +14,51 @@ --otari-bg: #f6f9fa; } +/* Shared DataTable styling (HeroUI's Table). + + HeroUI's Table.Root already IS a card: its default `primary` variant gives the + root its own gray surface, a 32px border-radius, and 4px inner padding. Wrapping + it in a second card (our border + rounded-xl) left two mismatched radii and a + 4px inset gap, so the header floated instead of meeting the card corner. Fix it + by making `.otari-table` the single card: neutralize the variant's surface, + radius, and padding, then own the container styling here. The header fills to + the edges and the root's `overflow: hidden` clips it (and the last row) to one + 12px radius, so header and card share the same corner. Rules are scoped to + `.otari-table` and placed after the `@heroui/styles` import, so they win the + cascade without `!important`. + + Column selectors are replicated with the `.otari-table` prefix so they outrank + HeroUI's own first/last-column radius rules (which are more specific than a + bare `.table__column`). */ +.otari-table.table-root { + background-color: var(--otari-surface); + border: 1px solid var(--otari-line); + border-radius: 0.75rem; /* rounded-xl */ + padding: 0; + overflow: hidden; +} +.otari-table .table__header { + background-color: var(--otari-brand-tint); + border-bottom: 1px solid var(--otari-line); +} +.otari-table .table__column, +.otari-table [role="row"] > [role="presentation"]:first-of-type > .table__column, +.otari-table [role="row"] > [role="presentation"]:last-of-type > .table__column { + background-color: transparent; + color: var(--otari-ink); + font-weight: 600; + border-radius: 0; +} +.otari-table .table__column::after { + content: none; +} +.otari-table .table__row .table__cell { + border-color: var(--otari-line); +} +.otari-table .table__row:hover .table__cell { + background-color: var(--otari-bg); +} + html, body, #root {